Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Achtung: Dies ist nicht der vollständige Artikel, sondern nur ein paar Seiten davon. Wenn Sie hier nicht erfahren, was Sie wissen möchten, finden Sie am Ende Informationen darüber, wie Sie den ganzen Artikel lesen können.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 4/2004.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Access-FAQ: Rund um Access

Karl Donaubauer, Wien

In der Access-FAQ von Karl Donaubauer (www.donkarl.com) finden Sie die meistgestellten Fragen und Anworten zum Thema Microsoft Access. In dieser Beitragsreihe stellt Karl Donaubauer die wichtigsten Einträge im Detail vor und zeigt Ihnen entsprechende Lösungen anhand praxisnaher Beispiele. Im fünften Teil lernen Sie die Lösungen zu den meistgenannten Problemen der Teilnehmer der deutschsprachigen Access-Newsgroups im Zusammenhang mit Tabellen kennen.

Tabellen erneut einbinden

Eine professionell aufgebaute Access-Anwendung besteht fast immer aus zwei oder mehr MDBs in der klassischen Frontend/Backend-Struktur. In der Backend-MDB befinden sich nur die Daten, das heißt Tabellen, in der Frontend-MDB sämtliche anderen Datenbankobjekte sowie die eingebundenen Tabellen aus dem Backend. Die wichtigsten Vorteile dieser Struktur sind geringere Korruptionsanfälligkeit und leichtere Wartung.

Manche Anwendungen besitzen auch mehrere Backends, aus denen Tabellen im Frontend eingebunden sind. Das macht zum Beispiel Sinn, wenn ein einzelnes Backend aufgrund der Datenmenge an die Grenzen von Access stoßen würde (ein Gigabyte bei Access 97, zwei Gigabyte ab Access 2000) oder wenn man "Wegwerf-Backends" verwendet, in die große Datenmengen aus anderen Formaten importiert werden und die dafür immer wieder neu aufgebaut werden.

Abb. 1: Tabelleneigenschaft Beschreibung

Access erlaubt bei eingebundenen Tabellen leider nur die Angabe von absoluten und fixen Herkunftspfaden. Diese sind in der Entwurfsansicht der eingebundenen Tabelle in der Eigenschaft Beschreibung sichtbar. Abb. 1 zeigt ein Beispiel, in dem der Wert dieser Eigenschaft folgendermaßen lautet (ohne Zeilenumbruch):

DATABASE=D:\Lager\Artikel
BE.mdb;TABLE=tblArtikel

Das bedeutet, dass die Originaltabelle tblArtikel heißt und dass sich das Backend ArtikelBE.mdb im Ordner D:\Lager befindet.

Hinweis

