Создание подключения без 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.