У нас есть база данных Microsoft Access + приложение (на сервере A), которое подключается к удаленному серверу SQL (сервер B), используя соединение ODBC System DSN (на сервере A) с сервером базы данных SQL.
Пользователи открывают эту базу данных Access удаленно, так как она находится в общем месте на сервере A. Им все равно необходимо создать локальное соединение ODBC на своих компьютерах для подключения к серверу B.
Могут ли они получить доступ к базе данных Access и не нужно создать локальное соединение ODBC?
заранее спасибо
Не используйте DSN при определении ссылки на SQL Server. Вместо этого укажите фактическую строку подключения (должна быть опция, но я не работал с Access в течение многих лет).
Вы можете устранить необходимость в локальном DSN на каждом компьютере, используя небольшой фрагмент кода в базе данных Access. Конечно, вам все еще нужен соответствующий драйвер ODBC, но я ожидаю, что тот, который вам нужен, в любом случае, вероятно, является стандартным для Windows.
Для первоначального создания базы данных потребуется локальный DSN.
Следующее в том, что я использую для динамического повторного подключения к базе данных MySQL, поэтому вам нужно будет соответствующим образом отредактировать его. Код вызывается из макроса AutoExec или может быть запущен вручную или из формы.
Обратите внимание, что это не мой код, но я использую его очень давно и не помню, где я его изначально взял. Все, что я сделал, это отредактировал его в соответствии со своими требованиями.
Option Compare Database
Public Function ReLinkTables()
Dim dbPUBS As DAO.Database
Dim tdfPUBS As DAO.TableDef
Dim strTable As String
Dim strConnect As String
Dim InFile As Integer
' Set the following variables tosuit your DB connection
Dim Server As String
Dim Database As String
Dim User As String
Dim Password As String
On Error GoTo 0
Set dbPUBS = Nothing
Set dbPUBS = CurrentDb
strConnect = "DRIVER={MySQL ODBC 3.51 Driver};" _
& "SERVER=" & Server & ";" _
& "DATABASE=" & Database & ";" _
& "UID=" & User & ";" _
& "PWD=" & Password & ";" _
& "OPTION=" & 1 + 2 + 8 + 32 + 2048 + 16384
' Refresh Access linked tables
For Each tdfPUBS In dbPUBS.tabledefs
' Only attempt to refresh link on tables that already
' have a connect string (linked tables only)
If Len(tdfPUBS.Connect) > 0 Then
strTable = tdfPUBS.Name
' Set the tables connection string
tdfPUBS.Connect = strConnect
' and refresh the link
tdfPUBS.RefreshLink
End If
Next
' Refresh Connect String for all Pass-Through Queries
'strMsg = "Refreshing links for all Pass Through Queries."
'DoCmd.Echo True, strMsg
'For Each qdfPUBS In dbPUBS.QueryDefs
'If Len(tdfPUBS.Connect) > 0 Then
'qdfPUBS.Connect = strConnect
'End If
'Next
Конечная функция