Auf der Begleit-CD finden Sie je zwei Beispiel-Datenbanken im Format von Access 97 und im Format von Access 2000 mit den Quellcodes und Beispielen aus diesem Artikel. (

Function fctReConnect1(strNameBE As String)

    On Error GoTo myError

    Dim db As DAO.Database

    Dim tdf As DAO.Tabledef

    Dim strPathBE As String

    Set db = CurrentDb

    strPathBE = Left(db.Name, Len(db.Name) - _
        Len(Dir(db.Name))) & strNameBE

    For Each tdf In db.TableDefs

       If tdf.Connect <> "" Then

            If Mid(tdf.Connect, 11) <> strPathBE Then

                tdf.Connect = ";database=" & strPathBE

                tdf.RefreshLink

            End If

       End If

    Next tdf

myExit:

    Exit Function

myError:

    Select Case Err.Number

        Case Else

            MsgBox "Ausnahme Nr. " & Err.Number _
                & " " & Err.Description

    End Select

    Resume myExit

End Function

Quellcode 1

Ändert sich nun der Ordner des Backends, so ist die Verbindung zur Ursprungstabelle verloren, und beim Versuch, die eingebundene Tabelle zu öffnen, erscheint eine Fehlermeldung, die besagt, dass die Backend-MDB nicht gefunden werden kann. Manuell müsste man nun die eingebundene Tabelle löschen und wieder neu mit dem richtigen Pfad verknüpfen.

Eine andere Möglichkeit ist die Verwaltung der eingebundenen Tabellen über den Tabellenverknüpfungs-Manager im Menüpunkt Extras/Datenbank-Dienstprogramme. Der Tabellenverknüpfungs-Manager hat jedoch einige Schwächen, wie Installationsprobleme und begrenzte Breite für sehr lange Pfade.

In Access 2003 gibt es zudem den häufigen Bug, dass eingebundene Tabellen nicht im Manager angezeigt werden. Man muss für sein korrektes Funktionieren erst die zuständige accwizz.dll neu registrieren. Bug und Lösung sind im Knowledgebase-Artikel 835519 beschrieben.

Möchten Sie das Wiedereinbinden selbst kontrollieren und automatisieren, so können Sie per Code beim Starten der Datenbank prüfen, ob die Einbindung noch in Ordnung ist, und falls nicht, die Tabellen neu verknüpfen. Um das komplett ohne Anwender-Eingriff durchzuführen, können Sie als Vorgabe für den Anwender festlegen, dass Backend- und Frontend-MDB immer zusammen in einem gemeinsamen Verzeichnis zu installieren sind. Damit kann der Code automatisch den aktuellen Pfad für die Wiedereinbindung verwenden. Die Funktion aus Quellcode 1 erledigt genau das.

Sie können die Funktion beim Öffnen des Startformulars oder im Autoexec-Makro aufrufen:

fctReConnect1 "NameDesBackends"

Im Code wird zuerst die Variable strPathBE auf den aktuellen Ordner des Frontends gesetzt und um den übergebenen Backend-Namen ergänzt. Danach werden alle Tabellen des Frontends durchlaufen und es wird geprüft, ob die Eigenschaft Connect mehr als einen Leerstring erhält. Nur bei eingebundenen Tabellen enthält die Eigenschaft den gleichen Text wie die oben angeführte Tabelleneigenschaft Beschreibung. Es wird geprüft, ob Backendpfad und -name identisch sind mit strPathBE. Falls nicht, wird die Connect-Eigenschaft auf den neuen Pfad geändert und die Verbindung mit der Methode RefreshLink aktualisiert. Das Installieren von Frontend und Backend im selben Ordner ist natürlich nicht immer möglich. In solchen Fällen ist das Wiedereinbinden in der Praxis nur halbautomatisch möglich.

Function fctReConnect2()

    On Error GoTo myError

    Dim tdf As DAO.Tabledef

    Dim strPathBE As String

    If DLookup("ArtikelId", "tblArtikel") <> "" Then Exit Function

myExit:

    Exit Function

myError:

    Select Case Err.Number

        Case 3024, 63725, 3043, 3044

            MsgBox "Der Pfad zu den Daten hat sich geändert. " & _

                   "Bitte wählen Sie im folgenden Dialog die aktuelle Daten-mdb aus."

            strPathBE = fct_Datei_suchen

            If strPathBE <> "" Then

                Dim db As DAO.Database

                Set db = CurrentDb

                For Each tdf In db.TableDefs

                   If tdf.Connect <> "" Then

                        If Mid(tdf.Connect, 11) <> strPathBE Then

                            tdf.Connect = ";database=" & strPathBE

                            tdf.RefreshLink

                        End If

                   End If

                Next tdf

            End If

            Resume Next

        Case Else

            MsgBox "Bei der Installation ist ein Problem aufgetreten. " & _

                   "Bitte überprüfen Sie den Pfad und versuchen Sie noch " & _

                   "einmal die Daten einzubinden.", _

                   vbCritical, "Problem bei der Installation !"

            Resume myExit

    End Select

End Function

Public Function fctDateiSuchen()

    Dim fd As New FileDialog

Sie haben das Ende des frei verfügbaren Teils des Artikels erreicht. Lesen Sie weiter, um zu erfahren, wie Sie den vollständigen Artikel lesen und auf viele hundert weitere Artikel zugreifen können.

Sind Sie Abonnent?Jetzt einloggen ...
 

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

© 2003-2015 André Minhorst Alle Rechte vorbehalten.