Erstellen einer DSN-losen Verbindung mit SQL Server für verknüpfte Tabellen in Access

Hinweis

Office 365 ProPlus wird in Microsoft 365-Apps für Unternehmen umbenannt. Weitere Informationen zu dieser Änderung finden Sie in diesem Blogbeitrag.

Erweitert: Erfordert Codierungs-, Interoperabilitäts- und Mehrbenutzerkenntnisse von Experten.

Dieser Artikel bezieht sich nur auf eine Microsoft Access-Datenbank (ACCDB und MDB).

Einführung

In diesem Artikel wird beschrieben, wie Sie eine Verbindung mit Microsoft SQL Server für verknüpfte Tabellen in Microsoft Access erstellen, die keinen Datenquellennamen (Data Source Name, DSN) verwenden. Er wird auch als DSN-lose Verbindung bezeichnet.

Weitere Informationen

Sie können einen DSN verwenden, um verknüpfte SQL Server Tabellen in Microsoft Access zu erstellen. Wenn Sie die Datenbank jedoch auf einen anderen Computer verschieben, müssen Sie den DSN auf diesem Computer erneut erstellen. Dieses Verfahren kann problematisch sein, wenn Sie es auf mehreren Computern ausführen müssen. Wenn diese Prozedur nicht ordnungsgemäß ausgeführt wird, können die verknüpften Tabellen den DSN möglicherweise nicht finden. Daher können die verknüpften Tabellen möglicherweise keine Verbindung mit SQL Server herstellen.

Wenn Sie einen Link zu einer SQL Server Tabelle erstellen möchten, einen DSN jedoch nicht im Dialogfeld Datenquellen hartcodiert werden möchten, verwenden Sie eine der folgenden Methoden, um eine DSN-lose Verbindung mit SQL Server zu erstellen.

Methode 1: Verwenden der CreateTableDef-Methode

Mit der CreateTableDef-Methode können Sie eine verknüpfte Tabelle erstellen. Um diese Methode zu verwenden, erstellen Sie ein neues Modul, und fügen Sie dem neuen Modul die folgende AttachDSNLessTable-Funktion hinzu.

'//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

Weitere Informationen zu den Parametern der CreateTableDef-Methode finden Sie unter Database.CreateTableDef-Methode (DAO).

Um die AttachDSNLessTable-Funktion aufzurufen, fügen Sie Code hinzu, der einem der folgenden Codebeispiele im Makro "Auto-Exec" oder im Startformular Form_Open-Ereignis ähnelt:

  • Wenn Sie das Makro "Auto-Exec" verwenden, rufen Sie die AttachDSNLessTable-Funktion auf, und übergeben Sie dann Parameter, die den folgenden Parametern der RunCode-Aktion ähneln.

        AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
    
  • Wenn Sie das Startformular verwenden, fügen Sie Code hinzu, der dem Form_Open-Ereignis ähnelt.

    Private Sub Form_Open(Cancel As Integer)
        If AttachDSNLessTable("authors", "authors", "(local)", "pubs", "", "") Then
            '// All is okay.
        Else
            '// Not okay.
        End If
    End Sub
    

Hinweis Sie müssen die Programmierlogik anpassen, wenn Sie der Access-Datenbank mehrere verknüpfte Tabellen hinzufügen.

Methode 2: Verwenden Sie den DAO. RegisterDatabase-Methode

Der DAO. Mit der RegisterDatabase-Methode können Sie eine DSN-Verbindung im Makro "Auto-Exec" oder im Startformular erstellen. Obwohl diese Methode die Anforderung für eine DSN-Verbindung nicht entfernt, hilft sie Ihnen, das Problem zu beheben, indem sie die DSN-Verbindung im Code erstellt. Um diese Methode zu verwenden, erstellen Sie ein neues Modul, und fügen Sie dem neuen Modul die folgende CreateDSNConnection-Funktion hinzu.

'//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

Hinweis Wenn die RegisterDatabase-Methode erneut aufgerufen wird, wird der DSN aktualisiert.

Um die CreateDSNConnection-Funktion aufzurufen, fügen Sie Code hinzu, der einem der folgenden Codebeispiele im Makro "Auto-Exec" oder im Startformular Form_Open-Ereignis ähnelt:

  • Wenn Sie das Makro "Auto-Exec" verwenden, rufen Sie die CreateDSNConnection-Funktion auf, und übergeben Sie dann Parameter, die den folgenden Parametern der RunCode-Aktion ähneln.

        CreateDSNConnection ("(local)", "pubs", "", "")
    
  • Wenn Sie das Startformular verwenden, fügen Sie Code hinzu, der dem Form_Open-Ereignis ähnelt.

    Private Sub Form_Open(Cancel As Integer)
        If CreateDSNConnection("(local)", "pubs", "", "") Then
            '// All is okay.
        Else
            '// Not okay.
        End If
    End Sub
    

Hinweis

Bei dieser Methode wird davon ausgegangen, dass Sie die SQL Server verknüpften Tabellen in der Access-Datenbank bereits mit "myDSN" als DSN-Namen erstellt haben.