Я использовал решение usncahill и изменил его для своих нужд. У меня недостаточно репутации, чтобы проголосовать за их решение, поэтому, если вам нравится мой дополнительный код, пожалуйста, проголосуйте за нас обоих.
Мне нужен быстрый способ переключения между двумя внутренними базами данных, одна из которых содержит оперативные данные, а другая - данные испытаний. Поэтому я изменил ранее упомянутый код следующим образом:
Private Sub ReplaceLink(oldLink As String, newLink As String)
Dim tbl As TableDef, db As Database
Set db = CurrentDb
For Each tbl In db.TableDefs
If InStr(tbl.Connect, oldLink) > 0 Then
tbl.Connect = Replace(tbl.Connect, oldLink, newLink)
tbl.RefreshLink
End If
Next
End Sub
Public Function ConnectTestDB()
ReplaceLink "Data.accdb", "Test.accdb"
End Function
Public Function ConnectLiveDB()
ReplaceLink "Test.accdb", "Data.accdb"
End Function
Public Function TestDBSwitch()
Dim tbl As TableDef, db As Database
Dim wasData As Boolean
Dim wasTest As Boolean
wasData = False
wasTest = False
Set db = CurrentDb
For Each tbl In db.TableDefs
If InStr(tbl.Connect, "JGFC Flooring Data") > 0 Then
wasData = True
ElseIf InStr(tbl.Connect, "JGFC Flooring Test") > 0 Then
wasTest = True
End If
Next
If wasData = True And wasTest = True Then
MsgBox "Data Mismatch. Both Test and Live Data are currently linked! Connecting all tables to Test database. To link to Live database, please run again.", , "Data Mismatch"
ConnectTestDB
ElseIf wasData = True Then
ConnectTestDB
MsgBox "You are now connected to the Test database.", , "Connection Changed"
ElseIf wasTest = True Then
ConnectLiveDB
MsgBox "You are now connected to the Live database.", , "Connection Changed"
End If
End Function
(В предыдущем коде предполагается, что файлы Test и Live Data находятся в одном каталоге, а имя файла заканчивается в Test и Data, но их можно легко изменить на другие пути / имена файлов)
Я вызываю TestSwitchDB с помощью кнопки в моей интерфейсной БД, чтобы быстро переключаться между тестированием и производственной средой. Моя БД Access имеет пользовательские элементы управления для переключения между пользовательскими средами, поэтому, когда пользователь с правами администратора входит в интерфейсную БД, я напрямую использую функцию ConnectTestDB, чтобы пользователь по умолчанию подключался к тестовой БД. Я также использую функцию ConnectLiveDB, когда другие пользователи входят в интерфейс.
Существует также быстрое обнаружение ошибок в функции TestSwitchDB, чтобы сообщить мне, есть ли смесь подключений к обеим средам до вызова функции переключения. Если эта ошибка повторяется, это может быть признаком других проблем.