Markieren einer Position in einem DAO-Recordset
Ein Lesezeichen ist ein vom System generiertes Bytearray, das jeden Datensatz eindeutig identifiziert. Die DAO Bookmark-Eigenschaft eines Recordset-Objekts ändert sich jedes Mal, wenn Sie zu einem neuen Datensatz wechseln. Um einen Datensatz zu identifizieren, wechseln Sie zu diesem Datensatz, und weisen Sie dann den Wert der DAO Bookmark-Eigenschaft einer Variablen vom Typ Variant zu. Um zum Datensatz zurückzukehren, legen Sie die DAO Bookmark-Eigenschaft auf den Wert der Variablen fest.
Das folgende Codebeispiel zeigt, wie Sie das Produkt finden, das den höchsten und geringsten Umsatz pro Kategorie erzielt, indem Sie ein Lesezeichen zum Speichern der aktuellen Datensatzposition verwenden. Mithilfe eines Lesezeichens können Sie andere Vorgänge für das Recordset-Objekt ausführen und dann zur gespeicherten Datensatzposition zurückkehren.
Sub GetProductStats()
Dim dbsNorthwind As DAO.Database
Dim rstProducts As DAO.Recordset
Dim rstCategories As DAO.Recordset
Dim varFirstMark As Variant
Dim varHighMark As Variant
Dim varLowMark As Variant
Dim curHighRev As Currency
Dim curLowRev As Currency
Dim strSQL As String
Dim strCriteria As String
Dim strMessage As String
On Error GoTo ErrorHandler
Set dbsNorthwind = CurrentDb
strSQL = "SELECT * FROM Products WHERE UnitsOnOrder >= 40 " & _
"ORDER BY CategoryID, UnitsOnOrder DESC"
Set rstProducts = dbsNorthwind.OpenRecordset(strSQL, dbOpenSnapshot)
If rstProducts.EOF Then Exit Sub
StrSQL = "SELECT CategoryID, CategoryName FROM Categories " & _
"ORDER BY CategoryID"
Set rstCategories = dbsNorthwind.OpenRecordset(strSQL, dbOpenSnapshot)
' For each category find the product generating the least revenue
' and the product generating the most revenue.
Do Until rstCategories.EOF
strCriteria = "CategoryID = " & rstCategories![CategoryID]
rstProducts.FindFirst strCriteria
curHighRev = rstProducts![UnitPrice] * rstProducts![UnitsOnOrder]
If Not rstProducts.NoMatch Then
' Set bookmarks at the first record containing the CategoryID.
varFirstMark = rstProducts.Bookmark
varHighMark = varFirstMark
varLowMark = varFirstMark
' Find the product generating the most revenue.
Do While rstProducts![CategoryID] = rstCategories![CategoryID]
If rstProducts![UnitPrice] * rstProducts![UnitsOnOrder] > _
curHighRev Then
curHighRev = rstProducts![UnitPrice] * _
rstProducts![UnitsOnOrder]
varHighMark = rstProducts.Bookmark
End If
rstProducts.MoveNext
Loop
' Move to the first record containing the CategoryID.
rstProducts.Bookmark = varFirstMark
curLowRev = rstProducts![UnitPrice] * rstProducts![UnitsOnOrder]
' Find the product generating the least revenue.
Do While rstProducts![CategoryID] = rstCategories![CategoryID]
If rstProducts![UnitPrice] * rstProducts![UnitsOnOrder] < _
curLowRev Then
curLowRev = rstProducts![UnitPrice] * _
rstProducts![UnitsOnOrder]
varLowMark = rstProducts.Bookmark
End If
rstProducts.MoveNext
Loop
End If
' Set high and low bookmarks to build the message string.
strMessage = "CATEGORY: " & rstCategories!CategoryName & _
vbCrLf & vbCrLf
rstProducts.Bookmark = varHighMark
strMessage = strMessage & "HIGH: $" & curHighRev & " " & _
rstProducts!ProductName & vbCrLf
rstProducts.Bookmark = varLowMark
strMessage = strMessage & "LOW: $" & curLowRev & " " & _
rstProducts!ProductName
MsgBox strMessage, , "Product Statistics"
rstCategories.MoveNext
Loop
rstProducts.Close
rstCategories.Close
dbsNorthwind.Close
Set rstProducts = Nothing
Set rstCategories = Nothing
Set dbsNorthwind = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
Ein Lesezeichen ist nützlich, wenn eine Methode fehlschlägt, da die aktuelle Datensatzposition nicht definiert ist. Die LastModified-Eigenschaft des Recordset-Objekts bietet eine gute Veranschaulichung der Verwendung eines Lesezeichens. Die LastModified-Eigenschaft gibt die Textmarke des letzten Datensatzes im Recordset-Objekt zurück, der hinzugefügt oder geändert werden soll. Um sie zu verwenden, legen Sie die DAO Bookmark-Eigenschaft wie folgt auf die LastModified-Eigenschaft fest.
rstCustomers.Bookmark = rstCustomers.LastModified
Dadurch wird der zuletzt hinzugefügte oder geänderte Datensatz als aktueller Datensatz angezeigt. Dies ist besonders beim Hinzufügen neuer Datensätze hilfreich, da in diesem Fall der Datensatz, der den Fokus hatte, bevor Sie den neuen Datensatz hinzugefügt haben, als aktueller Datensatz angezeigt wird. Mit der LastModified-Eigenschaft können Sie zum neu hinzugefügten Datensatz wechseln, falls die Anwendung dies erwartet. Wenn Sie ein Recordset-Objekt schließen, werden alle gespeicherten Textmarken ungültig.
Es ist nicht möglich, eine Textmarke aus einem Recordset-Objekt in einem anderen Recordset-Objekt zu verwenden, selbst wenn beide Recordset-Objekte auf derselben Tabelle oder Abfrage basieren. Sie können jedoch ein Lesezeichen für den Klon eines Recordsets verwenden, wie im folgenden Beispiel gezeigt.
Dim dbsNorthwind As DAO.Database
Dim rstOriginal As DAO.Recordset
Dim rstDuplicate As DAO.Recordset
Dim varBookMark As Variant
Set dbsNorthwind = CurrentDb
' Create the first Recordset.
Set rstOriginal = dbsNorthwind.OpenRecordset("Orders", dbOpenDynaset)
' Save the current record position.
varBookMark = rstOriginal.Bookmark
' Create a duplicate Recordset.
Set rstDuplicate = rstOriginal.Clone()
' Go to the same record.
rstDuplicate.Bookmark = varBookMark
rstOriginal.Close
Sie können auch die Bookmark-DAO-Eigenschaft für das Recordset-Objekt verwenden, das einem Formular zugrunde liegt. Mit dieser Eigenschaft kann im Code markiert werden, welcher Datensatz derzeit auf dem Formular angezeigt wird, bevor zu einem anderen Datensatz gewechselt wird. Sie können beispielsweise auf einem Formular mit Personalangaben eine Schaltfläche einfügen, auf die ein Benutzer klicken kann, um den Datensatz für den Vorgesetzten eines Angestellten anzuzeigen.
Hinweis
Dynasets, die auf bestimmten verknüpften Tabellen basieren, z. B. Paradox-Tabellen ohne Primärschlüssel, unterstützen weder Lesezeichen noch Recordset-Objekte vom Typ Forward-Only. Sie können ermitteln, ob ein bestimmtes Recordset-Objekt Lesezeichen unterstützt, indem Sie den Wert der Bookmarkable-Eigenschaft überprüfen.
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.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für