Warum noch ein Access-Buch?
Für wen ist das Buch?
Jetzt bestellen
+ direkter Download des eBooks!
Nur EUR 59,95!
Fehler gefunden?
Bitte melden!
Wünsche an das Buch?
Her damit!
Was denken die Leser über dieses Buch?
Lesen Sie aktuelle Rezensionen!
Kapitel des noch nicht veröffentlichten Buchs zum Downloaden, Probelesen und Kommentieren
Beispieldatenbanken
Zusätzliches Material

Das Buch im HTML-Format

Für unbestimmte Zeit bieten Addison-Wesley und André Minhorst den kompletten Inhalt des Buchs als Download an. Schauen Sie rein und informieren Sie sich über den Inhalt! Und wenn Ihnen das Buch nützlich erscheint und Sie glauben, dass Sie etwas gelernt haben oder durch das Gelesene sogar etwas Zeit und somit Geld bei Ihrer Arbeit einsparen konnten, können Sie sich ja beim Autor und beim Verlag revanchieren - beispielsweise durch den Kauf dieses Buchs.

Am schönsten wäre es natürlich, wenn Sie das Buch direkt hier bestellen - Sie erhalten das Buch dann direkt vom Verlag, und der Autor und Verlag haben dann noch mehr davon, als wenn Sie es anderswo kaufen.

Danke für Ihr Interesse!

9.4.3 Datenbanken erzeugen und öffnen

9.5 Aktuelle Datenbank referenzieren

Um per DAO auf die aktuelle Datenbank zuzugreifen, gibt es zwei Möglichkeiten: Entweder man arbeitet sich vom obersten Element der Objekthierarchie bis zum Database-Objekt vor und verweist darauf oder man verwendet direkt die CurrentDB-Methode, um einen Verweis zu erhalten:

DBEngine.Workspaces(0).Databases(0)

oder abgekürzt

DBEngine(0)(0)

verweisen dabei auf die aktuelle Datenbank, während

CurrentDB

einen Verweis auf eine neue Objektinstanz erstellt und diesen zurückliefert.

Welche Vor- und Nachteile gibt es nun und welche Variante setzt man wann ein? Die DBEngine-Version ist die einzige der beiden Möglichkeiten, mit der Sie von außerhalb, also etwa von Excel oder Word aus, auf eine Access-Datenbank zugreifen können. Intern sind beide Varianten möglich. CurrentDB hat dabei den Vorteil, dass es immer auf die aktuelle Datenstruktur zugreift, während dies bei DBEngine(0)(0) nicht immer der Fall ist. CurrentDB aktualisiert nämlich sämtliche im Database-Objekt enthaltenen Auflistungen, während bei der Verwendung von DBEngine ein zusätzlicher Aufruf der Refresh-Methode erforderlich ist. Den von CurrentDB zurückgegebenen Verweis muss man speichern, um länger als für die Dauer der aktuellen Anweisung auf das Database-Objekt und untergeordnete Objekte zugreifen zu können; greift man über CurrentDB auf untergeordnete Objekte zu, sind diese nur für die Dauer der Anweisung existent. Der Nachteil von CurrentDB ist, dass es minimal langsamer als DBEngine(0)(0) ist - was sich allerdings im normalen Betrieb kaum bemerkbar macht.

Ein Beispiel für dieses Verhalten finden Sie in Abbildung 9.3. Ausnahmen für dieses Verhalten gibt es auch: Wenn Sie mit folgendem Quellcode eine Datensatzgruppe erzeugen, verschwindet das Objekt nicht von alleine wieder in die ewigen Jagdgründe:

Public Sub CurrentDBPersistenzMitRecordset()

    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("tblMitarbeiter", dbOpenDynaset)
    Debug.Print rst.RecordCount
    Set rst = Nothing

End Sub

Listing 9.6: Erfolgreiches Erzeugen eines Objektverweises mit CurrentDB und untergeordnetem Recordset-Objekt

Abbildung 9.3: Fehler beim Versuch, einen Verweis auf ein untergeordnetes Objekt mit CurrentDB herzustellen

Selten genutzt, aber perfekt: CurrentDBC

Es gibt allerdings noch eine weitere Variante, einen Verweis auf die aktuelle Datenbank zu erstellen. Sie stammt von Michael Kaplan und wurde beispielsweise unter [1] veröffentlicht. Erstellen Sie einfach ein neues Standardmodul und fügen Sie die folgenden Zeilen dort ein:

Private mDB As DAO.Database

Public Property Get CurrentDBC() As DAO.Database
    If mDB Is Nothing Then
        Set mDB = CurrentDb
    End If
    Set CurrentDBC = mDB
End Property

Listing 9.7: Dynamisches Zuweisen eines Database-Objekts

Anschließend brauchen Sie nur noch CurrentDBC überall dort einzusetzen, wo Sie die aktuelle Datenbank referenzieren möchten - fertig! Und was passiert dort nun? Ganz einfach: Wann immer Sie mit CurrentDBC auf die aktuelle Datenbank zugreifen möchten, ruft Access die öffentliche Property-Prozedur CurrentDBC auf. Diese prüft, ob die private Variable nicht leer ist, was bedeutet, dass ihr zuvor ein Verweis auf die aktuelle Datenbank zugewiesen wurde. Wenn nicht, erfolgt die Zuweisung im nächsten Schritt und der Objektverweis wird an den Rückgabewert CurrentDBC weitergegeben. Ist der Verweis schon vorhanden, gibt die Property diesen ohne Umwege an die aufrufende Zeile weiter. Der Vorteil ist: Sie müssen im Normalfall nur einmal pro Anwendungssitzung einen Verweis auf die aktuelle Datenbank mit CurrentDB herstellen und können im Anschluss immer wieder auf diesen gespeicherten Verweis zugreifen.

Und falls Sie noch wissen möchten, warum dieses Buch dennoch überall CurrentDB einsetzt: Es ist eine eingebaute Funktion, und außerdem sollen alle Beispiele so funktionieren, wie Sie diese hier abgedruckt finden - ohne, dass überall ein Hinweis auf die zusätzlich zu erstellende Property notwendig ist.

Nächster Abschnitt:

9.5.1 Users und Groups

Unterabschnitte des aktuellen Abschnitts:

    9.5.1 Users und Groups

© 2006-2008 André Minhorst Alle Rechte vorbehalten.