![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с Variant
HEXO4YXA © (2005-10-26 11:33:00)Вопрос по работе с типом 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 15:48:00) [1]VarArrayRedim, если это имелось в виду.
HEXO4YXA (2005-10-26 15:41:00) [2]извините... не в тип конечно, а в переменную типа Variant
HEXO4YXA (2005-10-26 15:39:00) [3]да нервы вобщемто у меня стальные... только...
Тогда такой вопрос, как в тип Variant динамически добавить элемент ?
Leonid Troyanovsky (2005-10-26 12:13:00) [4]
> 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;
Плохиш (2005-10-26 11:40:00) [5]На разбирайся
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] );