Главная страница
    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.042 c
1-1130164870
Griffon
2005-10-24 18:41
2005.11.13
Сумма строк в StringGrid


14-1129620517
Игорь Шевченко
2005-10-18 11:28
2005.11.13
Кто мешает достойно жить москвичам ?


14-1129987892
SPeller
2005-10-22 17:31
2005.11.13
Стрим-ТВ


6-1122644203
Flame
2005-07-29 17:36
2005.11.13
idsmtp передача e-mail


1-1130228385
Vriter
2005-10-25 12:19
2005.11.13
Расширение CheckListBox





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