Tabellen verknüpfen per Assistent

Der in Access eingebaute Importassistent ist hilfreich, wenn man nur hin und wieder eine Tabelle verknüpfen oder importieren möchte. Wenn Sie diesen jedoch regelmäßig nutzen, werden Sie sich früher oder später ärgern, dass Sie jedes Mal erneut den Pfad der Quelldatenbank auswählen müssen. Dummerweise merkt sich Access noch nicht einmal den zuletzt verwendeten Pfad. Zeit, einen Ersatz für diesen Assistenten zu stricken – und zwar in Form eines kleinen Access-Add-Ins. Gleichzeitig erhalten Sie direkt noch einiges Know-how rund um das Verknüpfen und Importieren von Tabellen per VBA.

Funktionen des Add-Ins

Am Ende des Beitrag soll ein direkt einsetzbares Add-In herauskommen. Dieses sieht wie in Abb. 1 aus und bietet eine Reihe interessanter Funktionen, die ein schnellstmögliches Verknüpfen mit den Tabellen anderer Datenbanken erlauben.

pic005.png

Abb. 1: Das fertige Add-In zum schnellen Verknüpfen von Tabellen aus anderen Datenbanken

Wie schon in der Einführung erwähnt, ist vor allem das ständige Auswählen des Verzeichnisses der Quelldatenbank eine nervige Angelegenheit. Hier sollte auf jeden Fall der Hebel angesetzt werden. Deshalb soll das Formular gleich nach dem Öffnen die zuletzt zum Verknüpfen oder Importieren verwendeten Datenbankdateien anzeigen. Diese Liste könnte mit der Zeit etwas lang werden, deshalb haben wir neben der Schaltfläche zum Auswählen und Hinzufügen einer neuen Datenbank auch noch eine zum Löschen vorhandener Einträge eingebaut. Außerdem finden Sie ganz oben ein Textfeld, mit dem Sie die Datenbank- beziehungsweise Pfadnamen nach gewünschten Begriffen durchsuchen können. Nach Eingabe eines jeden Buchstabens wird der Inhalt des Listenfeldes mit den zuletzt verwendeten Datenbanken aktualisiert.

Fehlt noch eine Option im oberen Bereich des Formulars: Mit Nicht gefundene ausblenden stellen Sie ein, ob das obere Listenfeld solche Datenbankdateien, die aktuell nicht vorliegen, ausblenden soll.

Eigentlich könnte man diese auch gleich entfernen, aber es kann ja auch vorkommen, dass Datenbanken auf einem Netzlaufwerk liegen, das aktuell nicht verfügbar ist.

Ein Doppelklick auf einen der Listeneinträge des oberen Listenfeldes liest alle Tabellen der betroffenen Datenbank ein und zeigt diese in dem darunter befindlichen Listenfeld an.

Mit einem Klick auf das Kontrollkästchen Systemtabellen können Sie festlegen, ob die Liste nur benutzerdefinierte Tabellen anzeigen soll oder auch Systemtabellen. Rechts davon legen Sie fest, ob Tabellen importiert oder verknüpft werden sollen (eigentlich sollte das Add-In nur das Verknüpfen erlauben, aber das Importieren unterscheidet sich in einem einzigen Parameter – daher haben wir es auch noch hinzugefügt).

Im unteren Listenfeld markieren Sie schließlich die zu verknüpfenden oder zu importierenden Tabellen und führen die Verknüpfung oder den Import mit einem Klick auf die entsprechende Schaltfläche durch.

Tabellen der Lösung

Das Add-In verwendet zwei Tabellen, um die bereits verwendeten Datenbanken und die Tabellen der aktuellen Quelldatenbank zu speichern.

Die erste Tabelle heißt tblDatenbanken und sieht im Entwurf wie in Abb. 2 aus. Das Feld Datenbank speichert den Datenbanknamen inklusive Pfad, das Feld Vorhanden wird erst beim Öffnen des Formulars gefüllt. Dabei erhält es den Wert True, wenn eine Datenbank der Tabelle nicht am entsprechenden Ort gefunden werden konnte. Das Feld Datenbank ist mit einem eindeutigen Index versehen, damit jede Datenbank nur einfach aufgenommen werden kann.

pic008.png

Abb. 2: Tabelle zum Speichern der bereits verwendeten Datenbanken

Die Tabelle tblTabellen speichert nach der Auswahl der Datenbank, deren Tabellen verknüpft oder importiert werden sollen, die darin enthaltenen Tabellen.

Sie sieht im Entwurf wie in Abb. 3 aus und enthält neben dem Feld Tabelle zum Speichern des Tabellennamens noch das Feld Flags, um den Wert des gleichnamigen Feldes der Tabelle MSysObjects aufzunehmen.

pic009.png

Abb. 3: Tabellen zum Speichern der Tabellen der aktuell als Quelle für die Verknüpfung oder den Import dienenden Datenbank

Hauptformular erstellen

Das Hauptformular der Anwendung heißt frmLinkAndImportAdmin und sieht im Entwurf wie in Abb. 4 aus. Das Formular selbst ist an die Tabelle tblOptionen gebunden. Diese Tabelle sieht im Entwurf wie in Abb. 5 aus und speichert aktuell drei Optionen:

pic006.png

Abb. 4: Hauptformular des Add-Ins in der Entwurfsansicht

pic007.png

