Comment créer une connexion sans DSN à SQL Server pour les tables liées dans Access
Avancé : nécessite des compétences d’experts en codage, en interopérabilité et en multi-utilisateur.
Cet article sʼapplique uniquement à une base de données Microsoft Access (.accdb ou .mdb).
Introduction
Cet article explique comment créer une connexion à Microsoft SQL Server pour les tables liées dans Microsoft Access qui n’utilise pas de nom de source de données (DSN). Il s’agit également d’une connexion sans DSN.
Informations supplémentaires
Vous pouvez utiliser un DSN pour créer des tables SQL Server liées dans Microsoft Access. Toutefois, lorsque vous déplacez la base de données vers un autre ordinateur, vous devez recréer le nom de source de données sur cet ordinateur. Cette procédure peut être problématique lorsque vous devez l’effectuer sur plusieurs ordinateurs. Lorsque cette procédure n’est pas effectuée correctement, les tables liées peuvent ne pas être en mesure de localiser le nom de domaine principal. Par conséquent, les tables liées peuvent ne pas être en mesure de se connecter à SQL Server.
Si vous souhaitez créer un lien vers une table SQL Server, mais que vous ne souhaitez pas coder en dur un nom de source de données dans la boîte de dialogue Sources de données, utilisez l’une des méthodes suivantes pour créer une connexion sans DSN à SQL Server.
Méthode 1 : utiliser la méthode CreateTableDef
La méthode CreateTableDef vous permet de créer une table liée. Pour utiliser cette méthode, créez un module, puis ajoutez la fonction AttachDSNLessTable suivante au nouveau 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
Pour plus d’informations sur les paramètres de la méthode CreateTableDef, consultez Database.CreateTableDef, méthode (DAO).
Pour appeler la fonction AttachDSNLessTable, ajoutez du code similaire à l’un des exemples de code suivants dans la macro Auto-Exec ou dans le formulaire de démarrage Form_Open événement :
Lorsque vous utilisez la macro Auto-Exec, appelez la fonction AttachDSNLessTable, puis transmettez des paramètres similaires à ce qui suit à partir de l’action RunCode.
AttachDSNLessTable ("authors", "authors", "(local)", "pubs", "", "")
Lorsque vous utilisez le formulaire de démarrage, ajoutez un code similaire à ce qui suit à l’événement 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
Note Vous devez ajuster votre logique de programmation lorsque vous ajoutez plusieurs tables liées à la base de données Access.
Méthode 2 : Utiliser le DAO. Méthode RegisterDatabase
Le DAO. La méthode RegisterDatabase vous permet de créer une connexion DSN dans la macro Auto-Exec ou dans le formulaire de démarrage. Bien que cette méthode ne supprime pas la nécessité d’une connexion DSN, elle vous aide à résoudre le problème en créant la connexion DSN dans le code. Pour utiliser cette méthode, créez un module, puis ajoutez la fonction CreateDSNConnection suivante au nouveau 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
Note Si la méthode RegisterDatabase est appelée à nouveau, le DSN est mis à jour.
Pour appeler la fonction CreateDSNConnection, ajoutez du code similaire à l’un des exemples de code suivants dans la macro Auto-Exec ou dans le formulaire de démarrage Form_Open événement :
Lorsque vous utilisez la macro Auto-Exec, appelez la fonction CreateDSNConnection, puis transmettez des paramètres similaires aux suivants à partir de l’action RunCode.
CreateDSNConnection ("(local)", "pubs", "", "")
Lorsque vous utilisez le formulaire de démarrage, ajoutez un code similaire à ce qui suit à l’événement Form_Open.
Private Sub Form_Open(Cancel As Integer) If CreateDSNConnection("(local)", "pubs", "", "") Then '// All is okay. Else '// Not okay. End If End Sub
Remarque
Cette méthode suppose que vous avez déjà créé le SQL Server tables liées dans la base de données Access en utilisant « myDSN » comme nom DSN.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour