Home > Artikel > Ausgabe 10/2011 > DAO: Datenbank im Griff mit dem Database-Objekt

DAO: Datenbank im Griff mit dem Database-Objekt

Achtung: Sie sind nicht angemeldet. Wenn Sie Abonnent sind und sich anmelden, lesen Sie den kompletten Artikel, laden das PDF herunter oder probieren die Beispieldatenbank aus (sofern vorhanden).

Wenn Sie mit VBA auf Informationen zur aktuellen Datenbank zugreifen möchten, bietet die DAO-Bibliothek mit dem Database-Objekt die perfekte Hilfe an: Dieses Objekt lässt sich mit einem Verweis auf die aktuell geöffnete, aber auch auf andere Datenbanken füllen und erlaubt dann nicht nur den Zugriff auf ihre Eigenschaften, sondern stellt auch eine ganze Reihe Funktionen bereit. Dieser Artikel zeigt, wie Sie mit dem Database-Objekt auf die aktuell geöffnete und auch auf andere Datenbanken zugreifen.

Beispieldatenbank

Die Beispiele dieses Artikels finden Sie in der Datenbank 1110_DAO_Database.mdb.

Zugriff auf eine Datenbank

Warum sollte man überhaupt per VBA auf eine Datenbank und ihre Eigenschaften und Methoden zugreifen? Ganz einfach: Weil früher oder später die Methoden der Benutzeroberfläche und von Formularen ohne Einsatz von VBA-Ereignisprozeduren dazu führen werden, dass Sie Abläufe in Ihrer Access-Datenbank automatisieren werden – und zwar mit VBA.

Dabei werden Sie auch auf Informationen etwa zur aktuell geöffneten Datenbank angewiesen sein, beispielsweise um den Pfad herauszufinden, in dem sich die aktuelle Datenbank befindet. Oder Sie gehen einen Schritt weiter und möchten gleich noch Daten aus einer der in der Datenbank gespeicherten Tabellen auslesen – dies geht jedoch einen Schritt weiter und wird in einem weiteren Artikel beschrieben (DAO-Recordsets öffnen und lesen).

Wenn Sie auf die aktuelle Datenbank zugreifen möchten, brauchen Sie einen Verweis beziehungsweise eine Referenz auf diese Datenbank. Die Datenbank wird durch ein Objekt der Bibliothek DAO repräsentiert: dem Database-Objekt. Dieses Objekt muss nicht zwangsläufig auf die aktuell geöffnete Datenbank verweisen, aber dies wird in den meisten Fällen so sein. Einen Verweis auf dieses Database-Objekt erhalten Sie mit einer speziellen Funktion der Access-Bibliothek namens CurrentDb.

Da CurrentDb einen Verweis auf ein Database-Objekt liefert, können Sie direkt über die Funktion auf das Database-Objekt zugreifen. Das bedeutet, dass Sie die Eigenschaften und Methoden des Database-Objekts nutzen können. Öffnen Sie zum Beispiel das Direktfenster des VBA-Editors der aktuellen Datenbank mit Strg + G und tippen Sie die folgende Anweisung ein:

Debug.Print CurrentDb.Name

Bereits nach dem Eingeben des Punktes nach CurrentDb bietet IntelliSense eine Liste aller Eigenschaften und Methoden des mit der CurrentDb-Funktion gelieferten Database-Objekts an (siehe Bild 1). Nach Abschluss der Eingabe mit der Eingabetaste liefert die Name-Eigenschaft den kompletten Pfad mit Dateiname der aktuell geöffneten Datenbank, zum Beispiel:

Eigenschaften und Methoden des mit CurrentDb gelieferten Database-Objekts

Bild 1: Eigenschaften und Methoden des mit CurrentDb gelieferten Database-Objekts

C:DatenFachartikelAiUBasicBasics20119DAO_Database1109_DAO_Database.mdb

Verweis auf die aktuelle Datenbank speichern

Wenn Sie mehr als einen Aufruf mit der CurrentDb-Funktion absetzen möchten, speichern Sie den damit gewonnenen Verweis auf die Datenbank in einer Variablen, die Sie wie folgt deklarieren:

Dim db As DAO.Database

Im folgenden Beispiel deklarieren Sie das Objekt, füllen es mit der CurrentDb-Funktion, geben Pfad und Dateiname der Datenbank aus und leeren die Objektvariable db wieder:

Public Sub Database_Beispiele()

     Dim db As DAO.Database

     Set db = CurrentDb

     Debug.Print db.Name

     Set db = Nothing

End Sub

Wo jetzt die Debug.Print-Anweisung steht, können Sie beliebige weitere Zugriffe auf den in der Variablen db gespeicherten Verweis auf die aktuelle Datenbank absetzen.

Alle Tabellen auslesen

Mit dem Database-Objekt können Sie alle in einer Access-Datenbank enthaltenen Tabellen auslesen. Die Tabellen macht das Database-Objekt über eine Auflistung namens TableDefs verfügbar (deutsch etwa: Tabellendefinitionen). Mit der Eigenschaft Count dieser Auflistung können Sie zunächst ermitteln, wieviele Tabellen die Datenbank enthält:

Debug.Print CurrentDb.TableDefs.Count

20

20 Tabellen? Das sind aber viel mehr, als im Datenbankfenster beziehungsweise im Navigationsbereich angezeigt werden? Nun: Die TableDefs-Auflistung bezieht sich auch auf ansonsten unsichtbare Systemtabellen. Dies belegt die folgende Prozedur, in der Sie in einer For Each-Schleife alle Elemente der TableDefs-Auflistung durchlaufen.

Für den Einsatz der For Each-Schleife deklarieren Sie zunächst eine Variable namens tdf mit dem Datentyp DAO.TableDef. In der For Each-Schleife weisen Sie der hinter dem Schlüsselwort For angegebenen Variablen tdf nacheinander alle Elemente der Auflistung TableDefs zu. Die einzige Anweisung innerhalb der Schleife soll schlicht den Namen der jeweiligen Tabelle beziehungsweise Tabellendefinition ausgeben:

Public Sub TabellenAusgeben()

     Dim db As DAO.Database

     Dim tdf As DAO.TableDef

     Set db = CurrentDb

     For Each tdf In db.TableDefs

         Debug.Print tdf.Name

Sie haben das Ende des frei verfügbaren Teil dieses Artikels erreicht!

Wenn Sie mehr lesen und auf viele weitere Artikel zugreifen möchten, melden Sie sich als Abonnent unter Login an. Falls nicht, bestellen Sie doch einfach ein Jahresabonnement!