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.