Abb. 5: Tabellen zum Speichern der Add-In-Optionen

  • Systemtabellen: Gibt an, ob Systemtabellen angezeigt werden sollen oder nicht. Wird mit dem Kontrollkästchen chkSystemtabellen eingestellt, das auch an dieses Feld der Tabelle tblOptionen gebunden ist.
  • NichtGefundeneAusblenden: Legt fest, ob aktuell nicht auffindbare Datenbanken ausgeblendet werden sollen. Wird mit dem Kontrollkästchen chkNichtGefundeneAusblenden eingestellt.
  • VerknuepfenOderImportieren: Speichert die letzte Einstellung der Optionsgruppe ogrVerknuepfenOderImportieren.

Durch die Verwendung dieser Tabelle und der an die enthaltenen Felder gebundenen Steuerelemente werden die zuletzt verwendeten Einstellungen beim nächsten Start des Add-Ins wiederhergestellt.

Öffnen des Formulars

Das Öffnen des Formulars löst das Ereignis Beim Laden aus, was wiederum die Ereignisprozedur Form_Load aus Listing 1 auf den Plan ruft. Diese Prozedur ruft zunächst eine weitere Prozedur namens DatenbankenPruefen auf. Diese prüft, ob alle bisher verwendeten Datenbanken noch an Ort und Stelle sind. Ist dies nicht der Fall und ist die Option NichtGefundeneAusblenden aktiv, werden die entsprechenden Einträge des Listenfeldes lstDatenbanken ausgeblendet.

Listing 1: Laden des Formulars

Private Sub Form_Load()
    Dim db As DAO.Database
    Set db = CodeDb
    DatenbankenPruefen
    db.Execute "DELETE FROM tblTabellen", dbFailOnError
    Me!lstTabellen.Requery
    Me!lstDatenbanken.ColumnWidths = "0;" & Me!lstDatenbanken.Width & ";0"
    DatenbankenAktualisieren
    Set db = Nothing
End Sub

Schauen wir uns zunächst dieses Listenfeld an: Es verwendet die Abfrage qryDatenbanken als Datenherkunft. Diese sieht wie in Abb. 6 aus und liefert zusätzlich zu den bereits vorhandenen Feldern der Tabelle tblDatenbank noch ein weiteres Feld namens DatenbankKurz. Dieses verwendet eine Funktion namens DateinameKuerzen, welche den im Feld Datenbank enthaltenen Dateinamen auf die im zweiten Parameter angegebene Anzahl Zeichen kürzt – mehr dazu im Beitrag Dateinamen kürzen und anzeigen (www.access-im-unternehmen.de/876). Das Ergebnis sieht jedenfalls wie in Abb. 7 aus – bei zu langen Dateinamen werden Teile durch Platzhalter ersetzt ().

pic010.png

Abb. 6: Diese Abfrage fügt die gekürzte Fassung des Datenbanknamens zum Ergebnis hinzu.

pic011.png

Abb. 7: Datenherkunft für das obere Listenfeld zur Anzeige der Datenbanken

Prüfen, ob alle Datenbanken an Ort und Stelle sind

Die Prozedur DatenbankenPruefen durchläuft alle Datensätze der Tabelle tblDatenbanken. Dabei versetzt sie den jeweils aktuellen Datensatz in den Bearbeitungsmodus und prüft dann mit der Dir-Funktion, ob die im Feld Datenbank angegebene Datei vorhanden ist.

Dies ist der Fall, wenn die Dir-Funktion eine Zeichenkette liefert, deren Länge größer als 0 ist. In diesem Fall stellt die Prozedur den Wert des Feldes Vorhanden auf den Wert True ein, sonst auf False. Schließlich speichert die Prozedur die änderung mit der Update-Methode und prüft dann den nächsten Datensatz:

Private Sub DatenbankenPruefen()
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Set db = CodeDb
    Set rst = db.OpenRecordset("SELECT * FROM tblDatenbanken", dbOpenDynaset)
    Do While Not rst.EOF
        rst.Edit
        If Len(Dir(rst!Datenbank)) > 0 Then
            rst!Vorhanden = True
        Else
            rst!Vorhanden = False
        End If
        rst.Update
        rst.MoveNext
    Loop
    Set db = Nothing
End Sub

Der Rest der Prozedur Form_Load ist schnell erklärt: Diese leert die Tabelle tblTabellen, da beim Öffnen des Formulars keiner der Listeneinträge markiert ist und somit auch keine Tabellen angezeigt werden sollen.

Das Listenfeld lstTabellen wird aktualisiert, danach stellt die Prozedur die Breite der angezeigten Spalte des Listenfeldes lstDatenbanken auf die Breite des gesamten Listenfeldes ein. Schließlich ruft die Prozedur eine weitere Routine namens DatenbankenAktualisieren auf (siehe Listing 2).

Listing 2: Aktualisieren der Datenbanken

Private Sub DatenbankenAktualisieren()
    If Me!chkNichtGefundeneAusblenden Then
        Me!lstDatenbanken.RowSource = "SELECT * FROM qryDatenbanken WHERE Vorhanden = True"
    Else
        Me!lstDatenbanken.RowSource = "SELECT * FROM qryDatenbanken"
    End If
End Sub

Sie haben das Ende des frei verfügbaren Textes erreicht. Möchten Sie ...

Workplace

Jahresabonnement TestzugangOder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

Schreibe einen Kommentar