перенос данных из таблицы в таблицу

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dr_Grizzly
Сообщения: 406
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

28 апр 2007, 09:20

Всем привет! Тема следующая, есть две таблицы TADOQuery или TTABLE с одинаковыми полями, как из одной ado перенести в другую ado или из table в table или из ado в table или обратно, нужен хотя бы один самый быстрый и удобный пример.
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Naeel Maqsudov
Сообщения: 2551
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

28 апр 2007, 22:02

Если это разовая операция, тоглда воспользуйтесь утилитой DataPump, входящей в BDE. Иначе надо ибобрести маленький велосипед:

Если таблицы находятся в одной базе то это

TDatabase.Execute('insert into табл1 select * from табл2');
или
ADOConnection1.Execute('insert into табл1 select * from табл2');
Это правильнее и быстрее всего!

Если в разных базах, то для парадокса это тоже не проблема, просто имена таблиц надо указывать в кавычках с путями.

В остальных случаях можно выделить два подхода
1) экспорт/импорт - когда пробегая по одной таблице формируют текстовый файл с командами "insert into табл2 values(,,,,)" (это экспорт). А затем просто выполняют получившийся sql-скрипт на другой базе.
2) алгоритмический подход - непосредственный перелив данных в цикле.

Код: Выделить всё

procedure DataPump(SrcDS, DstDS:TDataset);
var
  i:longint;
begin
  SrcDS.First;
  while not SrcDS.Eof do begin
    DstDS.Insert;
    for i:=0 to pred(DstDS.Fields.Count) do begin
      DstDS.Fields[i].Value:=SrcDS.Fields[i].Value
    end;
    DstDS.Post;
    SrcDS.Next;
  end;
end;
Предупреждяю, код не отлаживался, не содежит обработки искоючений... Т.е. только демонстрирует осн. идею. Должен работать с любыми таблицами, лишь бы их структура была одинаковой. TDataset - это "дедушка" как TTable, так и других кастомизированных датасетов, так что благодаря полиморфизму этой процедуре должно быть пофиг, что за база.
Ответить