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:
Bild 1: Eigenschaften und Methoden des mit CurrentDb gelieferten Database-Objekts
C:DatenFachartikelAiUBasicBasics2011 9DAO_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!






