Compartir a través de


Propiedad Recordset.Bookmark (DAO)

Se aplica a: Access 2013, Office 2013

Establece o devuelve un marcador que identifica de forma única el registro actual en una objeto Recordset.

Sintaxis

expression .Bookmark

expression Variable que representa un objeto Recordset.

Comentarios

Para un objeto Recordset basado por completo en las tablas del motor de base de datos de Microsoft Access, el valor de la propiedad Bookmarkable es True y puede utilizar la propiedad Bookmark con ese Recordset. Sin embargo, puede que otros productos de base de datos no admitan marcadores. Por ejemplo, no se pueden usar marcadores en un objeto Recordset basado en una tabla vinculada de Paradox que no tenga una clave principal.

Cuando se crea o se abre un objeto Recordset, cada registro tiene ya un marcador único. Puede guardar el marcador para el registro actual mediante la asignación del valor de la propiedad Bookmark a una variable. Para volver rápidamente a ese registro en cualquier momento después de moverse a un registro distinto, establezca la propiedad Bookmark de los objetos Recordset en el valor de dicha variable.

No hay límite en el número de marcadores que se pueden establecer. Para crear un marcador para un registro distinto del registro actual, vaya el registro deseado y asigne el valor de la propiedad Bookmark a una variable String que identifique ese registro.

Para asegurarse de que el objeto Recordset admite marcadores, compruebe el valor de su propiedad Bookmarkable antes de usar la propiedad Bookmark. Si la propiedad Bookmarkable es False, el objeto Recordset no admite marcadores y el uso de la propiedad Bookmark produce un error capturable.

Si usa el método Clone para crear una copia de un objeto Recordset, la configuración de la propiedad Bookmark de los objetos Recordset original y duplicado es idéntica y se puede usar indistintamente. Sin embargo, no se pueden usar marcadores de distintos objetos Recordset indistintamente, incluso si se crearon mediante el mismo objeto o la misma instrucción SQL.

Si establece la propiedad Bookmark en un valor que representa un registro eliminado, se producirá un error capturable.

El valor de la propiedad Bookmark no es el mismo que el número de registro.

Ejemplo

Este ejemplo usa las propiedades Bookmark y Bookmarkable para que el usuario pueda marcar un registro en un Recordset y volver a él más adelante.

    Sub BookmarkX() 
     
     Dim dbsNorthwind As Database 
     Dim rstCategories As Recordset 
     Dim strMessage As String 
     Dim intCommand As Integer 
     Dim varBookmark As Variant 
     
     Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
     Set rstCategories = _ 
     dbsNorthwind.OpenRecordset("Categories", _ 
     dbOpenSnapshot) 
     
     With rstCategories 
     
     If .Bookmarkable = False Then 
     Debug.Print "Recordset is not Bookmarkable!" 
     Else 
     ' Populate Recordset. 
     .MoveLast 
     .MoveFirst 
     
     Do While True 
     ' Show information about current record and get 
     ' user input. 
     strMessage = "Category: " & !CategoryName & _ 
     " (record " & (.AbsolutePosition + 1) & _ 
     " of " & .RecordCount & ")" & vbCr & _ 
     "Enter command:" & vbCr & _ 
     "[1 - next / 2 - previous /" & vbCr & _ 
     "3 - set bookmark / 4 - go to bookmark]" 
     intCommand = Val(InputBox(strMessage)) 
     
     Select Case intCommand 
     ' Move forward or backward, trapping for BOF 
     ' or EOF. 
     Case 1 
     .MoveNext 
     If .EOF Then .MoveLast 
     Case 2 
     .MovePrevious 
     If .BOF Then .MoveFirst 
     
     ' Store the bookmark of the current record. 
     Case 3 
     varBookmark = .Bookmark 
     
     ' Go to the record indicated by the stored 
     ' bookmark. 
     Case 4 
     If IsEmpty(varBookmark) Then 
     MsgBox "No Bookmark set!" 
     Else 
     .Bookmark = varBookmark 
     End If 
     
     Case Else 
     Exit Do 
     End Select 
     
     Loop 
     
     End If 
     
     .Close 
     End With 
     
     dbsNorthwind.Close 
     
    End Sub 

En este ejemplo se utiliza la propiedad LastModified para mover el puntero de registros actual a ambos registros, al que se ha modificado y al que se ha creado recientemente.

    Sub LastModifiedX() 
     
     Dim dbsNorthwind As Database 
     Dim rstEmployees As Recordset 
     Dim strFirst As String 
     Dim strLast As String 
     
     Set dbsNorthwind = OpenDatabase("Northwind.mdb") 
     Set rstEmployees = _ 
     dbsNorthwind.OpenRecordset("Employees", _ 
     dbOpenDynaset) 
     
     With rstEmployees 
     ' Store current data. 
     strFirst = !FirstName 
     strLast = !LastName 
     ' Change data in current record. 
     .Edit 
     !FirstName = "Julie" 
     !LastName = "Warren" 
     .Update 
     ' Move current record pointer to the most recently 
     ' changed or added record. 
     .Bookmark = .LastModified 
     Debug.Print _ 
     "Data in LastModified record after Edit: " & _ 
     !FirstName & " " & !LastName 
     
     ' Restore original data because this is a demonstration. 
     .Edit 
     !FirstName = strFirst 
     !LastName = strLast 
     .Update 
     
     ' Add new record. 
     .AddNew 
     !FirstName = "Roger" 
     !LastName = "Harui" 
     .Update 
     ' Move current record pointer to the most recently 
     ' changed or added record. 
     .Bookmark = .LastModified 
     Debug.Print _ 
     "Data in LastModified record after AddNew: " & _ 
     !FirstName & " " & !LastName 
     
     ' Delete new record because this is a demonstration. 
     .Delete 
     .Close 
     End With 
     
     dbsNorthwind.Close 
     
    End Sub