Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование полей одной таблицы БД1 в БД2, Копирование полей одной таблицы БД1 в  
:(
    Опции темы
jeafma
Дата 15.4.2011, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.4.2011

Репутация: нет
Всего: нет



Всем привет. У меня проблема, есть 2 базы данных mdb абсолютно одинаковых по структуре, в каждой БД 3 таблицы,  в общем нужно обновить БД1 записями из БД2 (соответственно обновить соответствующие таблицы), как это можно осуществить через SQL? добавил 2 ADOConnection, подключил их к базам, добавил adoquery , а что делать дальше не знаю, работаю с БД недавно. Интуитивно понимаю что это не должно быть сложно. Но на форуме не нашел как это осуществляется.
Заранее спасибо.
PM MAIL   Вверх
uwannadie
Дата 15.4.2011, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 5.6.2009
Где: Крым, Керчь

Репутация: нет
Всего: 1



гугли по словам "SQL SELECT, INSERT"
--------------------
PM MAIL   Вверх
jeafma
Дата 15.4.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.4.2011

Репутация: нет
Всего: нет



Да я гуглил уже, я знаю как вставлять поля в таблицу, меня интересует как взять данные для вставки из другой БД.
PM MAIL   Вверх
uwannadie
Дата 15.4.2011, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 5.6.2009
Где: Крым, Керчь

Репутация: нет
Всего: 1



простенький пример, не претендует на самый правильный и конечное решение вашей проблемы, но все же
Код

with dbQuery.SQL do
begin
   Clear;
   Add('insert into table_name (');
   Add('field_name_1,');
   Add('field_name_2,');
   Add('field_name_3,');
   Add('field_name_4,');
   Add('field_name_5');
   Add(') values ( :value1, :value2, :value3, :value4, :value5)');
   with dbQuery.Parameters do
   begin
      ParseSQL(dbQuery.SQL.Text, True);
      ParamByName('value1').Value := somevalue1;
      ParamByName('value2').Value := somevalue2;
      ParamByName('value3').Value := somevalue3;
      ParamByName('value4').Value := somevalue4;
      ParamByName('value5').Value := somevalue5;
   end;
   ExecSQL;
end;

хех, прочитал внимательно предыдущий пост, тупанул с ответом smile
ща напишу 1 сек

Это сообщение отредактировал(а) uwannadie - 15.4.2011, 18:51
--------------------
PM MAIL   Вверх
jeafma
Дата 15.4.2011, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.4.2011

Репутация: нет
Всего: нет



А где прописывать это? 


я вот написал так


procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
ADOTable1.Insert;
 for i:=1 to ADOTable2.FieldCount-1 do
    begin
      ADOTable1.Fields.Fields[i].AsVariant:=ADOTable2.Fields.Fields[i].AsVariant;
    end;
 ADOTable1.Post;
end;


копирует но только первую строку, не поможете сделать для всех строк?
PM MAIL   Вверх
uwannadie
Дата 15.4.2011, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 5.6.2009
Где: Крым, Керчь

Репутация: нет
Всего: 1



Код

with dbQuery do
begin
   SQL.Clear;
   SQL.Add('SELECT field_name FROM table_name');
   ExecSQL;
   SQL.Clear;
   SQL.Add('INSERT INTO table_name (field_name) VALUES (:value1)');
   with dbQuery.Parameters do
   begin
      ParseSQL(dbQuery.SQL.Text, True);
      ParamByName('value1').Value := dbQuery.Fields.FieldByName('field_name').AsVariant;
   end;
   ExecSQL;
end;

не факт, что заработает без ошибок, ибо нету никакой субд под рукой настроенной

Это сообщение отредактировал(а) uwannadie - 15.4.2011, 19:02
--------------------
PM MAIL   Вверх
jeafma
Дата 15.4.2011, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.4.2011

Репутация: нет
Всего: нет



Скажите плиз где это прописывать?
PM MAIL   Вверх
jeafma
Дата 15.4.2011, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.4.2011

Репутация: нет
Всего: нет



Есть ли какое нить свойство, в котором содержится количество записей в таблице, если нет можно ли присвоить переменной результат запроса
PM MAIL   Вверх
Данкинг
Дата 15.4.2011, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(jeafma @  15.4.2011,  19:08 Найти цитируемый пост)
как это можно осуществить через SQL?

Код

insert into table1 select * from table2

Цитата(jeafma @  15.4.2011,  20:02 Найти цитируемый пост)
Скажите плиз где это прописывать? 

Код

AdoQuery.Text:='insert into table1 select * from table2';
AdoQuery.ExecSQL;

Цитата(jeafma @  15.4.2011,  20:42 Найти цитируемый пост)
Есть ли какое нить свойство, в котором содержится количество записей в таблице

Код

AdoTable.TableName:='table1';
AdoTable.Active:=true;
rec:=AdoTable.RecordCount;


Добавлено через 2 минуты и 32 секунды
Цитата(jeafma @  15.4.2011,  19:51 Найти цитируемый пост)
for i:=1 to ADOTable2.FieldCount-1 do

А поле с индексом 0 принципиально игнорируешь? smile 

Это сообщение отредактировал(а) Данкинг - 15.4.2011, 23:58


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
jeafma
Дата 16.4.2011, 06:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 15.4.2011

Репутация: нет
Всего: нет



Да поле с 0 индексом это счетчик)
PM MAIL   Вверх
superVad
Дата 16.4.2011, 09:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



