![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
AppendRecord массивом [D6]
serp © (2007-04-03 17:22:00)Нужно сначало записать данные в массив, а потом одной строчкой с AppendRecord загнать в базу.
Можно так?
Делаю так:
A: Variant;
A := VarArrayCreate([0, OraQuery1.Fields.Count], varVariant);
while not OraQuery1.Eof do begin
for i:=0 to OraQuery1.FieldDefs.Count-1 do begin
A[i]:=OraQuery1.FieldByName(OraQuery1.FieldDefs.Items[i].Name).AsVariant;
end;
ADOTable1.AppendRecord([A]);
........
'Invalid variant type conversion'
???
Jan1 (2007-04-04 11:20:00) [1]
> А Insert для 30т. записей, не скажется более долгим по времени
> чем appendrecord?
ну и конечно если ты будишь коммитить не каждую запись а где-то каждую 1000-ную то скорость будет приличная.
Jan1 (2007-04-04 11:15:00) [2]
> А Insert для 30т. записей, не скажется более долгим по времени
> чем appendrecord?
это одно и то же. только ты будешь явно приводить типы.
serp (2007-04-04 10:37:00) [3]>> Зачем тебе Appendrecord? Заюзай Insert и Post
А Insert для 30т. записей, не скажется более долгим по времени чем appendrecord?
Jan1 (2007-04-04 10:33:00) [4]Зачем тебе Appendrecord? Заюзай Insert и Post
serp (2007-04-04 10:31:00) [5]
type
PVarRec = ^TVarRec;
TVarRec = record
case Byte of
vtInteger: (VInteger: Integer; VType: Byte);
vtBoolean: (VBoolean: Boolean);
vtChar: (VChar: Char);
vtExtended: (VExtended: PExtended);
vtString: (VString: PShortString);
vtPointer: (VPointer: Pointer);
vtPChar: (VPChar: PChar);
vtObject: (VObject: TObject);
vtClass: (VClass: TClass);
vtWideChar: (VWideChar: WideChar);
vtPWideChar: (VPWideChar: PWideChar);
vtAnsiString: (VAnsiString: Pointer);
vtCurrency: (VCurrency: PCurrency);
vtVariant: (VVariant: PVariant);
vtInterface: (VInterface: Pointer);
vtWideString: (VWideString: Pointer);
vtInt64: (VInt64: PInt64);
end;
serp (2007-04-04 10:30:00) [6]>> анрил чего? линкед создается на сервере.
Ладно.. кто знает, тот поймет.. я не понял.
Вопрос:
Как загнать в A значения?
A : array of TVarRec;
A[i]:=OraQuery1.FieldByName(OraQuery1.FieldDefs.Items[i].Name).AsVariant;
не так. а как?
Jan1 (2007-04-04 10:14:00) [7]
> К ораклу коннекчусь без клиента ODAC.
> К DBF через Jet 4, ADO.
> Так что анрил....
анрил чего? линкед создается на сервере.
serp (2007-04-04 08:57:00) [8]К ораклу коннекчусь без клиента ODAC.
К DBF через Jet 4, ADO.
Так что анрил....
Sergey13 (2007-04-04 08:55:00) [9]> [3] serp (04.04.07 08:51)
Я просто не въехал про 2 СУБД. Но в принципе можно, если дбф-ку подлинковать к ораклу. Вроде такое возможно через ОДБС. Подробностей не скажу - сам не пользовался.
serp (2007-04-04 08:51:00) [10]Спасибо!
> Sergey13 © (04.04.07 08:38) [2]
База на Oracle записывается в DBF (FoxBase). Из оракла данные вытягиваются в нужной форме запросом и 1 к одному заливаются в DBF.
Как тут "Insert into Select from"? я не догоняю...
> Johnmen © (03.04.07 21:25) [1]
Я с этого кода начинал. Но уперся в то, что на
это A[i]:=OraQuery1.FieldByName(OraQuery1.FieldDefs.Items[i].Name).AsVariant;
при A : array of TVarRec;
начинается " Incompatible types: 'TVarRec' and 'Variant' ".......
Не подскажите... ?
Sergey13 (2007-04-04 08:38:00) [11]> [0] serp (03.04.07 17:22)
А почему не просто
Insert into Select from
?
Зачем на клиента тащить, только что бы вставить?
Johnmen (2007-04-03 21:25:00) [12]A : array of TVarRec;
SetLength(A,OraQuery1.Fields.Count);
while ...
...
ADOTable1.AppendRecord(A);