Freigeben über


Database.OpenRecordset-Methode (DAO)

Gilt für: Access 2013 | Office 2013

Erstellt ein neues Recordset-Objekt und fügt es an die Recordsets-Auflistung an.

Syntax

Ausdruck.OpenRecordset (Name, Typ, Optionen, LockEdit)

Ausdruck Eine Variable, die ein Database -Objekt darstellt.

Parameter

Name

Erforderlich/optional

Datentyp

Beschreibung

Name

Erforderlich

String

Die Quelle der Datensätze für das neue Recordset. Die Quelle kann ein Tabellenname, ein Abfragename oder eine SQL-Anweisung sein, die Datensätze zurückgibt. Für Recordset -Objekte vom "table"-Typ in Microsoft Access-Datenbankmodul-Datenbanken kann die Quelle nur ein Tabellenname sein.

Type

Optional

Variant

Eine RecordsetTypeEnum-Konstante gibt den Typ des zu öffnenden Recordset an.

Hinweis: Wenn Sie ein Recordset in einem Microsoft Access-Arbeitsbereich öffnen und keinen Typ angeben, erstellt OpenRecordset, wenn möglich, ein tabellenartiges Recordset. If you specify a linked table or query, OpenRecordset creates a dynaset-type Recordset.

Optionen

Optional

Variant

Eine Kombination aus RecordsetOptionEnum-Konstanten, die Merkmale des neuen Recordset angeben.

Hinweis: Die Konstanten dbConsistent und dbInconsistentschließen sich gegenseitig aus, und die Verwendung beider verursacht einen Fehler. Das Bereitstellen eines LockEdit-Arguments, wenn Optionen die Konstante dbReadOnly verwendet, führt ebenfalls zu einem Fehler.

LockEdit

Optional

Variant

Eine LockTypeEnum-Konstante, die die Sperre für das Recordset bestimmt.

Hinweis: Sie können dbReadOnly im Options-Argument oder im LockedEdit-Argument verwenden, aber nicht in beiden. Wenn Sie es für beide Argumente verwenden, tritt ein Laufzeitfehler auf.

Rückgabewert

Recordset

Hinweise

Wenn der Benutzer beim Aktualisieren eines Datensatzes diesen Fehler erhält, sollte der Code den Inhalt des Felds aktualisieren und die geänderten Werte abrufen. Tritt der Fehler beim Löschen eines Datensatzes auf, sollte der Code die Daten des neuen Datensatzes anzeigen und eine Meldung darüber ausgeben, dass die Daten kürzlich geändert wurden. An dieser Stelle könnte der Code bestätigen lassen, dass der Benutzer den Datensatz wirklich löschen möchte.

Sie sollten auch die dbSeeChanges-Konstante verwenden, wenn Sie ein Recordset in einem ODBC-Arbeitsbereich mit verbundenem Microsoft Access-Datenbankmodul für eine Microsoft SQL Server 6.0-Tabelle (oder neuer) öffnen, die über eine IDENTITY-Spalte verfügt. Andernfalls kann ein Fehler auftreten.

Das Öffnen mehrerer Recordset-Objekte in einer ODBC-Datenquelle kann fehlschlagen, wenn die Verbindung durch einen vorherigen OpenRecordset-Aufruf ausgelastet ist. Das könnten Sie beispielsweise dadurch verhindern, dass Sie das Recordset-Objekt mithilfe der MoveLast-Methode vollständig auffüllen, sobald das Recordset-Objekt geöffnet wird.

Durch das Schließen eines Recordset mit der Close-Methode wird es automatisch aus der Recordsets-Auflistung gelöscht.

Hinweis

Wenn source auf eine SQL-Anweisung verweist, die aus einer Zeichenfolge besteht, die mit einem nicht ganzzahligen Wert verkettet ist, und die Systemparameter eine Nicht-US-Anweisung angeben. Dezimalzeichen wie ein Komma (z. B. strSQL = "PRICE > " & lngPrice und lngPrice = 125,50) tritt ein Fehler auf, wenn Sie versuchen, das Recordset zu öffnen. Der Grund ist, dass die Zahl bei der Verkettung mithilfe des Standarddezimalzeichens des Systems in eine Zeichenfolge umgewandelt wird und SQL nur für die USA gültige Dezimalzeichen akzeptiert.

Link zur Verfügung gestellt von: UtterAccess-Community. UtterAccess ist das führende Microsoft Access-Wiki und -Hilfeforum.

Beispiel

Das folgende Beispiel zeigt das Öffnen eines Recordset, das auf einer Parameterabfrage basiert.

Der Beispielcode stammt von:Microsoft Access 2010 Programmer's Reference.

    Dim dbs As DAO.Database
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset
    
    Set dbs = CurrentDb
    
    'Get the parameter query
    Set qdf = dbs.QueryDefs("qryMyParameterQuery")
    
    'Supply the parameter value
    qdf.Parameters("EnterStartDate") = Date
    qdf.Parameters("EnterEndDate") = Date + 7
    
    'Open a Recordset based on the parameter query
    Set rst = qdf.OpenRecordset()

Das folgende Beispiel zeigt das Öffnen eines Recordset, das auf einer Tabelle oder Abfrage basiert.

    Dim dbs As DAO.Database
    Dim rsTable As DAO.Recordset
    Dim rsQuery As DAO.Recordset
    
    Set dbs = CurrentDb
    
    'Open a table-type Recordset
    Set rsTable = dbs.OpenRecordset("Table1", dbOpenTable)
    
    'Open a dynaset-type Recordset using a saved query
    Set rsQuery = dbs.OpenRecordset("qryMyQuery", dbOpenDynaset)

Das folgende Beispiel zeigt das Öffnen eines Recordset, das auf einer SQL-Anweisung (Structured Query Language) basiert.

    Dim dbs As DAO.Database
    Dim rsSQL As DAO.Recordset
    Dim strSQL As String
    
    Set dbs = CurrentDb
    
    'Open a snapshot-type Recordset based on an SQL statement
    strSQL = "SELECT * FROM Table1 WHERE Field2 = 33"
    Set rsSQL = dbs.OpenRecordset(strSQL, dbOpenSnapshot)

Das folgende Beispiel zeigt das Verwenden der Filter-Eigenschaft zum Ermitteln der Datensätze, die in einem danach geöffneten Recordset enthalten sein sollen.

    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim rstFiltered As DAO.Recordset
    Dim strCity As String
    
    Set dbs = CurrentDb
    
    'Create the first filtered Recordset, returning customer records
    'for those visited between 30-60 days ago.
    Set rst = dbs.OpenRecordset(_ 
        "SELECT * FROM Customers WHERE LastVisitDate BETWEEN Date()-60 " & _
        "AND Date()-30 ORDER BY LastVisitDate DESC")
    
    'Begin row processing
    Do While Not rst.EOF
        
        'Retrieve the name of the first city in the selected rows
        strCity = rst!City
    
        'Now filter the Recordset to return only the customers from that city
        rst.Filter = "City = '" & strCity & "'"
        Set rstFiltered = rst.OpenRecordset
    
        'Process the rows
        Do While Not rstFiltered.EOF
            rstFiltered.Edit
            rstFiltered!ToBeVisited = True
            rstFiltered.Update
            rstFiltered.MoveNext
        Loop
    
        'We've done what was needed. Now exit
        Exit Do
        rst.MoveNext
       
    Loop
    
    'Cleanup
    rstFiltered.Close
    rst.Close
    
    Set rstFiltered = Nothing
    Set rst = Nothing