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

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

как лучше загрузить данные в базу? (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


Наверх

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