Автоматическое подключение таблиц

(статья)

На Hiprog'е: статья >>

 

Автоматическое подключение таблиц к рабочей БД я провожу таким образом:

1. Элементы системы:

2. При запуске БД-приложения:

Использование БД-настройки обусловлено тем, что, в отличие от других предлагаемых вариантов не нужно создавать дополнительные настроечные таблицы, поскольку это влечет за собой затраты на:
- разработка собственно таблиц
- разработка интерфейса пользователя для заполнения этих таблиц.
В моем варианте эти 2 этапа исключены. Все действия по настройке связей проводятся в БД-настройке при помощи диспетчера связанных таблиц. При этом в MsysObjects - все необходимые параметры подключений. А весь код находится в одной sub.

Как я этим пользуюсь:


1. При работе пользователи подключают таблицы из общей БД-настройки, расположенной в сети, т.е. при необходимости дать им доступ к дополнительным таблицам, или после перемещения некоторых таблиц/БД, я просто открываю БД-настройку и, пользуясь диспетчером связанных таблиц, изменяю подключения. На рабочих местах сотрудников связи будут обновлены автоматически при следующем запуске приложения.
2. При отладке приложения указываю в параметрах функции путь к другой БД-настройке, в которой находятся связи с тестовыми таблицами (т.е. БД-настроек можно наштамповать столько - сколько нужно).

Пример функции:


Для работы нужно создать 2 БД (*.mdb):
- БД-приложение. В неё поместить код функции (можно на автозапуск)
- БД-настройка. В ней установить необходимые связи с таблицами (можно с помощью диспетчера связанных таблиц).

********************************

Option Compare Database
Option
Explicit



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)

 
ГЛАВНАЯ СТРАНИЦА
 
E-mail: mdbprogs@yandex.ru
Hosted by uCoz