Wenn Sie eine Datenbank in Frontend und Backend aufgeteilt haben, greift das Frontend über eine Verknüpfung auf die Tabellen im Backend zu. Wo sich das Backend befindet, wird in einer Systemtabelle gespeichert. Diese wird beim Verschieben des Backends jedoch nicht automatisch aktualisiert, was zur Folge hat, dass das Frontend sein Backend und die enthaltenen verknüpften Tabellen nicht mehr findet. Dieser Artikel stellt Strategien vor, um die Verknüpfungen stets aktuell zu halten.
Beispieldatenbank
Die Beispieldatenbanken zu diesem Artikel heißen 1106_Verknuepfungen_FE.mdb und 1106_Verknuepfungen_BE.mdb. Sie finden diese im Download zu diesem Artikel.
Anwendungsfälle
Für das Aufteilen von Datenbanken gibt es verschiedene Anlässe. Die wichtigsten sind die bessere Möglichkeit der Wartung und der Mehrbenutzerzugriff. Eine aufgeteilte Datenbank lässt sich besser warten, weil man die Anwendungslogik, also Abfragen, Formulare, Berichte und VBA/Makros anpassen und anschließend einfach die neue Version des Frontends mit dem Backend verknüpfen kann.
Der Mehrbenutzerzugriff erlaubt es, das mehrere Benutzer mit jeweils einem auf ihrem Arbeitsplatz installiertem Frontend auf die im Backend auf dem Server gespeicherten Daten zugreifen können.
Natürlich lassen sich die verbesserten Wartungsmöglichkeiten auch in Mehrbenutzerumgebungen einsetzen.
Beim einfachen Aufteilen einer Datenbank zur besseren Wartung einer Einzelplatz-Anwendung liegen Frontend und Backend optimalerweise im gleichen Verzeichnis der lokalen Festplatte. Hier kann es vorkommen, dass Frontend- und Backend-Datenbank zusammen in ein anderes Verzeichnis oder sogar auf einen anderen Rechner übertragen werden.
Beim einer Mehrbenutzer-Datenbank liegen die Frontends jeweils auf den Arbeitsplätzen der Mitarbeiter, das Backend befindet sich auf einem Server-Rechner. Das entsprechende Netzwerkverzeichnis ist normalerweise auf dem jeweiligen Arbeitsplatzrechner gemappt. Dies geschieht entweder individuell, das heißt, das jeder Benutzer das Verzeichnis unter einem selbst gewählten Buchstaben mappt, oder jeder Benutzer verwendet standardmäßig den gleichen Pfad für den Zugriff auf den Server.
Verknüpfungen erneuern
Wann immer Sie bei einer Kombination aus Frontend- und Backend-Datenbank die Backend-Datenbank verschieben, müssen Sie die Verknüpfungen anpassen.
Daher ist Variante mit der individuellen Festlegung des Laufwerkbuchstabens die ungünstigste: Sie müssen dann auch für jedes Frontend die Verknüpfungen individuell erneuern.
Wenn alle Benutzer den gleichen Pfad verwenden, beispielsweise e:\Datenbanken\Backend.mdb, brauchen Sie die Verknüpfungen nur einmal auf Basis dieses Pfades zu erstellen und können die Frontend-Datenbank dann von jedem Arbeitsplatz aus problemlos einsetzen. Selbst bei einem Verschieben des Backends muss nur das Mapping aktualisiert werden.
Das Verschieben von Frontend- und Backend einer Einzelplatzlösung ist ein Zwischending: Auch hier müssen die Verknüpfungen erneuert werden, aber da beide Dateien immer im gleichen Verzeichnis liegen, lässt sich dies einfach realisieren.
Grundlagen der Verknüpfung
Die Daten einer Verknüpfung werden in der Systemtabelle MSysObjects gespeichert. Diese Tabelle ist standardmäßig nicht sichtbar. Um sie sichtbar zu machen, führen Sie in Abhängigkeit von der Access-Version Folgendes durch:
Access 2003 und älter: Klicken Sie auf den Menüeintrag Extras|Optionen. Dort finden Sie im Bereich Ansicht unter Anzeigen den Eintrag Systemobjekte. Aktivieren Sie diese Option und schließen Sie den Dialog wieder.
Access 2007 und jünger: Die richtige Option ist hier ein wenig schwieriger zu finden. Klicken Sie mit der rechten Maustaste auf die Titelleiste des Navigationsbereichs und wählen Sie dort den Eintrag Navigationsoptionen aus (siehe Bild 1). Im nun erscheinenden Dialog Navigationsoptionen finden Sie untern links den Eintrag Systemobjekte anzeigen, den Sie aktivieren (siehe Bild 2). Der Navigationsbereich beziehungsweise das Datenbankfenster zeigt nun einige Einträge in grauer Schrift an, darunter auch MSysObjects.
Bild 1: Aufrufen der Navigationsoptionen unter Access 2007 und jünger
Bild 2: Aktivieren der Anzeige der Systemobjekte unter Access 2007 und jünger
Wenn Sie diese Tabelle öffnen und die enthaltenen Spalten ein wenig umstellen, erhalten Sie eine Ansicht wie in Bild 3. Wichtig sind die Spalten Name, Type und Database. Name zeigt den Namen des jeweiligen Objekts an, Type den Typ (6 steht für verknüpfte Tabellen) und Database liefert den Pfad zu der Datenbank, welche die verknüpften Tabellen enthält.
Bild 3: Die Tabelle MSysObjects zeigt den Pfad der verknüpften Tabellen an.
Nun mögen Sie denken, dass Sie beim Verschieben der Backend-Datenbank einfach den Pfad in dieser Tabelle ändern können, damit die Datenbank wieder auf die verknüpften Tabellen zugreifen kann. Aber weit gefehlt: Es handelt sich um eine Systemtabelle, deren Daten nicht geändert werden können. Genau genommen lassen sich noch nicht einmal die änderungen an der Reihenfolge der Spalten speichern.
Verknüpfung mit Backend im gleichen Verzeichnis
Befindet sich das Backend immer im gleichen Verzeichnis wie das Frontend, weil die Datenbank nur aus Gründen der besseren Wartbarkeit aufgeteilt wurde, können Sie dem Frontend eine kleine Prozedur hinzufügen, die bei jedem Start die Verknüpfung erneuert. Dies beugt dem Umbenennen der übergeordneten Verzeichnisse oder dem Verschieben von Frontend und Backend gemeinsam in ein anderes Verzeichnis vor. Die dazu verwendete Prozedur nutzt einige VBA-Befehle, die wir in Access [basics] noch nicht vorgestellt haben, aber im Rahmen dieser kleinen Lösung greifen wir einfach einmal den folgenden Ausgaben vor. Zum besseren Verständnis haben wir den grundsätzlichen Ablauf in Bild 4 skizziert. Die Prozedur legen Sie in einem Standardmodul an. Sie sieht so aus:
Bild 4: Ablauf beim Wiederverknüpfen von Tabellen eines Backends im gleichen Verzeichnis wie die Frontend-Datenbank
Public Sub VerknuepfungAktualisieren() Dim strDB As String Dim strPath As String Dim strConnect As String Dim db As DAO.Database Dim tdf As DAO.TableDef Set db = CurrentDb strPath = CurrentProject.Path For Each tdf In db.TableDefs strConnect = tdf.Connect If Len(strConnect) > 0 Then strDB = Mid(strConnect, InStrRev(strConnect, "\")) tdf.Connect = ";database=" & strPath & strDB tdf.RefreshLink End If Next tdf End Sub
Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Access [basics]:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 400 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein: