![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как лучше загрузить данные в базу? (ADO, Access) [D7, 95/98, XP]
umbra © (2008-01-15 12:49:00)есть кусок таблицы, сохраненный в файл методом
TADODataSet.SaveToFile. Загружаем его с помощьюTADODataSet.LoadFromFile. Как лучше занести данные в базу?
Пока что ничего кроме UPDATE в цикле по записям придумать не могу.
umbra (2008-01-15 17:12:00) [1]
> Перед загрузкой Dataset все равно закроется. Нужно загружать
> в другой (неоткрытый) датасет, при загрузке он откроется.
> Затем надо в цикле переносить данные.
спасибо. Я тоже уже понял, что без отдельного датасета и цикла не обойтись
palva (2008-01-15 16:42:00) [2]Вы хотите загружать в открытый датасет? По-моему так не получится.
Перед загрузкой Dataset все равно закроется. Нужно загружать в другой (неоткрытый) датасет, при загрузке он откроется. Затем надо в цикле переносить данные. Других способов я не знаю.
procedure TForm1.Button1Click(Sender: TObject);
begin
ADOConnection1.Open;
ADOConnection1.Execute('create table table1 (i1 integer)');
ADOConnection1.Execute('insert into table1(i1) values(5)');
ADOConnection1.Execute('insert into table1(i1) values(6)');
ADOConnection1.Execute('insert into table1(i1) values(7)');
ADOConnection1.Execute('insert into table1(i1) values(8)');
ADOConnection1.Execute('create table table2 (i1 integer)');
ADOConnection1.Execute('insert into table2(i1) values(41)');
ADOConnection1.Execute('insert into table2(i1) values(42)');
ADOConnection1.Execute('insert into table2(i1) values(43)');
ADOConnection1.Close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
AdoDataset1.Connection := ADOConnection1;
AdoDataset2.Connection := ADOConnection1;
AdoDataset1.CommandText := 'table1';
AdoDataset1.CursorType := ctStatic;
AdoDataset1.LockType := ltReadOnly;
AdoDataset1.CommandType := cmdTable;
AdoDataset1.Open;
ADODataset1.SaveToFile('file.xml');
AdoDataset1.Close;
ADODataset2.LoadFromFile('file.xml');
AdoDataset1.CursorType := ctDynamic;
AdoDataset1.CommandText := 'table2';
AdoDataset1.LockType := ltBatchOptimistic;
AdoDataset1.CommandType := cmdTable;
AdoDataset1.Open;
while not ADODataset2.Eof do begin
AdoDataset1.Append;
AdoDataset1.Fields[0] := AdoDataset2.Fields[0];
AdoDataset1.Next;
AdoDataset2.Next;
end;
AdoDataset1.UpdateBatch();
ADODataset1.Close;
ADODataset2.Close;
end;
Может sniknik что предложит. Он знаток.
umbra (2008-01-15 14:56:00) [3]
> Чтобы не делать цикл можно использовать метод UpdateBatch
А как? Я просто плохо понимаю, что происходит при загрузке датасета из файла, и не знаю, где почитать. Что, например, происходит с предыдущим значением свойства CommandText?
palva (2008-01-15 14:44:00) [4]Чтобы не делать цикл можно использовать метод UpdateBatch