Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.11.13;
Скачать: CL | DM;

Вниз

Работа с Variant   Найти похожие ветки 

 
HEXO4YXA ©   (2005-10-26 11:33) [0]

Вопрос по работе с типом Variant

Функция Locate принимает тип Variant, в который я хочу засунуть динамический массив.

Динамический массив преобразуеться в тип Variant функцией DynArrayToVariant, но при этом возникает эксепшн EVariantTypeCastError "Invalid variant type conversion".

Что я делаю не так ?

вот код:

var KeyFields: string;
   KeyValues: Variant;
   a: array of integer;
   ss: TStringList;
begin with dm do begin
  KeyFields := "";
  if cbFindInst.Text <> "" then begin
     KeyFields := KeyFields + "INST";
     SetLength(a, 1);
     a[0] := 1;
  end;
  if eFindREGNUM.Text <> "" then begin
     KeyFields := KeyFields + ";REG_NUM";
     SetLength(a, 2);
     a[1] := StrToInt(eFindREGNUM.Text);
  end;
  if eFindREGYEAR.Text <> "" then begin
     KeyFields := KeyFields + ";REG_YEAR";
     SetLength(a, 3);
     a[2] := StrToInt(eFindREGYEAR.Text);
  end;

  if KeyFields <> "" then begin

     // Сдесь возникает эксепшн
     DynArrayToVariant(KeyValues, @a, TypeInfo(integer));

     fibFindCases.Locate(KeyFields, KeyValues, [loPartialKey]);
  end;  
end; end;


 
Плохиш ©   (2005-10-26 11:40) [1]

На разбирайся

var
   varSearch:  Variant;
   lstFields:  TStrings;
....
     varSearch := VarArrayCreate( [0, lstFields.Count-1], varVariant );
     for lCount := 0 to lstFields.Count-1 do
       varSearch[lCount] := tblMSSQL.FindField(lstFields.Strings[lCount]).Value;
     if lstFields.Count = 1 then
       Result := tblPostgre.Locate( strSearch, varSearch[0], [loCaseInsensitive] )
     else
       Result := tblPostgre.Locate( strSearch, Variant(varSearch), [loCaseInsensitive] );


 
Leonid Troyanovsky ©   (2005-10-26 12:13) [2]


> HEXO4YXA ©   (26.10.05 11:33)  

> Динамический массив преобразуеться в тип Variant функцией
> DynArrayToVariant, но при этом возникает эксепшн EVariantTypeCastError
> "Invalid variant type conversion".

> Что я делаю не так ?


Для того, чтобы пользоваться оной функцией нужно обладать
стальными нервами.
Т.е., проще всего собс-ручно создавть массив variant, благо
это гораздо проще. И, более того, нет уверенности, что Locate
нужно именно то самое.

--
Regards, LVT.

ЗЫ: Вот пример  преобразований:

type
 TLongArray = array of Longint;

procedure TForm1.Button1Click(Sender: TObject);
var
 a: array of Longint;
 v: Variant;
begin
 SetLength(a, 2);
 a[0] := 1;
 a[1] := 2;
 DynArrayToVariant(v, a, TypeInfo(TLongArray));
 SetLength(a,0);
 DynArrayFromVariant(Pointer(a), v, TypeInfo(TLongArray));
 Caption := Format("%d %d", [a[0], a[1]]);
end;


 
HEXO4YXA ©   (2005-10-26 15:39) [3]

да нервы вобщемто у меня стальные... только...

Тогда такой вопрос, как в тип Variant динамически добавить элемент ?


 
HEXO4YXA ©   (2005-10-26 15:41) [4]

извините... не в тип конечно, а в переменную типа Variant


 
Плохиш ©   (2005-10-26 15:48) [5]

VarArrayRedim, если это имелось в виду.



Страницы: 1 вся ветка

Текущий архив: 2005.11.13;
Скачать: CL | DM;

Наверх




Память: 0.45 MB
Время: 0.027 c
2-1129725970
Dinny
2005-10-19 16:46
2005.11.13
Редактирование индексированных таблиц


14-1130152811
Беспечный_Ангел
2005-10-24 15:20
2005.11.13
Алгоритм оптимального расположения отрезков


2-1129620068
Id
2005-10-18 11:21
2005.11.13
Работа с базами FB


11-1109240693
Kirill
2005-02-24 13:24
2005.11.13
Событие после запуска Applet


8-1118673537
nWind
2005-06-13 18:38
2005.11.13
Сравнение gif ов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский