Så här skapar du en DSN-anslutning till en SQL Server för länkade tabeller i Access

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Avancerat: Kräver expertkodning, interoperabilitet och fleranvändarfärdigheter.

Den här artikeln gäller endast för Microsoft Access-databaser (.accdb och .mdb).

Inledning

I den här artikeln beskrivs hur du skapar en anslutning till Microsoft SQL Server för länkade tabeller i Microsoft Access som inte använder ett namn på datakällan (DSN). Det kallas även för en DSN-mindre anslutning.

Mer information

Du kan använda ett DSN för att skapa länkade SQL Server i Microsoft Access. Men när du flyttar databasen till en annan dator måste du skapa DSN på den datorn igen. Den här proceduren kan vara problematisk när du måste utföra den på flera datorer. När den här proceduren inte utförs korrekt kanske de länkade tabellerna inte kan hitta DSN. Därför kanske inte de länkade tabellerna kan ansluta till SQL Server.

Om du vill skapa en länk till en SQL Server-tabell men inte vill hårdkoda ett DSN i dialogrutan Datakällor använder du någon av följande metoder för att skapa en DSN-anslutning som är mindre SQL Server.

Metod 1: Använd metoden CreateTableDef

Med metoden CreateTableDef kan du skapa en länkad tabell. Om du vill använda den här metoden skapar du en ny modul och lägger sedan till följande AttachDSNLessTable-funktion i den nya modulen.

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

Mer information om parametrar för CreateTableDef-metoden finns i Database.CreateTableDef-metoden (DAO).

Du anropar funktionen AttachDSNLessTable genom att lägga till kod som liknar något av följande kodexempel i Auto-Exec-makrot eller i startformuläret Form_Open händelse:

  • När du använder makrot Auto-Exec anropar du funktionen AttachDSNLessTable och skickar sedan parametrar som liknar följande från åtgärden RunCode.

        AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
    
  • När du använder startformuläret lägger du till kod som liknar följande för Form_Open händelsen.

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

Obs! Programmeringslogiken måste justeras när du lägger till fler än en länkad tabell i Access-databasen.

Metod 2: Använd DAO. RegisterDatabase-metod

The DAO. Med metoden RegisterDatabase kan du skapa en DSN-anslutning i auto-exec-makrot eller i startformuläret. Även om den här metoden inte tar bort kravet för en DSN-anslutning hjälper den dig att lösa problemet genom att skapa DSN-anslutningen i koden. Om du vill använda den här metoden skapar du en ny modul och lägger sedan till följande CreateDSNConnection-funktion i den nya modulen.

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

Obs! Om metoden RegisterDatabase anropas igen uppdateras DSN.

Du anropar funktionen CreateDSNConnection genom att lägga till kod som liknar något av följande kodexempel i Auto-Exec-makrot eller i startformuläret Form_Open händelse:

  • När du använder makrot Auto-Exec anropar du funktionen CreateDSNConnection och skickar sedan parametrar som liknar följande från åtgärden RunCode.

        CreateDSNConnection ("(local)", "pubs", "", "")
    
  • När du använder startformuläret lägger du till kod som liknar följande för Form_Open händelsen.

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

Anteckning

Den här metoden förutsätter att du redan har SQL Server länkade tabeller i Access-databasen genom att använda "myDSN" som DSN-namn.