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.6.12 Zugriff auf Auflistungen und Elemente

9.6.13 Datensatzgruppen erstellen mit OpenRecordset

Die Methode OpenRecordset ist eine der Möglichkeiten für den Zugriff auf die Daten einer Tabelle oder einer Abfrage. Damit ist sie eine der wichtigsten Methoden des Database-Objekts.

Die Methode kommt in zwei Ausführungen. Die erste öffnet eine Datensatzgruppe auf Basis einer Tabelle, einer Auswahlabfrage oder einer SQL-Select-Anweisung:

Set = .OpenRecordset (, , , )

Die zweite Variante öffnet eine Datensatzgruppe auf Basis eines bestehenden Recordset2-Objekts. Als geben Sie hierbei das bestehende Recordset2-Objekt an:

Set = .OpenRecordset (, , )

Das Ergebnis der OpenRecordset-Methode wird immer einem Recordset2-Objekt zugewiesen. Bei handelt es sich um ein Database-Objekt, das zuvor etwa mit CurrentDB erzeugt wird. Die ist entweder der Name einer Tabelle oder Auswahlabfrage oder eine SQL-Select-Anweisung. Der beschreibt die Art der zu öffnenden Datensatzgruppe. Tabelle 9.4 enthält die verschiedenen Möglichkeiten.

Performance

Die Auswahl des richtigen Typs beim Öffnen eines Recordset2-Objekts spielt eine entscheidende Rolle für die Performance bei der Arbeit mit diesem Objekt. Weitere Informationen hierzu finden Sie in Kapitel 14, »Performance«.

Konstante Beschreibung
dbOpenTable Öffnet eine Tabelle in der lokalen Datenbank; Standard für Tabellen-Objekte. Die Daten in einem solchen Recordset können bearbeitet werden; außerdem kann die Seek-Methode für die Suche in indizierten Feldern verwendet werden.
dbOpenDynaset Öffnet ein Recordset vom Typ Dynaset. Standard für verknüpfte Tabellen, Abfragen und SQL-Select-Anweisungen. Die Daten solcher Recordsets können in den meisten Fällen bearbeitet werden. Ein Dynaset-Recordset enthält nur die Verweise auf die Datensätze der beteiligten Tabellen, der Inhalt eines Datensatzes wird bei Bedarf eingelesen.
dbOpenSnapshot Öffnet ein Recordset vom Typ Snapshot. Ein Snapshot ist ein Abbild des betroffenen Datenbestandes zu einem bestimmten Zeitpunkt. Die enthaltenen Daten können nicht geändert werden.
dbOpenForwardOnly Öffnet ein Recordset vom Typ Forward-Only. Entspricht weitgehend dem Snapshot, kann aber nur vorwärts (und damit nur einmal) durchlaufen werden.

Tabelle 9.4: Konstanten für den Typ einer per OpenRecordset geöffneten Datensatzgruppe

Der Parameter ist unter anderem für den Einsatz von Access in Mehrbenutzerumgebungen interessant; außerdem lassen sich weitere Optionen festlegen. Einen Überblick über die gängigsten Optionen bietet Tabelle 9.5. Die Parameter lassen sich auch kombinieren, indem Sie mehrere Parameter mit einer boolschen Operation addieren (etwa dbConsistent Or dbSeeChanges).

Konstante Beschreibung
dbAppendOnly Lässt nur das Anfügen von Daten zu (Typ: Dynaset).
dbConsistent Lässt nur konsistente Aktualisierungen zu (Typ: Dynaset und Snapshot).
dbDenyWrite Verhindert, dass andere Benutzer Datensätze ändern oder hinzufügen können.
dbDenyRead Verhindert, dass andere Benutzer Daten in Tabellen lesen können (Typ: Table).
dbForwardOnly Recordset kann nur vorwärts durchlaufen werden (Typ: Snapshot). Alternative: Direkt dbOpenForwardOnly als Typ wählen.

Tabelle 9.5: Zusätzliche Optionen zum Öffnen von Datensatzgruppen

Konstante Beschreibung
dbInconsistent Ermöglicht inkonsistente Aktualisierungen (Typ: Dynaset und Snapshot).
dbReadOnly Verhindert Änderungen am Recordset. Alternative: dbReadOnly für den Parameter Sperren angeben.
dbSeeChanges Löst einen Laufzeitfehler aus, wenn ein Benutzer Daten ändert, die ein anderer Benutzer bearbeitet (Typ: Dynaset). Dies ist in Anwendungen hilfreich, in denen mehrere Benutzer gleichzeitig per Lese-/Schreib-Zugriff über die gleichen Daten verfügen.
dbSQLPassThrough Gibt eine SQL-Anweisung an eine mit Microsoft ACE verbundene ODBC-Datenquelle zur Bearbeitung weiter (Typ: Snapshot).

Tabelle 9.5: Zusätzliche Optionen zum Öffnen von Datensatzgruppen (Fortsetzung)

Sperren von Daten während der Bearbeitung

Wenn mehrere Benutzer gleichzeitig auf die Daten einer Datenbank zugreifen können, müssen Sie festlegen, wie die ACE darauf reagieren soll. Verwenden Sie den Parameter , um einen der in Tabelle 9.6 aufgeführten Werte zu verwenden.

Grundsätzlich gilt bei Sperrungen von Datensätzen, dass die ACE Bereiche der Datenbankdatei mit der Windows-Funktion LockFileEx sperrt. Da diese Funktion nicht einzelne Byte, sondern nur komplette RAM-Seiten sperren kann, die jeweils 4.096 Byte umfassen, sind von einer Sperrung unter Umständen mehrere Datensätze betroffen.

