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 2/2013.

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

Zusammenfassung

Lernen Sie ein Add-In kennen, mit dem Sie wesentlich schneller als mit dem eingebauten Assistenten Tabellen verknüpfen und importieren.

Techniken

VBA, Formulare

Voraussetzungen

Access 2000 und höher

Beispieldateien

LinkAndImportAdmin.mda

Shortlink

www.access-im-unternehmen.de/879

Tabellen verknüpfen per Assistent

André Minhorst, Duisburg

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

Diese stellt einfach nur sicher, dass das Listenfeld lstDatenbanken nur diejenigen Datenbanken anzeigt, die der Benutzer sehen will. Dies hängt wieder von der Einstellung der Option NichtGefundeneAusblenden ab. Hat diese den Wert True, erhält das Listenfeld lstDatenbanken eine Abfrage basierend auf der Abfrage qryDatenbanken als Datensatzherkunft, die lediglich die vorhandenen Datenbanken anzeigt. Anderenfalls zeigt das Listenfeld alle Einträge an.

Die gleiche Routine wird noch zu einer anderen Gelegenheit aufgerufen - nämlich dann, wenn der Benutzer den Wert des Kontrollkästchens chkNichtGefundeneAusblenden ändert:

Private Sub chkNichtGefundeneAusblenden_AfterUpdate()

    DatenbankenAktualisieren

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.