![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Добавление в одну БД информации из другой [D7, Yaffi Personal]
Disruptor © (2003-11-04 13:23:00)
Есть общая база данных и распределенные пользователи, каждый из которых локально редактирует свои данные. Потом нужно связать эти данные воедино. Как лучше из проограммы пеерекинуть данные из одной БД в другую?
Спасибо.
Disruptor (2003-11-06 07:58:00) [1]
Аминь. Оказывается - из этих таблиц не получается удалять данные. Придется генерировать скрипт при чтении из одной базы и потом запускать его для другой.
Zacho (2003-11-05 17:45:00) [2]
> Disruptor © (05.11.03 11:00) [23]
Да, по-моему тоже это - самый быстрый способ экспорта/импорта данных. Но не всегда приемлемый.
Vemer (2003-11-05 15:17:00) [3]
Вчера написал программу-насос, работающий через AppendRecord. Меньше возни с названиями полей.
Disruptor (2003-11-05 11:00:00) [4]
Кстати господа вы забыли про EXTERNAL TABLE - с помощью них вообще никакой боли
Disruptor (2003-11-05 10:33:00) [5]
И нужно, чтобы это все делало приложение автоматически. У меня такой вариант. Открываем таблицу дочернего узла. Пробегаемся по ее записям. И для каждой из них на ходу генерируем INSERT для базы головного узла. И так для всех таблиц. Нормально? Или есть способ лучше?
У меня общая база. Ее набивает около 200 человек. Каждый - свои данные. Потом их нужно интегрировать, чтобы в центральном месте все эти данные корректно отображались и редактировались
Deniz (2003-11-05 10:00:00) [6]
Я так думаю у чела есть справочник(я бы точно сделал, очень много интересной информации можно держать по этому делу) по внешним ... как бы это обозвать ... базам, но наверное только ID_OutBD является ФК. В общем, автор молчит пока, там посмотрим что скажет.
Zacho (2003-11-05 09:43:00) [7]
> Deniz © (05.11.03 09:21) [19]
Можно и так. Только зачем ? Здесь ID - абсолютно лишенее.
И все-таки, при чем здесь FK ?
Deniz (2003-11-05 09:21:00) [8]
>Zacho © (05.11.03 09:09) [18]
>Смысл именно в том, что одно поле - это уникальный номер "внешней" БД (т.е. из которой берутся данные для репликации).
Это я понял, не так уж глуп :-)
Так вот смысл этот уникальный номер вставлять в ПК?
Привычно для IB делается
ID integer ... (PK + Generator + Trigger),
ID_OutBD integer,
ID_OutID integer (или как еще там нужно по задаче)
...
create unique index ... (ID_OutBD, ID_OutID)
Zacho (2003-11-05 09:09:00) [9]
> Deniz © (05.11.03 08:59) [17]
А причем здесь FK ?
Смысл именно в том, что одно поле - это уникальный номер "внешней" БД (т.е. из которой берутся данные для репликации).
Deniz (2003-11-05 08:59:00) [10]
>Zacho
А смысл использования 2-х полей в ПК? Может использовать искусственный ПК и уникальный индекс по 2-м ФК полям?
Проблемы искусственных и естественных ПК опять подняты :-)
Zacho (2003-11-05 08:02:00) [11]
> Disruptor © (05.11.03 07:36) [15]
Нельзя. IB не поддерживает гетерогенные запросы.
Disruptor (2003-11-05 07:36:00) [12]
У меня еще один вопрос/запрос по теме: можно ли в рамках одного запроса сделать INSERT в одну базу данных с помощью SELECT из другой? Спасибо.
т.е. INSERT INTO DB1 .... SELECT ... FROM DB2...
Zacho (2003-11-04 15:43:00) [13]
> Vemer © (04.11.03 15:04) [13]
> ПК использую, но назначить на 2 поля в голову не приходило.
>
> То есть если я сделаю ПК из 2-полей, то внутри каждого столбца
> могут быть повторяющиеся значения, главное чтоб повторяющихся
> пар небыло?
Именно так.
А книгу хорошую все-таки найди. Закажи в каком-нибудь интернет-магазине, например. Понимаю, что дорого, но оно того стоит. Иначе постоянно будешь натыкаться на грабли, на которые уже натыкались задолго до тебя, и решать проблемы, которые уже давно решены.
Vemer (2003-11-04 15:04:00) [14]
ПК использую, но назначить на 2 поля в голову не приходило.
То есть если я сделаю ПК из 2-полей, то внутри каждого столбца могут быть повторяющиеся значения, главное чтоб повторяющихся пар небыло?
To Zacho.
Ну нет у нас в городе книг таких. Даже по просто по IB нет.
Самотык и форум - основной источник моих знаний. Хорошо получилось ответил челу - сам чего-то нового узнал.
Zacho (2003-11-04 14:24:00) [15]
> Vemer © (04.11.03 14:19) [11]
ПК - это первичный ключ. Т.е. набор полей, значения которых уникально в пределах таблицы. Минимум может состоять из одного поля, максимум - из всех полей таблицы.
P.S. Крайне рекомендую к прочтению К.Дж.Дейт "Введение в системы баз данных" или другую хорошую книгу по теории РСУБД.
Vemer (2003-11-04 14:19:00) [16]
Уважаемые программисты, объясните зоотехнику пожалуйста, что такое ПК, и особенно из "двух полей", и как это связанно с объединением данных. Хочу программу правильно сделать.
Disruptor (2003-11-04 13:58:00) [17]
Понял. Наверное - так и сделаю.
Zacho (2003-11-04 13:55:00) [18]
> Disruptor © (04.11.03 13:50) [8]
Все-таки гораздо надежнее и удобнее ПК из 2-х полей. Первое - это номер узла, второе - первичный ключ из таблицы узла.
Disruptor (2003-11-04 13:50:00) [19]
Уже частично почитал. Спасибо и простите дурака. Не додумался, что можно одноовремемнно две TDataBase открывать. При репликации я буду сначала узнавать максимаальный ID в таблице центрального узла, а потом сделаю апдейт в таблицах дочерних узлов, чтобы их ID был обязательно больше, чем в главной.
Ошибок быть не должно.
Zacho (2003-11-04 13:47:00) [20]
> Disruptor © (04.11.03 13:43) [6]
Естественно, с помощью 2-х TDatabase (или TIBDatabase, или что ты там используешь)
А статьи все-таки почитай.