перенос данных из таблицы в таблицу
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Всем привет! Тема следующая, есть две таблицы TADOQuery или TTABLE с одинаковыми полями, как из одной ado перенести в другую ado или из table в table или из ado в table или обратно, нужен хотя бы один самый быстрый и удобный пример.
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Если это разовая операция, тоглда воспользуйтесь утилитой 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) алгоритмический подход - непосредственный перелив данных в цикле.
Предупреждяю, код не отлаживался, не содежит обработки искоючений... Т.е. только демонстрирует осн. идею. Должен работать с любыми таблицами, лишь бы их структура была одинаковой. TDataset - это "дедушка" как TTable, так и других кастомизированных датасетов, так что благодаря полиморфизму этой процедуре должно быть пофиг, что за база.
Если таблицы находятся в одной базе то это
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;