![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как синхронизировать данные в разных БД? [D7, XP]
deras © (2009-03-31 11:28:00)Есть БД MaxDB. В ней (для упрощения) есть одна таблица. Данные в этой БД каждый день пополняются пользователями.
Есть вторая БД (FB2.0). В ней есть такая же по структуре таблица, как и в первой БД. Но данные в нее должны попадать из первой БД, скажем, раз в день.
Вопрос. Подскажите техническую процедуру переноса данных из первой БД во вторую. Проще говоря - каков механизм синхронизации?
Спасибо.
deras (2009-03-31 22:09:00) [1]Очень был приятно удивлен ответом
> YurikGL © (31.03.09 20:55) [17]
...все стало на свои места. Никаких вопросов больше нет.
Очень Вам благодарен, YurikGL!!!
Еще благодарен за ответы MsGuns ©, Sergey13.
А вот Ega23 и Сергей М. какие-то злые сегодня.
Удачи всем!
YurikGL (2009-03-31 20:55:00) [2]
> Разрешите объяснить как я пробую делать:
> 1) MaxDB <- TADOConnectio <- TADODataSet
> 2) FB2.0 <- TFIBDatabase <- TFIBDataSet
>
> Как написать запрос и в главное - в каком датасете, чтоб
> выбрать записи из MaxDB и вставить в FB2.0?
>
1) Выбираем данные из первой базы SQL-запросом (синтаксис select-а ищем в гугле) и устанавливаем курсор на первую запись.
2) Берем текущую запись получившегося набора данных.
3) Проверяем есть ли такая запись во второй базе (по первичному ключу). Если есть, то вставляем ее в базу SQL-запросом (синтаксис insert-а ищем в гугле)
4) Для набора данных из базы 1 делаем next
5) Если у набора данных не eof то идти на на пункт 2
Все это правда если перенести нужно одну таблицу. Если несколько, то эти действия делаются по очереди для нескольких таблиц. Причем сначала обрабатывать нужно справочники.
Если известно, что ключ автоинкрементарный, то первый датасет лучше отсортировать по первичному ключу в обратном порядке и вставлять до тех пор, пока не доберешься до записи, которая уже есть (или до конца датасета).
Ну есть еще всякие тонкости-полезности...
Теперь, если у тебя возникли проблемы, то скажи, с каким из 5-ти пунктов алгоритма.
Сергей М. (2009-03-31 20:45:00) [3]
> задвоение записей
Что ж не "затроение" ? Или не "застопятидесятирение" ?
Что, фразу "дублирование или повтор записей" уже и выговорить не в состоянии ?
Ega23 (2009-03-31 20:32:00) [4]Ясно. Хелп всё-таки не читал, но зачем-то соврал, что читал.
deras (2009-03-31 17:16:00) [5]Разрешите объяснить как я пробую делать:
1) MaxDB <- TADOConnectio <- TADODataSet
2) FB2.0 <- TFIBDatabase <- TFIBDataSet
Как написать запрос и в главное - в каком датасете, чтоб выбрать записи из MaxDB и вставить в FB2.0?
deras (2009-03-31 16:23:00) [6]
> А они однотипны по типам?
да
> А гетерогенные запросы поддержаны,
не уверен... вернее - не знаю как определить - поддерживаются или нет
deras (2009-03-31 15:48:00) [7]
> А как ты определяешь, что задвоение?
например так для таблиц одной БД
insert into t2 from (select * from t1 where t1.id not in (select id from t2))
> А чтение хелпа?
тоже не очень... :-(
Anatoly Podgoretsky (2009-03-31 15:05:00) [8]А они однотипны по типам?
А гетерогенные запросы поддержаны,
А тригеры или автообновляемые поля есть? В MS SQL поле типа TimeStamp.
Ega23 (2009-03-31 14:54:00) [9]
> чтение гугла не помогло мне понять как решить проблемку
А чтение хелпа?
Sergey13 (2009-03-31 14:39:00) [10]> [6] deras (31.03.09 14:30)
> как при этом проверять задвоение записей?
А как ты определяешь, что задвоение?
> а как обращаться к таблицам разных бд?
Самое простое и понятное - также как и к одной, но в двух экземплярах. 8-)
deras (2009-03-31 14:35:00) [11]
> т.е. гугл и хелп ты так и не читал?
:-) читал.. чтение гугла не помогло мне понять как решить проблемку
Ega23 (2009-03-31 14:31:00) [12]
> а как обращаться к таблицам разных бд?
т.е. гугл и хелп ты так и не читал?
deras (2009-03-31 14:30:00) [13]
> В общем случае открыть источник и скопировать в приемник.
как при этом проверять задвоение записей?
Ну вот например:
если б были таблицы одной базы, скрипт бы был приблизительно такой
insert into t2 from (select * from t1 where t1.id not in (select id from t2))
а как обращаться к таблицам разных бд?
Sergey13 (2009-03-31 13:35:00) [14]> [0] deras (31.03.09 11:28)
> Проще говоря - каков механизм синхронизации?
Какой тебе надо, такой и будет.
В общем случае открыть источник и скопировать в приемник. Можно сразу, можно поочереди с сохранением промежуточного результата.
Ega23 (2009-03-31 12:45:00) [15]
> Как я понимаю, это запрос к разным базам?
Я думаю, что гугл очень быстро даст тебе ответ на этот вопрос. Быстрее, чем я вот это вот сейчас набираю.
deras (2009-03-31 12:36:00) [16]
> MsGuns © (31.03.09 12:05) [2]
вот-вот... думаю, это подошло бы мне.. Осталось узнать что такое гетерогенный запрос. Как я понимаю, это запрос к разным базам?
Если можно, подскажите сам механизм заливки
Спасибо
MsGuns (2009-03-31 12:05:00) [17]Похоже, что репликация здесь не при чем - решается заливкой с помощью гетерогенного запроса или простой программки.
Правильный$Вася (2009-03-31 11:53:00) [18]первичные ключи
+ гуглить по слову "репликация данных"