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