6

Jak mogę połączyć tabelę z jednej bazy danych MS Access (* .mdb lub * .accdb) z inną bazą danych Access w VBA?Tabela połączeń MS Access z VBA

Zasadniczo po prostu użyłem VBA do replikacji tego, co robi kreator danych zewnętrznych.

Mam google to i widzę wiele przykładów, jak zaktualizować lub połączyć tabele i wiele przykładów łączenia z bazami danych SQL, ale bardzo niewiele prostych tabel łączenia między bazami danych Access.

+0

ja nie znam odpowiedzi, a ja nie staram się odwieść cię, ale jest to tak można wystarczy kliknąć przycisk i zsynchronizować dane, a nie uruchomić kreatora? Byłbym niezdecydowany, aby to zrobić ze względu na ładne wbudowane sprawdzanie poprawności, które pochodzi natywnie z programu Access, który (może?) Musi również kodować. –

+0

Tak, właśnie dlatego to robimy. Zautomatyzowałem prawie wszystkie moje operacje na bazach danych w VBA, z wyjątkiem tego. Mogę po prostu użyć czarodzieja, ale wygląda na to, że jestem na ostatniej przeszkodzie! – Mark

Odpowiedz

6

można użyć DoCmd.TransferDatabase Method utworzyć łącze do tabeli w innej bazie danych programu Access .

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

włączyłem nazwy opcji nadzieję, że będzie łatwiej śledzić, która opcja jest która. Ale jeśli to wydaje się zbyt rozwlekły, można pominąć nazwy opcji i zrobić to wszystko w jednym wierszu:

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

Dobra odpowiedź, Hans! –

2

Jest to całkiem proste - wystarczy utworzyć nowy program Tabledef i ustawić jego właściwość .connect na ciąg połączenia ODBC, który łączy się z inną bazą danych programu 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

Ciąg połączenia będzie wyglądać następująco (wzięte z connectionstrings.com):

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