Konstante Beschreibung
dbReadOnly Öffnet ein schreibgeschütztes Recordset. Kann nur für einen der Parameter oder eingesetzt werden. Es tritt keine Sperrung in Kraft.
dbPessimistic Sperrt die komplette Speicherseite, in der sich der von einer Änderung betroffene Datensatz befindet, sobald die Bearbeitung beginnt (Edit-Methode). Von dieser Sperrung können je nach Umfang der Felder mehrere Datensätze betroffen sein.
dbOptimistic Sperrt die komplette Speicherseite, in der sich der von einer Änderung betroffene Datensatz befindet, sobald der Datensatz aktualisiert wird (Update-Methode).

Tabelle 9.6: Konstanten für den Parameter Sperren der OpenRecordset-Methode

Beispiel: Öffnen eines Recordsets auf Basis einer Tabelle

Ein typisches Beispiel sieht folgendermaßen aus:

Public Sub DatensatzgruppeOeffnen()

    Dim db As DAO.Database

    Dim rst As DAO.Recordset2

    Set db = CurrentDb
    Set rst = db. OpenRecordset("tblMitarbeiter", dbOpenDynaset)

    With rst
        'etwas mit dem Recordset machen
    End With

    rst.Close

    Set rst = Nothing
    Set db = Nothing

End Sub

Listing 9.21: Verwendung von OpenRecordset

Hier ist die aktuelle Datenbank das Objekt, die Tabelle tblMitarbeiter die Quelle und dbOpenDynaset der Typ. Weitere Optionen sind nicht festgelegt.

Beispiel: Öffnen eines Recordsets auf Basis eines anderen Recordsets

Sie können die OpenRecordset-Methode auch auf bestehenden Recordsets ausführen. Im folgenden Beispiel werden die Datensätze des ersten Recordsets gefiltert und das Ergebnis wird einem zweiten Recordset zugewiesen:

Public Sub DatensatzgruppeOeffnen_Recordset()

    Dim db As DAO.Database
    Dim rstUngefiltert As DAO.Recordset2
    Dim rstGefiltert As DAO. Recordset2

    Set db = CurrentDb
    Set rstUngefiltert = db.OpenRecordset("tblMitarbeiter", dbOpenDynaset)

    rstUngefiltert.Filter = "Nachname LIKE 'A*'"

    Set rstGefiltert = rstUngefiltert.OpenRecordset

    With rstGefiltert
        'etwas mit dem Recordset machen
    End With

    rstGefiltert.Close
    rstUngefiltert.Close

    Set rstGefiltert = Nothing
    Set rstUngefiltert = Nothing
    Set db = Nothing

End Sub

Listing 9.22: OpenRecordset auf Basis eines bestehenden Recordsets

Was Sie alles mit Recordsets anstellen können, erfahren Sie in Abschnitt 9.7, »Daten bearbeiten mit dem Recordset- und dem Recordset2- Objekt«. Dort finden Sie auch weitere Praxisbeispiele für den Aufruf der OpenRecordset-Methode.

Beispiel: Öffnen eines Recordsets auf Basis eines QueryDef-Objekts

Das Öffnen einer Datensatzgruppe auf Basis eines QueryDef (Objektbezeichnung für die in der Datenbank gespeicherten Abfragen) erfolgt prinzipiell wie bei Verwendung eines Recordsets als Basis:

Public Sub DatensatzgruppeOeffnen_QueryDef()
    ...
    Dim qdf As QueryDef
    ...
    Set qdf = db. QueryDefs("qryMitarbeiter")
    Set rst = qdf. OpenRecordset(dbOpenDynaset)

    With rst
        'etwas mit dem Recordset machen
    End With
    ...
    Set qdf = Nothing

End Sub

Listing 9.23: Öffnen eines Recordsets auf Basis eines QueryDef-Objekts

Theoretisch hätten Sie hier auch direkt auf die Abfrage zugreifen können:

Set rst = db.OpenRecordset("qryMitarbeiter", dbOpenDynaset)

Interessant wird es, wenn die Abfrage einen Parameter wie in Abbildung 9.10 enthält. Das Erstellen eines Recordsets auf Basis dieser Abfrage löst dann eine Fehlermeldung aus, die etwa folgendermaßen lautet: »Es wurde 1 Parameter erwartet, aber nur 0 übergeben.« Abhilfe schafft die Parameters-Auflistung des QueryDef-Objekts.

Dieses enthält die in der Abfrage festgelegten Parameter. Weist man allen Parametern einen Wert zu, läuft die Routine ohne Fehler durch.

Abbildung 9.10: Abfrage mit Parameter

Public Sub DatensatzgruppeOeffnen_QueryDef_Parameter()
    ...
    Dim prm As DAO. Parameter
    ...
    Set qdf = db.QueryDefs("qryMitarbeiter")
    Set prm = qdf. Parameters("Nachname eingeben")

    prm. Value = "Wurst"

    Set rst = qdf.OpenRecordset(dbOpenDynaset)
    With rst
        'etwas mit dem Recordset machen
    End With
    ...
End Sub

Listing 9.24: Erzeugen eines Recordsets aus einem QueryDef-Objekt mit Parametern

Nächster Abschnitt:

9.6.14 Ausführen von Aktionsabfragen

© 2006-2008 André Minhorst Alle Rechte vorbehalten.