多くの場合、すべてのレコードをスクロールして値を比較することなく、Recordset 内を移動した後、特定のレコードに直接戻ると便利です。 たとえば、Find メソッドを使用してレコードを検索しようとしてもレコードが返されない場合、Recordsetのいずれかの末尾に自動的に配置されます。 プロバイダーがサポートしている場合は、場所に戻ることができるように、Find メソッドを使用する前にブックマークを使用して場所をマークできます。 ブックマークは、Recordset オブジェクト内のレコードを一意に識別する Variant 型の値です。
Recordset Filter メソッドでブックマークのバリアント配列を使用して、選択したレコードセットをフィルター処理することもできます。 この手法の詳細については、このセクションで後述する「レコードセット の操作」トピックの「結果のフィルター処理」を参照してください。
Bookmark プロパティを使用すると、レコードのブックマークを取得したり、Recordset オブジェクトの現在のレコードを有効なブックマークで識別されるレコードに設定したりできます。 次のコードでは、Bookmark プロパティを使用してブックマークを設定し、他のレコードに移動した後、ブックマークされたレコードに戻ります。 Recordset でブックマークがサポートされているかどうかを確認するには、Supports メソッドを使用します。
'BeginBookmarkEg
Dim varBookmark As Variant
Dim blnCanBkmrk As Boolean
objRs.Open strSQL, strConnStr, adOpenStatic, adLockOptimistic, adCmdText
If objRs.RecordCount > 4 Then
objRs.Move 4 ' move to the fifth record
blnCanBkmrk = objRs.Supports(adBookmark)
If blnCanBkmrk = True Then
varBookmark = objRs.Bookmark ' record the bookmark
objRs.MoveLast ' move to a different record
objRs.Bookmark = varBookmark ' return to the bookmarked (sixth) record
End If
End If
'EndBookmarkEg
サポート メソッドについては、後で詳しく説明します。
複製された Recordsetsの場合を除き、ブックマークは、同じコマンドが使用されている場合でも、作成された Recordset に固有です。 つまり、1 つの Recordset から取得した Bookmark を使用して、同じコマンドで開いた 2 つ目の Recordset の同じレコードに移動することはできません。