MS Access: Tabellen automatisch mit Daten Datenbank verbinden
Aufgabe:
Dieses Beispiel zeigt wie man in Microsoft Access automatisch Tabellen an einen Access-Daten-Container verbinden kann.
Warum Aufteilung und Verbinden:
In MS Access sind oft die Daten von dem Frontend als Datenbank getrennt, damit man verschieden Versionen von Datenbanken im Entwicklungszustand verteilen kann oder einfach in einem Frontend programmieren kann ohne die Original-Daten zu verwenden.
Man muss die Tabellen entweder Manuell mit dem Tabellenverknüpfungsmanager mit der Daten-Datenbank verbinden
Dateien: Verteilung
In diesem Beispiel befindet sich die Frontend-Datei Frontend_Connect_Daten.accdb, welche auf die Daten.accdb zugreifen möchte.
1) Lokal verbinden
Verbinden, wenn sich das
Frontend und Daten-Datei auf dem gleichen Verzeichnis befinden.
Der folgende vba Code macht folgendes:
Es liest aus einer internen Tabellen-Liste, welche Tabellen erneut angebunden werden müssen.
Es ermittelt den Pfad, wo sich das aktuelle Frontend befindet aus dem CurrentProject und bildet einen Dateipfad zur Datendatei.
Dann löscht es die aktuelle Tabellenverknüpfung in der aktuellen Frontend-Datenbank und anschliessend verbindet des die Tabelle neu mit dem Befehl
DoCmd.TransferDatabase als Link-Verknüpfung
Vba Code zum Einbinden.
Private Sub fxConnect_local()
'----------------< fxConnect_local >----------------
Dim sDatabase As String
sDatabase = "/Daten.accdb"
'< init >
On Error Resume Next
Dim db As Database
Set db = CurrentDb
'</ init >
'< @Loop: tabellen >
Dim recTabellen As Recordset
Set recTabellen = db.OpenRecordset("SELECT * FROM tblSystem_Tables_Extern", dbOpenSnapshot)
Do Until recTabellen.EOF
DoEvents
Dim sZiel_Tabellenname As String
sZiel_Tabellenname = recTabellen!Tablename
'< get local Path >
Dim sPath_Frontend As String
sPath_Frontend = CurrentProject.Path
'</ get local Path >
'< Path to Data >
Dim sDaten_Pfad As String
sDaten_Pfad = sPath_Frontend & "\" & sDatabase
'</ Path to Data >
'< lokale tabelle loeschen >
Err.Clear
db.TableDefs.Delete sZiel_Tabellenname
'< lokale tabelle loeschen >
'< extern anbinden >
Err.Clear
DoCmd.TransferDatabase acLink, "Microsoft Access", sDaten_Pfad, acTable, sZiel_Tabellenname, sZiel_Tabellenname, False, True
If Err.Number <> 0 Then
MsgBox "Fehler beim Anbinden : " & Err.Description, vbCritical, "Fehler beim Daten anbinden"
Exit Sub
End If
'< extern anbinden >
'< next >
recTabellen.MoveNext
'</ next >
Loop
'< Abschluss >
recTabellen.Close
'</ Abschluss >
'----------------</ fxConnect_local >----------------
End Sub
|
2) Tabellen mit festem Pfad verbinden
Der folgende vba Code verbindet die Tabellen mit einem festen Dateipfad.
Da die Tabellen in verschiedenen Datenbank-Dateien liegen können, ist hinter jeder Tabelle in der Spalte:Source der einzelne Pfad hinterlegt.
Anschliessend wird wie bei der lokalen Anbindung die Tabellenverknüpfung im Frontend gelöscht und anschliessend erneut mit Docmd.TransferDatabase acLink verbunden.
Vba Code für feste Verbindung.
Private Sub fxDaten_verbinden()
'----------------< fx_Daten_anbinden >----------------
Dim sDatabase As String
sDatabase = "/Daten.accdb"
'< init >
On Error Resume Next
Dim db As Database
Set db = CurrentDb
'</ init >
'< @Loop: tabellen >
Dim recTabellen As Recordset
Set recTabellen = db.OpenRecordset("SELECT * FROM tblSystem_Tables_Extern", dbOpenSnapshot)
Do Until recTabellen.EOF
DoEvents
Dim sZiel_Tabellenname As String
sZiel_Tabellenname = recTabellen!Tablename
Dim sDaten_Pfad As String
sDaten_Pfad = recTabellen!Source & "\" & sDatabase
'< lokale tabelle loeschen >
Err.Clear
db.TableDefs.Delete sZiel_Tabellenname
'< lokale tabelle loeschen >
'< extern anbinden >
Err.Clear
DoCmd.TransferDatabase acLink, "Microsoft Access", sDaten_Pfad, acTable, sZiel_Tabellenname, sZiel_Tabellenname, False, True
If Err.Number <> 0 Then
MsgBox "Fehler beim Anbinden : " & Err.Description, vbCritical, "Fehler beim Daten anbinden"
Exit Sub
End If
'< extern anbinden >
'< next >
recTabellen.MoveNext
'</ next >
Loop
'< Abschluss >
recTabellen.Close
'</ Abschluss >
'----------------</ fx_Daten_anbinden >----------------
End Sub
|
2b) Aufbau der Tabelle mit externen Verweisen.
Um überhaupt zu wissen, welche Tabellen ausgetausch werden müssen, muss eine Information-Tabelle wie hier vorhanden sein.
tblSystem_Tables_extern.
3) Manuell Verbinden:
Man kann die Tabellen manuell verbinden, indem man auf die Tabellen in der Navigationsleiste mit der rechten Maustaste anklickt und dann im Kontextmenü den Tabellenverknüpfungs-Manager öffnet