Повреждение базы данных MS Access - PullRequest
0 голосов
/ 17 марта 2020

Я написал приложение MS-Access и разделил базу данных. Чтобы повысить производительность, когда она используется несколькими одновременными пользователями в сети (как предложено this ), внешний интерфейс создает постоянное соединение с внутренним сервером, используя следующую процедуру:

Public theOpenDb As dao.Database

Public Sub OpenTheDatabase(pfInit As Boolean, Optional databasePath As Variant)
  ' Open a handle to a database and keep it open during the entire time the application runs.
  ' Params  : pfInit   TRUE to initialize (call when application starts)
  '                    FALSE to close (call when application ends)
  ' Source  : Total Visual SourceBook

  Dim strMsg As String

  If pfInit Then
    On Error Resume Next
    Set theOpenDb = OpenDatabase(databasePath)
    If Err.number > 0 Then
      strMsg = "Trouble opening database: " & databasePath & vbCrLf & _
           "Make sure the drive is available." & vbCrLf & _
           "Error: " & Err.Description & " (" & Err.number & ")"
    End If

    On Error GoTo 0
    If strMsg <> "" Then
      MsgBox strMsg
    End If
  Else
    On Error Resume Next
    theOpenDb.Close
    Set theOpenDb = Nothing
  End If
End Sub

Некоторые из моих пользователей сообщают о неоднократном получении ошибок «нераспознанный формат базы данных» в своих внутренних базах данных. Все базы данных можно восстановить с помощью сжатия и восстановления, но эта проблема по-прежнему очень расстраивает их.

Я читаю здесь :

Не удерживать соединения open: Всегда не забывайте закрывать соединения с базой данных Microsoft Access после окончания работы. Соединения с базой данных открытого доступа всегда могут быть повреждены в случае потери сетевых соединений.

Повышает ли поддержание постоянного соединения между моим внешним и внутренним интерфейсами риск повреждения базы данных?

1 Ответ

1 голос
/ 18 марта 2020

Ну, как всегда, слишком мало информации без контекста?

Постоянное соединение НИКОГДА не вызывает повреждение.

Всегда не забывайте закрывать соединения с базой данных Microsoft Access после завершения работа.

Верно, но ваше постоянное соединение НИКОГДА не выполняет никакой работы !!!!

Итак, если вы пишете некоторый код для открытия таблицы, выполняете некоторую работу, то вы закрываете этот набор записей и соединение. Это имеет НУЛЕВОЙ НУЛЬ, чтобы сделать с кодом, который держит соединение открытым. Это соединение НИКОГДА не выполняет никакой работы и НИКОГДА не обновляет какие-либо данные - поэтому это предложение здесь не применимо.

Итак, да, вы, безусловно, хотите очистить свой код обновления и процедуры, которые говорят, что открыть таблицу , делай работу, а потом она должна закрыть вещи, как предложено. Но для соединения, которое просто сидит там и ничего не делает и не работает? Это не приведет к коррупции, и, если что-нибудь, это уменьшит коррупцию.

Как всегда, немного информации без контекста хуже, чем отсутствие этой информации вообще. Итак, я одолжил у тебя веревку? Ну, я не упомянул, что ваша корова была привязана к этой веревке !!! Итак, контекст здесь важен.

Итак, то, что читается, должно действительно сказать:

Не держите соединения открытыми, которые выполняют полезную работу. Сделайте свои обновления или что-то еще, а затем уберите и закройте после того, как вы закончите. Но этот suggeest имеет ZERO ZERO для некоторого кода, который сохраняет постоянное соединение и выполняет нулевую работу, и, следовательно, имеет ноль для очистки и закрытия после того, как он сделал это. Таким образом, постоянное соединение не выполняет никакой работы, не выполняет никаких обновлений, и, следовательно, ему нечего очищать, и оно имеет НУЛЕВЫЕ возможности сохранять открытую и незавершенную запись на диск (запись в таблицу) в случае доступа к cra sh.

...