Microsoft KB Archive/191084

= PRB: Bookmarks Are Not Persisted or Marshalled =

Article ID: 191084

Article Last Modified on 3/2/2005

-

APPLIES TO


 * Microsoft ActiveX Data Objects 1.5
 * Microsoft ActiveX Data Objects 2.0
 * Microsoft ActiveX Data Objects 2.1 Service Pack 2
 * Microsoft ActiveX Data Objects 2.5
 * Microsoft ActiveX Data Objects 2.6
 * Microsoft ActiveX Data Objects 2.7
 * Microsoft Visual Basic 6.0 Enterprise Edition

-



This article was previously published under Q191084



SYMPTOMS
After a recordset has been reopened, once persisted to disk or marshalled across processes or computer boundaries, the bookmarks are no longer correct and they appear to be reset.



CAUSE
Bookmarks are not preserved when a recordset is persisted to a file with the Save method or when marshalled across processes or computer boundaries.



STATUS
This behavior is by design.



MORE INFORMATION
NOTE: This sample code was written for ADO 2.0 and later. ADO 1.5 does not support a Save method.

Steps to Reproduce Behavior
 Start Visual Basic. Add a project reference to the Microsoft ActiveX Data Objects Library.  Paste the following code in the default forms Load method: Dim oRs As ADODB.Recordset Set oRs = New ADODB.Recordset

With oRs .CursorLocation = adUseClient .CursorType = adOpenStatic .LockType = adLockBatchOptimistic .Fields.Append "c_col1", adChar, 2 .Fields.Append "c_col2", adChar, 2 .Open End With

oRs.AddNew oRs(0) = "1" oRs.Update oRs.AddNew oRs(0) = "2" oRs.Update oRs.AddNew oRs(0) = "3" oRs.Update oRs.MoveFirst

Debug.Print oRs.RecordCount Debug.Print oRs.Bookmark

'Delete the first row, move to the new first row, and check its book 'mark value. oRs.Delete oRs.MoveFirst Debug.Print oRs.Bookmark

'The Save method can not overwrite existing files. On Error Resume Next Kill "C:\mytmp.txt" On Error GoTo 0

oRs.Save "C:\mytmp.txt" oRs.Close Set oRs = Nothing

'Re-open persisted file and check the first row's bookmark. 'Prior to persisting the recordset the first row's bookmark was a 2.

Set oRs = New ADODB.Recordset oRs.Source = "C:\mytmp.txt" oRs.Open oRs.MoveFirst Debug.Print oRs.Bookmark Debug.Print oRs.RecordCount Debug.Print oRs(0)

Unload Me                    From the View menu, choose Immediate Window. Press the F8 key repeatedly to step through the code.</ol>

<div class="references_section">