Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Копирование таблиц из второстепенных баз в гланую


Автор: addet 5.3.2008, 16:42
Добрый день! Обращаюсь опять к Вам за помощью. Необходимо из таблиц второстепенных баз mdb скопировать в главную базу данные и если они повторились вывести пользователю сообщение, о том что такие данные существуют. Попыталась сделать для 2 таблиц не получилось. На форме лежит 2 Adodataset  и AdoConnection(для подключения внешней базы). Пишу что то типа этого
Код

procedure TJOIN.BitBtn1Click(Sender: TObject);
begin
ADODataSet_all.Close;
ADODataSet_all.CommandText := ' Insert Into str150 In "C:\Documents and Settings\Anj\Мои документы\Borland Studio Projects\idk\22\db22.mdb" Select * from str150 ';
ADODataSet_all.Open;
end;



Выдает ошибку "Текущий проводник не поддерживает возврат нескольких наборов записей в результате одной операции"
P.S. db.mdb-главная, db22.mdb-второстепенная

Автор: Savek 5.3.2008, 17:30
естественно, TADODataSet предназначен для выборки данных, а никак не для их модификации, подобные запросы отправляются при помощи TADOCommand или TADOQuery 

Автор: Rodman 5.3.2008, 17:50
лучше уже два конекшина и в цикле все пергнать!

Автор: addet 6.3.2008, 08:45
Я понимаю, что 2 коннекшина, только не могу додуматься как это сделать. Подскажите начало, плиз smile 

Автор: Rodman 6.3.2008, 09:51
1. Создаешь конекшн для одной базы, ну и второй - для второй. )))
2. По той же схеме создаешь два Query...
3. Пишешь примерно такой код
Код

QueryNotMain.Close;
QueryNotMain.SQL.Text := 'Select Field1, Field2, Field3 from str150;';
QueryNotMain.Open;
QueryNotMain.First;
QueryMain.Close;
QueryMain.SQL.Text := 'INSERT INTO str150 (Field1, Field2, Field3) VALUES (:Prm1, :Prm2, :Prm3);';
while not QueryNotMain.eof do
begin
  QueryMain.Parameters.ParamByName('Prm1').Value:=QueryNotMain.Fields.Fields[0].AsString;
  QueryMain.Parameters.ParamByName('Prm2').Value:=QueryNotMain.Fields.Fields[1].AsString;
  QueryMain.Parameters.ParamByName('Prm3').Value:=QueryNotMain.Fields.Fields[2].AsString;
  QueryMain.ExecSQL; 
  QueryNotMain.Next;
end;
и смотришь!

Автор: addet 6.3.2008, 11:05
Хочу уточнить, мне нужно из 25 второстепенных баз данных mdb скопировать таблицы в главную.Записей в каждой таблице где то по 1000 за месяц. А предложенный код 
Rodman, получается копирует одну запись. Названия и поля у всех таблиц во всех базах одинаковые, только записи разные.

Автор: Rodman 6.3.2008, 11:13
Цитата(addet @  6.3.2008,  10:05 Найти цитируемый пост)
получается копирует одну запись.

с чего ты взял...
Цитата(Rodman @  6.3.2008,  08:51 Найти цитируемый пост)
'Select Field1, Field2, Field3 from str150;';

выбираются все записи из трех полей таблицы str150

а потом в цикле их перебирает и закидывает построчно в новую...

или я не понял вопроса!

Автор: former 6.3.2008, 11:46
Rodman, он, наверное, име6л ввиду одну таблицу.
addet, так создай цикл для всех твоих таблиц, а в нём помести код Rodman-а.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)