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.