Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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);


Наверх

Титульная страница Поиск, карта сайта Написать письмо