Текущий архив: 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