(статья)
На Hiprog'е: статья >>
Автоматическое подключение таблиц к рабочей БД я провожу таким образом:
1. Элементы системы:
2. При запуске БД-приложения:
Использование БД-настройки обусловлено тем, что,
в отличие от других предлагаемых вариантов не нужно создавать дополнительные
настроечные таблицы, поскольку это влечет за собой затраты на:
- разработка собственно таблиц
- разработка интерфейса пользователя для заполнения этих таблиц.
В моем варианте эти 2 этапа исключены. Все действия по настройке связей проводятся
в БД-настройке при помощи диспетчера связанных
таблиц. При этом в MsysObjects - все необходимые параметры подключений. А весь
код находится в одной sub.
Как я этим пользуюсь:
1. При работе пользователи подключают таблицы из общей БД-настройки,
расположенной в сети, т.е. при необходимости дать им доступ к дополнительным
таблицам, или после перемещения некоторых таблиц/БД, я просто открываю БД-настройку
и, пользуясь диспетчером связанных таблиц, изменяю подключения. На рабочих местах
сотрудников связи будут обновлены автоматически при следующем запуске приложения.
2. При отладке приложения указываю в параметрах функции путь к другой БД-настройке,
в которой находятся связи с тестовыми таблицами (т.е. БД-настроек
можно наштамповать столько - сколько нужно).
Пример функции:
Для работы нужно создать 2 БД (*.mdb):
- БД-приложение. В неё поместить код функции (можно
на автозапуск)
- БД-настройка. В ней установить необходимые связи
с таблицами (можно с помощью диспетчера связанных таблиц).
********************************
Option Compare Database Sub my_subOperate() 'так вызываем (путь укажите свой) Call my_SubTableLinksUpdate ("c:\temp\link.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), также с БД на SQL-серверах
(A97-A2003)
Сергей Подосенов (SRG)