Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.11.13;
Скачать: [xml.tar.bz2];

Вниз

Работа с 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.041 c
9-1119391313
SOL
2005-06-22 02:01
2005.11.13
delphiX


14-1129821760
BerkeleyMan
2005-10-20 19:22
2005.11.13
Посоветуйте программу (Audio CD -> MP3)


2-1129657702
Galiaf
2005-10-18 21:48
2005.11.13
Динамический двухмерный массив.


3-1127998807
Deks
2005-09-29 17:00
2005.11.13
Связанные таблицы


3-1128350839
alex_***
2005-10-03 18:47
2005.11.13
RefreshRecord





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский