Автоприсоединение (автолинковка) таблиц при открытии приложения базы данныхИсточник: AccesSoft Admin
Разделенная база данныхПроектрируя свои самые первые базы данных в Access, начинающие программисты как правило строят приложения, которые обычно состоят из одного файла базы данных, то есть таблицы, формы, отчеты - все расположены в одном файле mdb. Такая схема может быть удобна лишь тогда, когда база делается что называется "для себя". Но Access так же позволяет кроме локальных приложений баз данных создавать и сетевые. В простейшем случаем это разделенная база данных, которая включает в себя два файла mdb: первый - это файл объектов данных (в нем хранится большинство таблиц), второй - файл объектов приложения (в нем содержатся все оставшиеся объекты базы - формы, запросы, отчеты, страницы доступа к данным, модули VBA, макросы). В этом случае в файле объектов приложения необходимо установить связи с таблицами, хранящимися в файле объектов данных. При разделении базы данных получают следующие преимущества:
Надеюсь, что по поводу целесообразности разделения базы данных сомнений нет. Осталось решить вопрос, как же это сделать. Есть два варианта:
Подключение же к серверу (базы с таблицами) делается очень просто - жмем правой кнопкой в окне базы объектов приложения (там, где формы и все остальное), выбираем в контекстном меню "Связь с таблицами" или "Файл - Внешние данные - Связь с таблицами" и далее по диалогу. В результате в нашей базе появятся ярлыки таблиц, причем со значком стрелки слева, который означает, что таблицы внешние. Ограничение при работе с такими таблицами - нельзя менять их структуру (добавлять, изменять поля и т. д.) в этой базе. Можно только в той, где они созданы (находятся). Автоприсоединение (автолинковка) таблицСначала подумаем, в каких еще случаях, кроме как нежелании вручную нажимать на кнопки, может понадобится автолинковка? Казалось бы, поместил базу на компьютер - "сервер", подключил к ней базы (приложения) пользователей, и не трогай ее (не перемещай). Зачем каждый раз при запуске цеплять таблицы? Дело тут вот в чем:
Стало быть, деваться некуда, придется цепляться. Что для этого понадобится? Самое главное - это CurrentProject.Path (текущий проект - путь): оказывается, Access сам знает, куда его установили. Далее понадобятся программные методы работы с таблицами (чтение, запись, удаление данных) - ведь нужно не просто определить, куда установили приложение, но и сохранить его путь в таблице, и затем "подцепить" их по этому пути. Делается это при помощи объектной модели доступа к данным DAO - Data Access Objects. Объекты доступа к данным создавались, как объектно-ориентированный интерфейс для ядра баз данных Jet фирмы Microsoft как раз для того, чтобы можно было программно вносить, изменять, удалять данные в таблицах. Общая схема работы подключения: при запуске приложения запускается макрос AutoExec - чтобы он запускался именно при запуске, он должен называться AutoExec - это зарезервированное имя в Access. Макрос в свою очередь запускает функцию SetReferences () из модуля AutoPatch, которая собственно и производит автолинковку таблиц. Далее макрос запускает форму frmStart - стартовую форму приложения. Путь базы сохраняется в таблице tSystemPath - Pname. Имена таблиц, которые нужно присоединить - в таблице tSystemTables - Tname. Если вы будете применять этот пример в своих проектах, Вам нужно будет записать туда имена своих таблиц. В данном примере при запуске приложения помимо автолинковки делается еще одно важное дело: записывается путь к папке с резервными копиями базы (об этом чуть ниже). Это так называемые данные настройки приложения. Их может быть много: к примеру, каталог выгрузки снимков отчетов, каталог шаблонов .dot и т. д. Чтобы после запуска, приложение было работоспособным, нужно все эти настройки определить и сохранить в соответствующих таблицах, в данном случае tAdminCop. Резервное копирование базы данныхХотя Access и считается достаточно надежной системой, но и у нее бывают сбои и базы "рушатся" - нет в мире совершенства. А потому считается хорошим тоном сделать сервис - сохранение резервных копий базы. Действительно, зачем рисковать? Для этого понадобятся методы работы с файловой системой Windows - модуль FileSystem и функции работы с файлами: fDeleteFile, fCopyFile. Названия говорят сами за себя. Чтобы пользователь мог указывать/создавать каталог для сохранения резервных копий понадобится GetDirFolder - функция открытия диалогового окна выбора каталога (папки). Непосредственно копирование производится при помощи процедуры sCopBase в модуле формы frmStart. Причем, сначала проверяется наличие каталога для сохранения копии базы, наличие самой базы - функции IsFolderName, IsFileName. Пример, как это все работает, Вы можете скачать ниже. |