Вопрос № 78247: Здравствуйте, уважаемые эксперты. У меня такой вопрос: есть несколко баз данных MS Access, одна из которых основная. Все они содержат таблицы в которых накапливается информация. Мне нужно сделать запрос из центральной БД ко вторичным, который бы прос...
Вопрос № 78.247
Здравствуйте, уважаемые эксперты. У меня такой вопрос: есть несколко баз данных MS Access, одна из которых основная. Все они содержат таблицы в которых накапливается информация. Мне нужно сделать запрос из центральной БД ко вторичным, который бы просматривал внесенные в них изменения и обновлял данные в центральной таблице.
Проблема в том, что я не знаю с чего начать.
З.Ы. Репликация не подходит, так как предусматривается перемещение центральной базы из одной папки в другую или на другой компьютер.
Отправлен: 14.03.2007, 13:45
Вопрос задал: Bahus (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Bahus!
Лучше всего написать какой-либо обработчик изменения данных. Это может быть программа на VB или модуль в основной базе.
Самый простой вариант, если все базы расположены в определенных каталогах, даже на разных компьютерах, и пути к базам известны и не меняются. Тогда возможны несколько вариантов :
1. Установить связь с каждой таблицей всех баз, из которых данные будут обновляться. Физически данные будут также храниться на других компьютерах, но Access сам будет к ним подключаться и работать так же, как и с обычными таблицами в основной базе. Недостаток - если в каждой базе есть таблица BASE, то будет несколько таблиц : BASE1 - из первой клиентской базы, BASE2 - из второй клиентской базы и т.п. В обработчике необходимо перечислить все возможные варианты.
2. В запросе явно указывать на таблицу, находящуюся на другом компьютере, например :
select * from kart IN '\указать путь к базе на другом компьютере или в другом каталогеPred.mdb' where kod=4
Недостатки те же - для каждой таблицы необходимо указывать точный путь к базе.
Если же базы перемещаются, добавляются или удаляются, то каждый раз необходимо менять пути к базам.
В этом случае подойдет программа-обработчик.
Список таблиц, из которых необходимо брать данные, можно поместить в текстовый файл, который затем прочтется программой и в цикле поставит в запрос варианта 2 путь к каждой базе.
Можно еще предложить пользователю указать необходимую базу ( с помощью диалога выбора файла) и др.
Можно написать программу импорта-экспорта внесенных изменений - в дополнительных базах ведется журнал изменений ( экспортируется потом в текстовый файл ) , который передается в основную базу и в ней эти изменения повторяются - в таком виде у нас ведется обмен данными между базами филиалов и управления - 480000 записей в SQL Server.
Отвечает: Тесленко Евгений Алексеевич
Здравствуйте, Bahus!
Я рекомендую Вам, если конечно речь идет о работе в сети, не создавать себе проблему и не пытаться идти по пути "обреченной архитектуры".
"..Центральная база..." должна быть расположена на сервере или на рабочей станции к которой все имеют доступ, а репликация или связь (как удобнее) настраивается на клиентских компьютерах. Для обновления "серверной" базы не обязательно участие пользователя, достаточно создать процедуру которая будет оправлять на "серверную" базу дополнения и изменения в базе данных клиента по событию. (а событие может быть любым: заданное время, вход в систему, завершение работы...)
И когда "серверная" база у Вас будет обновляться с клиентских компьютеров, вот тогда можно подключать к "...центральной БД..." "...другую папку..." или "...другой компьютер...". (речь только о архитектуре СЕТЕВОЙ базы данных)
Если Вы работаете с одинаковыми БД расположенными на разных компьютерах в сети, то совет Филатова Евгения Геннадьевича:
select * from kart IN '\указать путь
то, что Вам надо. В запросах на обновление и добавление "...\указать путь..." - подставляете сетевой путь к базе данных (возможно из созданного заранее списка) и выполняете запрос.
Либо перелинковываете связанные таблицы к другой БД.