Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verwenden Sie die Requery-Methode für ein Recordset-Objekt vom Typ dynaset oder Momentaufnahme, wenn Sie die zugrunde liegende Abfrage nach dem Ändern eines Parameters erneut ausführen möchten. Dies ist praktischer, als ein neues Recordset zu öffnen, und es wird schneller ausgeführt.
Im folgenden Codebeispiel wird ein Recordset-Objekt erstellt und an eine Funktion übergeben, die die CopyQueryDef-Methode verwendet, um die entsprechende SQL-Zeichenfolge zu extrahieren. Anschließend wird der Benutzer aufgefordert, der Abfrage eine zusätzliche Beschränkungsklausel hinzuzufügen. Die Requery-Methode im Code wird zum Ausführen der geänderten Abfrage verwendet.
Sub AddQuery()
Dim dbsNorthwind As DAO.Database
Dim qdfSalesReps As DAO.QueryDef
Dim rstSalesReps As DAO.Recordset
On Error GoTo ErrorHandler
Set dbsNorthwind = CurrentDb
Set qdfSalesReps = dbsNorthwind.CreateQueryDef("SalesRepQuery")
qdfSalesReps.SQL = "SELECT * FROM Employees WHERE Title = " & _
"'Sales Representative'"
Set rstSalesReps = qdfSalesReps.OpenRecordset()
' Call the function to add a constraint.
AddQueryFilter rstSalesReps
' Return database to original.
dbsNorthwind.QueryDefs.Delete "SalesRepQuery"
rstSalesReps.Close
qdfSalesReps.Close
dbsNorthwind.Close
Set rstSalesReps = Nothing
Set qdfSalesReps = Nothing
Set dbsNorthwind = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
Sub AddQueryFilter(rstData As Recordset)
Dim qdfData As DAO.QueryDef
Dim strNewFilter As String
Dim strRightSQL As String
On Error GoTo ErrorHandler
Set qdfData = rstData.CopyQueryDef
' Try "LastName LIKE 'D*'".
strNewFilter = InputBox("Enter new criteria")
strRightSQL = Right(qdfData.SQL, 1)
' Strip characters from the end of the query,
' as needed.
Do While strRightSQL = " " Or strRightSQL = ";" Or _
strRightSQL = vbCR Or strRightSQL = vbLF
qdfData.SQL = Left(qdfData.SQL, Len(qdfData.SQL) - 1)
strRightSQL = Right(qdfData.SQL, 1)
Loop
qdfData.SQL = qdfData.SQL & " AND " & strNewFilter
rstData.Requery qdfData 'Requery the Recordset.
rstData.MoveLast 'Populate the Recordset.
' "Lastname LIKE 'D*'" should return 2 records.
MsgBox "Number of records found: " & rstData.RecordCount & "."
qdfData.Close
Set qdfData = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
Hinweis
Um die Requery-Methode verwenden zu können, muss die Restartable-Eigenschaft des Recordset-Objekts auf True festgelegt werden. Für die Restartable-Eigenschaft ist immer True festgelegt, wenn das Recordset-Objekt aus einer Abfrage erstellt wurde, die keine Kreuztabellenabfrage für Tabellen in einer Access-Datenbank ist. Es ist nicht möglich, SQL-Pass-Through-Abfragen neu zu starten. Abfragen für verknüpfte Tabellen in einem anderen Datenbankformat können mitunter neu gestartet werden. Ob eine Abfrage für ein Recordset-Objekt erneut ausgeführt werden kann, können Sie anhand der Restartable-Eigenschaft ermitteln.
Support und Feedback
Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.