Een DSN-loze verbinding maken met SQL Server voor gekoppelde tabellen in Access
Geavanceerd: vereist professionele codering, interoperabiliteit en vaardigheden voor meerdere gebruikers.
Dit artikel is alleen van toepassing op een Microsoft Access-database (.accdb en .mdb).
Inleiding
In dit artikel wordt beschreven hoe u een verbinding maakt met Microsoft SQL Server voor gekoppelde tabellen in Microsoft Access die geen gegevensbronnaam (DSN) gebruiken. Dit wordt ook wel een DSN-loze verbinding genoemd.
Meer informatie
U kunt een DSN gebruiken om gekoppelde SQL Server tabellen te maken in Microsoft Access. Maar wanneer u de database naar een andere computer verplaatst, moet u de DSN op die computer opnieuw maken. Deze procedure kan problematisch zijn wanneer u deze op meer dan één computer moet uitvoeren. Wanneer deze procedure niet correct wordt uitgevoerd, kunnen de gekoppelde tabellen de DSN mogelijk niet vinden. Daarom kunnen de gekoppelde tabellen mogelijk geen verbinding maken met SQL Server.
Als u een koppeling naar een SQL Server tabel wilt maken, maar geen DSN in het dialoogvenster Gegevensbronnen wilt vastmaken, gebruikt u een van de volgende methoden om een DSN-loze verbinding met SQL Server te maken.
Methode 1: de methode CreateTableDef gebruiken
Met de methode CreateTableDef kunt u een gekoppelde tabel maken. Als u deze methode wilt gebruiken, maakt u een nieuwe module en voegt u vervolgens de volgende functie AttachDSNLessTable toe aan de nieuwe module.
'//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
Zie Database.CreateTableDef method (DAO) voor meer informatie over de parameters van de methode CreateTableDef.
Als u de functie AttachDSNLessTable wilt aanroepen, voegt u code toe die vergelijkbaar is met een van de volgende codevoorbeelden in de macro Auto-Exec of in het opstartformulier Form_Open gebeurtenis:
Wanneer u de macro Auto-Exec gebruikt, roept u de functie AttachDSNLessTable aan en geeft u parameters door die vergelijkbaar zijn met de volgende uit de actie Coderen.
AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
Wanneer u het opstartformulier gebruikt, voegt u code toe die vergelijkbaar is met het volgende voor de gebeurtenis 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
Opmerking U moet de programmeerlogica aanpassen wanneer u meer dan één gekoppelde tabel toevoegt aan de Access-database.
Methode 2: gebruik de DAO. Methode RegisterDatabase
De DAO. Met de methode RegisterDatabase kunt u een DSN-verbinding maken in de macro Auto-Exec of in het opstartformulier. Hoewel met deze methode de vereiste voor een DSN-verbinding niet wordt verwijderd, kunt u het probleem wel oplossen door de DSN-verbinding in code te maken. Als u deze methode wilt gebruiken, maakt u een nieuwe module en voegt u vervolgens de volgende functie CreateDSNConnection toe aan de nieuwe module.
'//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
Opmerking Als de methode RegisterDatabase opnieuw wordt aangeroepen, wordt de DSN bijgewerkt.
Als u de functie CreateDSNConnection wilt aanroepen, voegt u code toe die vergelijkbaar is met een van de volgende codevoorbeelden in de macro Auto-exec of in het opstartformulier Form_Open gebeurtenis:
Wanneer u de macro Auto-Exec gebruikt, roept u de functie CreateDSNConnection aan en geeft u parameters door die vergelijkbaar zijn met de volgende uit de actie Coderen.
CreateDSNConnection ("(local)", "pubs", "", "")
Wanneer u het opstartformulier gebruikt, voegt u code toe die vergelijkbaar is met het volgende voor de gebeurtenis Form_Open.
Private Sub Form_Open(Cancel As Integer) If CreateDSNConnection("(local)", "pubs", "", "") Then '// All is okay. Else '// Not okay. End If End Sub
Opmerking
Bij deze methode wordt ervan uitgegaan dat u de SQL Server gekoppelde tabellen in de Access-database al hebt gemaakt met behulp van 'myDSN' als de DSN-naam.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor