web-dev-qa-db-fra.com

Table de liaison MS Access avec VBA

Comment puis-je lier une table d'une base de données MS Access (* .mdb ou * .accdb) à une autre base de données Access dans VBA?

Fondamentalement, je devais simplement utiliser VBA pour répliquer ce que fait l'assistant de données externes.

J'ai googlé cela et je vois de nombreux exemples de mise à jour ou de liaison de tables et de nombreux exemples de liaison à des bases de données SQL, mais très peu de tables de liaison simples entre des bases de données Access.

10
Mark

Vous pouvez utiliser la méthode DoCmd.TransferDatabase pour créer un lien vers une table dans une autre base de données Access.

DoCmd.TransferDatabase TransferType:=acLink, _
        DatabaseType:="Microsoft Access", _
        DatabaseName:="C:\share\Access\Example Database.accdb", _
        ObjectType:=acTable, _
        Source:="Addresses", _
        Destination:="Addresses_link"

J'ai inclus les noms des options en espérant qu'il serait plus facile de suivre quelle option est laquelle. Mais si cela semble trop verbeux, vous pouvez omettre les noms des options et tout faire sur une seule ligne:

DoCmd.TransferDatabase acLink, "Microsoft Access", "C:\share\Access\Example Database.accdb", acTable , "Addresses", "Addresses_link"
11
HansUp

C'est en fait assez simple - vous créez simplement un nouveau tabledef et définissez sa propriété .connect sur une chaîne de connexion ODBC qui relie à l'autre base de données Access.

Private Function LinkTable(LinkedTableName As String, TableToLink As String, connectString As String) As Boolean

    Dim tdf As New dao.TableDef

    On Error GoTo LinkTable_Error

    With CurrentDb

        .TableDefs.Refresh

        Set tdf = .CreateTableDef(LinkedTableName)
        tdf.Connect = connectString
        tdf.SourceTableName = TableToLink
        .TableDefs.Append tdf
        .TableDefs.Refresh


    End With

    Set tdf = Nothing
End Function

La chaîne de connexion ressemblerait à ceci (extrait de connectionstrings.com ):

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\myFolder\myAccessFile.accdb;Persist Security Info=False;
3
DataWriter