Пройтись циклом по всем записям и вставить каждую из них в нужную таблицу другой базы.
В зависимости от условий задания надо или очищать таблицу перед вставкой записей или проверять наличие конкретной записи.
PM MAIL   Вверх
Akella
Дата 16.4.2011, 10:06 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Для начала нужно хоть что-то знать. Просто гугл и форум тебя не спасёт. Книги читай, иди учиться.
PM MAIL   Вверх
Данкинг
Дата 16.4.2011, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(superVad @  16.4.2011,  10:47 Найти цитируемый пост)
Пройтись циклом по всем записям и вставить каждую из них в нужную таблицу другой базы.

А смысл в цикле, если таблицы идентичные?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Antimol
Дата 16.4.2011, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 118
Регистрация: 28.7.2007
Где: Украина, Киев

Репутация: 4
Всего: 4



Размещаешь на форме 2 ADOConnection, и 2 ADOQuery. Соответственно настраиваешь подключения к соответствующим БД.

Размещаешь кнопку на форме, и на событие onClick пишешь код (только запросы select и insert под себя напишешь): 

Структура
Таблица1
поле1_1
поле1_2

Таблица2
поле2_1
поле2_2

Код

ADOQuery1.SQL.Text:='SELECT поле1_1,поле1_2 FROM Таблица1';
ADOQuery1.Open;

ADOQuery2.SQL.Text:='INSERT INTO Таблица(поле2_1,поле2_2) VALUES(:поле2_1,:поле2_2)';   //не забудь поставить двоеточие

for i:=0 to ADOQuery1.RecordCount-1 do
begin
  ADOQuery2.Parameters.ParameterByName['поле2_1'].Value:=ADOQuery1.Fields.FieldsByName['поле1_1'].Value;
  ADOQuery2.Parameters.ParameterByName['поле2_2'].Value:=ADOQuery1.Fields.FieldsByName['поле1_2'].Value;
  ADOQuery1.Next;
end;


Не проверял код, ну приблизительно где то так.
--------------------
Лучшее спасибо это "+" к репутации.   Мой блог: ИНФОРМАТИЗАЦИЯ, и mirsovetov.net. Написание программ, исправление ошибок, статьи....
PM MAIL WWW ICQ   Вверх
superVad
Дата 17.4.2011, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



Цитата(Данкинг @  16.4.2011,  10:11 Найти цитируемый пост)
А смысл в цикле, если таблицы идентичные?

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

Хотя видел что то подобное в фибах, но не уверен.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0737 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.