В статье изложен интересный способ связи приложения с базой данных
Автоматическое подключение таблиц к рабочей БД я провожу таким образом: 1. Элементы системы: - БД-приложение - (*.mde)
- БД-данные (есть и локальные, и сетевые *.mdb, *.dbf)
- БД-настройка (в ней находятся только связанные таблицы *.mdb)
2. При запуске БД-приложения: - Определяется путь к БД-настройке (я например храню его в таблице вида Поле1:ИмяПеременной; Поле2:ЗначениеПеременной)
- Проводится синхронизация связанных таблиц (БД-настройка>>БД-приложение). Если в БД-приложении есть локальная таблица с тем же именем, то она оставляется.
Использование БД-настройки обусловлено тем, что, в отличие от других предлагаемых вариантов не нужно создавать дополнительные настроечные таблицы, поскольку это влечет за собой затраты на: - разработка собственно таблиц - разработка интерфейса пользователя для заполнения этих таблиц. В моем варианте эти 2 этапа исключены. Все действия по настройке связей проводятся в БД-настройке при помощи диспетчера связанных таблиц. При этом в MsysObjects - все необходимые параметры подключений. А весь код находится в одной sub. Как я этим пользуюсь: 1. При работе пользователи подключают таблицы из общей БД-настройки, расположенной в сети, т.е. при необходимости дать им доступ к дополнительным таблицам, или после перемещения некоторых таблиц/БД, я просто открываю БД-настройку и, пользуясь диспетчером связанных таблиц, изменяю подключения. На рабочих местах сотрудников связи будут обновлены автоматически при следующем запуске приложения. 2. При отладке приложения указываю в параметрах функции путь к другой БД-настройке, в которой находятся связи с тестовыми таблицами (т.е. БД-настроек можно наштамповать столько - сколько нужно). Пример функции: Для работы нужно создать 2 БД (*.mdb): - БД-приложение. В неё поместить код функции (можно на автозапуск) - БД-настройка. В ней установить необходимые связи с таблицами (можно с помощью диспетчера связанных таблиц). Option Compare Database Option Explicit Sub my_subOperate() 'так вызываем (путь укажите свой) Call my_SubTableLinksUpdate ("c: emplink.mdb") End Sub Public Sub my_SubTableLinksUpdate(strLinkMDB As String) 'это сама подрограмма On Error Resume Next 'strLinkMDB указывает путь к БД-настройке Dim dbs As Database 'для БД-настройки Dim tbl As TableDef 'для таблиц в рабочей БД Dim tblCurrent As TableDef 'для таблиц в БД-настройке Dim strTableName As String 'имя активной таблицы Dim bolOkToProcess As Boolean 'флаг для создания таблицы в БД-приложении Set dbs = DBEngine.Workspaces(0).OpenDatabase(strLinkMDB) If err Then MsgBox "Нет настройки для связи с таблицами. Продолжать нельзя. " & err.description Err.clear Exit Sub End If With CurrentDb For Each tbl In dbs.TableDefs 'пробегаемся по всем таблицам БД-настройки If tbl.Connect <> "" Then 'если это связанная таблица strTableName = tbl.Name bolOkToProcess = False Set tblCurrent = .TableDefs(strTableName) If Err Then Err.Clear bolOkToProcess = True 'если таблицы в БД-приложении нет, тогда нужно будет создавать Else If tblCurrent.Connect <> "" Then 'если таблица в БД-приложении есть и она связанная, то... If Not (tblCurrent.Connect = tbl.Connect And _ tblCurrent.SourceTableName = tbl.SourceTableName) Then 'если свойства в таблицах не совпадают, то... .TableDefs.Delete strTableName 'для таблиц mdb можно не удалять, а пользоваться .Refreshlink, но для ДБФ, и т.д. ... bolOkToProcess = True 'нужно будет создать End If End If End If Set tblCurrent = Nothing Err.Clear If bolOkToProcess Then 'если решили, что нужно создать таблицу, то... Set tblCurrent = .CreateTableDef(strTableName) tblCurrent.Connect = tbl.Connect tblCurrent.SourceTableName = tbl.SourceTableName .TableDefs.Append tblCurrent End If Err.Clear End If 'tbl.Connect <> "" Next tbl 'For Each tbl In dbs.TableDefs End With 'currentdb dbs.Close Set dbs = Nothing End Sub | PS: проверено при работе с локальными и сетевыми файл-серверными БД (MDB и DBF) - A97 Просмотров: 13503
 Ваш коментарий будет первым | | |