PRB: Bookmarks Are Not Persisted or Marshalled

ID: Q191084


The information in this article applies to:
  • ActiveX Data Objects (ADO), versions 1.5, 2.0, 2.1 SP2
  • Microsoft Visual Basic Enterprise Edition for Windows, version 6.0


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

  1. Start Visual Basic.


  2. Add a project reference to the Microsoft ActiveX Data Objects Library.


  3. Paste the following code in the default forms Load method:


  4. 
          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 
  5. From the View menu, choose Immediate Window.


  6. Press the F8 key repeatedly to step through the code.



REFERENCES

For additional information about ADO Recordset Properties, please see the following article in the Microsoft Knowledge Base:

Q185423 Most ADO Recordset Properties are not Marshalled

Additional query words:

Keywords : kbADO kbADO150 kbADO200 kbDatabase kbGrpVBDB kbGrpMDAC kbDSupport kbADO210sp2
Version : WINDOWS:1.5,2.0,2.1 SP2,6.0
Platform : WINDOWS
Issue type : kbprb


Last Reviewed: November 10, 1999
© 2000 Microsoft Corporation. All rights reserved. Terms of Use.