Создание подключения без DSN к SQL Server для связанных таблиц в Access
Дополнительно: требуются экспертные навыки программирования, взаимодействия и многопользовательских навыков.
Эта статья относится только к базам данных Microsoft Access (.accdb и .mdb).
Введение
В этой статье описывается создание подключения к Microsoft SQL Server для связанных таблиц в Microsoft Access, которые не используют имя источника данных (DSN). Это также называется подключением без DSN.
Дополнительная информация
DsN можно использовать для создания связанных SQL Server таблиц в Microsoft Access. Но при перемещении базы данных на другой компьютер необходимо повторно создать dsN на этом компьютере. Эта процедура может быть проблематичной, если ее необходимо выполнить на нескольких компьютерах. Если эта процедура выполняется неправильно, связанные таблицы могут не найти DSN. Поэтому связанные таблицы могут не подключиться к SQL Server.
Если вы хотите создать ссылку на SQL Server таблицу, но не хотите жестко кодировать DSN в диалоговом окне Источники данных, используйте один из следующих методов, чтобы создать подключение без DSN к SQL Server.
Метод 1. Использование метода CreateTableDef
Метод CreateTableDef позволяет создать связанную таблицу. Чтобы использовать этот метод, создайте новый модуль, а затем добавьте следующую функцию AttachDSNLessTable в новый модуль.
'//Name : AttachDSNLessTable
'//Purpose : Create a linked table to SQL Server without using a DSN
'//Parameters
'// stLocalTableName: Name of the table that you are creating in the current database
'// stRemoteTableName: Name of the table that you are linking to on the SQL Server database
'// stServer: Name of the SQL Server that you are linking to
'// stDatabase: Name of the SQL Server database that you are linking to
'// stUsername: Name of the SQL Server user who can connect to SQL Server, leave blank to use a Trusted Connection
'// stPassword: SQL Server user password
Function AttachDSNLessTable(stLocalTableName As String, stRemoteTableName As String, stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String)
On Error GoTo AttachDSNLessTable_Err
Dim td As TableDef
Dim stConnect As String
For Each td In CurrentDb.TableDefs
If td.Name = stLocalTableName Then
CurrentDb.TableDefs.Delete stLocalTableName
End If
Next
If Len(stUsername) = 0 Then
'//Use trusted authentication if stUsername is not supplied.
stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"
Else
'//WARNING: This will save the username and the password with the linked table information.
stConnect = "ODBC;DRIVER=SQL Server;SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUsername & ";PWD=" & stPassword
End If
Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
CurrentDb.TableDefs.Append td
AttachDSNLessTable = True
Exit Function
AttachDSNLessTable_Err:
AttachDSNLessTable = False
MsgBox "AttachDSNLessTable encountered an unexpected error: " & Err.Description
End Function
Дополнительные сведения о параметрах метода CreateTableDef см. в разделе Метод Database.CreateTableDef (DAO).
Чтобы вызвать функцию AttachDSNLessTable, добавьте код, аналогичный одному из следующих примеров кода в макросе Auto-Exec или в форме запуска Form_Open события:
При использовании макроса Auto-Exec вызовите функцию AttachDSNLessTable, а затем передайте параметры, аналогичные приведенным ниже из действия RunCode.
AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
При использовании формы запуска добавьте в событие Form_Open код, аналогичный приведенному ниже.
Private Sub Form_Open(Cancel As Integer) If AttachDSNLessTable("authors", "authors", "(local)", "pubs", "", "") Then '// All is okay. Else '// Not okay. End If End Sub
Примечание При добавлении нескольких связанных таблиц в базу данных Access необходимо настроить логику программирования.
Метод 2. Используйте DAO. Метод RegisterDatabase
The DAO. Метод RegisterDatabase позволяет создать подключение DSN в макросе Auto-Exec или в форме запуска. Хотя этот метод не устраняет требование для подключения DSN, он помогает устранить проблему, создав подключение DSN в коде. Чтобы использовать этот метод, создайте новый модуль, а затем добавьте в новый модуль следующую функцию CreateDSNConnection.
'//Name : CreateDSNConnection
'//Purpose : Create a DSN to link tables to SQL Server
'//Parameters
'// stServer: Name of SQL Server that you are linking to
'// stDatabase: Name of the SQL Server database that you are linking to
'// stUsername: Name of the SQL Server user who can connect to SQL Server, leave blank to use a Trusted Connection
'// stPassword: SQL Server user password
Function CreateDSNConnection(stServer As String, stDatabase As String, Optional stUsername As String, Optional stPassword As String) As Boolean
On Error GoTo CreateDSNConnection_Err
Dim stConnect As String
If Len(stUsername) = 0 Then
'//Use trusted authentication if stUsername is not supplied.
stConnect = "Description=myDSN" & vbCr & "SERVER=" & stServer & vbCr & "DATABASE=" & stDatabase & vbCr & "Trusted_Connection=Yes"
Else
stConnect = "Description=myDSN" & vbCr & "SERVER=" & stServer & vbCr & "DATABASE=" & stDatabase & vbCr
End If
DBEngine.RegisterDatabase "myDSN", "SQL Server", True, stConnect
'// Add error checking.
CreateDSNConnection = True
Exit Function
CreateDSNConnection_Err:
CreateDSNConnection = False
MsgBox "CreateDSNConnection encountered an unexpected error: " & Err.Description
End Function
Примечание При повторном вызове метода RegisterDatabase имя DSN обновляется.
Чтобы вызвать функцию CreateDSNConnection, добавьте код, аналогичный одному из следующих примеров кода в макросе Auto-Exec или в форме запуска Form_Open события:
При использовании макроса Auto-Exec вызовите функцию CreateDSNConnection, а затем передайте параметры, аналогичные приведенным ниже из действия RunCode.
CreateDSNConnection ("(local)", "pubs", "", "")
При использовании формы запуска добавьте в событие Form_Open код, аналогичный приведенному ниже.
Private Sub Form_Open(Cancel As Integer) If CreateDSNConnection("(local)", "pubs", "", "") Then '// All is okay. Else '// Not okay. End If End Sub
Примечание.
Этот метод предполагает, что вы уже создали SQL Server связанных таблиц в базе данных Access, используя myDSN в качестве имени DSN.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по