Why is my Access database not up-to-date when I read it from another process?

后端 未结 3 1725
野趣味
野趣味 2020-12-19 11:56

In my application I do the follwing things:

  1. Open a Access database (.mdb) using Jet/ADO and VB6
  2. Clear and re-fill a table with new data
  3. Clos
3条回答
  •  别那么骄傲
    2020-12-19 12:20

    This Microsoft Knowledge Base article explains how to do it.

    Here's an excerpt with sample code. The code uses two connections from one process, so you need to pull the reading part into your second process.

    1. The writer must start a transaction, using ADO's Connection.BeginTrans, prior to writing the data.
    2. The writer must make the database updates and then commit the transaction (using ADO's Connection.CommitTrans).
    3. The reader must call JRO.JetEngine.RefreshCache passing in it's connection prior to attempting to read the data.

    Note that JRO.JetEngine is included by adding a reference to the Microsoft Jet And Replication Objects 2.1 Library to your VB project.

        Sub SyncReadDemo()
        Dim conn1 As New ADODB.Connection
        Dim conn2 As New ADODB.Connection
        Dim rs As New ADODB.recordset
        Dim JRO As New JRO.JetEngine
        Dim strConnect As String
        Dim i As Long
    
    
      ' Set up our connection string (requires a database named c:\db1.mdb).
        strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\db1.mdb"
    
        ' Open connection 1 and drop and re-create test table.
        conn1.CursorLocation = adUseServer
        conn1.Open strConnect
        On Error Resume Next
        conn1.Execute "drop table tmpTest", , _
            adExecuteNoRecords + adCmdText
        On Error GoTo 0
        conn1.Execute "create table tmpTest (id long)", , _
            adExecuteNoRecords + adCmdText
    
        ' Close connection 1 to flush the creation of table tmpTest. 
        conn1.Close
    
        ' Now open connection 1 and connection 2.
        conn1.Open strConnect
        conn2.Open strConnect
    
        ' Insert 10 records using connection 1.
        ' Note we must perform all writes inside of a transaction.
        conn1.BeginTrans
        For i = 1 To 10
            conn1.Execute "insert into tmpTest (id) values (1)", , _
                adExecuteNoRecords + adCmdText
        Next i
        conn1.CommitTrans
    
        ' Refresh cache for reader connection.
        JRO.RefreshCache conn2
        Set rs = conn2.Execute("select * from tmpTest", , adCmdText)
    
        ' Count records in our table (should be 10).
        i = 0
        While Not rs.EOF
            i = i + 1
            rs.MoveNext
        Wend
        rs.Close
    
        MsgBox "Read " & i & " records using different connections."
    
        conn1.Close
        conn2.Close
    
    End Sub
    

提交回复
热议问题