Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объединение двух таблиц из двух разных БД, InterBase 
:(
    Опции темы
pavelv
Дата 14.7.2006, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть две разные БД в InterBase: Bd1 и Bd2.
Эти две БД абсолютно идентичны по структуре: количество таблиц в одной = количеству таблиц в другой, на каждую таблицу X из БД1 в БД2 найдется точно такая же таблица X и обратно.

Я хочу скопировать все данные из БД2 в БД1. Если же первичный ключ в таблице Х из БД1 совпал с первичным ключом таблицы Х из БД2, то данные в БД1 необходимо заменить на новые.
Тоесть к примеру:
строчка Таблицы Х в БД1:
ID NOMER NAME
1    2          Ivanov
Строчка Таблицы X в БД2:
ID NOMER NAME
1    2          Sidorov
по полям ID и Nomer состряпан primary key. В этом случае нужно заменить в БД1: Ivanov на Sidorov.

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

В общем возникли следующие вопросы, буду благодарен каждому за ответ:
1) Через что лучше всего реализовать эту проблему, для повышения скорости работы приложения. Думаю тут два выходы: SQL или стандартные компоннеты Delphi? Из них я выбрал SQL, а в нем видимо с помощью Update и Insert(Хотя если получу ответ на второй вопрос буду использовать ещё UNION). Может ещё есть решения?

2) Есть ли возможность применить SQL запрос сразу к двум одинаковым таблицам из обоих БД? Я конечно не учитываю методы копирования таблицы из БД2 в БД1 просто под другим именем и далее работу уже в одной БД.



 
PM MAIL   Вверх
dvamaster
Дата 14.7.2006, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



удалить старые

Код

DELETE * FROM БД1 WHERE БД1.ID = БД2.ID


вставить новые

Код

INSERT INTO БД1 SELECT * FROM БД2


А если создать новую талицу, удалить старую, и переименовать новую. 


--------------------
Хорошую информацию трудно добыть. Сделать с ней что-нибудь - еще труднее. /L. Skywalker/

Что же я сделал не так? /Король Лир/

Я делаю это для твоего же блага! /Любой родитель и палач/

PKUNZIP.ZIP /неизвестный/
PM MAIL WWW ICQ   Вверх
Mephisto
Дата 14.7.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

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



Либо я не понял либо ты dvamaster говоришь про таблицы!
А с баз удаляеться следующим образом:
Код

delete from DB1.dbo.Table_name d1 inner join DB2.dbo.Table_Name d2 on d1.Cod = d2.Cod
 
PM   Вверх
pavelv
Дата 17.7.2006, 04:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



dvamaster удалить старые и вставить новые записи хм...ну собственно для 
того есть update, смысл делать два запроса когда можно всё одним? Insert конечно понадобиться для всех записей которых не будет. Только ты представь сколько это действий нужно совершить, сначала узнать список все уникальных ID из 2ой базы, сравнить это со списком из 1ой базы. После этого ты узнаешь что нужно Insert-ить что Update-ить и лишь потом выполнить ещё целый пресс sql запросов...этож для каждой записи Update и для каждой Insert...тут уже ничего никому не поможет smile.

Что касается Mephisto, то там приведена конструкция для работы сразу с двумя БД....не видел такой , сейчас гляну что там к чему относится и проверю на работоспособность smile 
 
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.0540 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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