Почему моя база данных Access не актуальна, когда я считал ее из другого процесса?

Согласно документации save_model , путь также может быть объектом h5py.File, и в документации по h5py есть пример файлов в памяти . ]

5
задан Daniel Rikowski 28 January 2009 в 10:23
поделиться

3 ответа

Просто предположение, но я мог бы быть то, вследствие того, что Реактивный двигатель показывает кэш считывания и ленивые записи:

Как реализовать многопользовательские пользовательские счетчики в Jet 4.0 и ADO 2.1

"Microsoft Jet имеет кэш считывания, который обновляется каждый PageTimeout миллисекунды (значение по умолчанию составляет 5 000 мс = 5 секунд). Это также имеет механизм ленивой записи, который воздействует на отдельный поток к основной обработке и таким образом пишет изменения в диске асинхронно. Эти два механизма помогают выполнению повышения, но в определенных ситуациях, которые требуют высокого параллелизма, они могут создать проблемы".

Статья предлагает использовать метод RefreshCache Струи, и установить Струйный OLEDB:Transaction Передают Режим 1 миллисекунде (одно преимущество для ADO по ДАО для Струи состоит в том, что можно изменить эту установку, не изменяя значение в реестре).

P.S. необходимо полагать, что база данных Access редактирования (.mdb) упоминает 'Струю' вместо этого и использование 'Струйного' тега также, иначе Вы получите комментарий от определенного ТАК пользователь, который привередлив об этих вещах :)

7
ответ дан 14 December 2019 в 01:19
поделиться

Эта статья Microsoft Knowledge Base объясняет, как сделать это.

Вот выборка с примером кода. Код использует два соединения от одного процесса, таким образом, необходимо вытянуть часть чтения во второй процесс.

  1. Устройство записи должно запустить транзакцию, с помощью Соединения ADO. BeginTrans, до записи данных.
  2. Писатель должен сделать обновления базы данных и затем фиксировать транзакцию (использующий Соединение ADO. CommitTrans).
  3. Читатель должен назвать JRO.JetEngine. Передача RefreshCache в он - соединение до попытки считать данные.

Обратите внимание, что JRO.JetEngine включен путем добавления ссылки на Microsoft Jet И Объекты Репликации 2.1 Библиотеки к проекту VB.

    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
3
ответ дан 14 December 2019 в 01:19
поделиться

Так как первый процесс является единственным процессом с MDB, открытым, это может быть немного лениво об обратной записи материала в файл. Даже после того, как Вы заканчивают процесс может быть задержка, пока ОС записывает выдающиеся страницы обратно, и это может произойти после того, как процесс сигнализировал, что это завершилось.

Моя рекомендация была бы, прекратить использовать Доступ, использовать Экспресс SQL Server 2008 года вместо этого.

-1
ответ дан 14 December 2019 в 01:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: