MS Access后端数据库损坏

时间:2020-03-16 22:02:08

标签: ms-access connection persistence data-corruption

我已经编写了一个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

我的一些用户报告说,他们的后端数据库中反复收到“无法识别的数据库格式”错误。这些数据库都可以通过压缩和修复来恢复,但是这个问题仍然使他们非常沮丧。

我读了here

不要使连接保持打开状态:始终记得在完成工作后关闭Microsoft Access数据库连接。如果网络连接丢失,则Open Access数据库连接总是有可能损坏。

在前端和后端之间保持持久连接是否会增加数据库损坏的风险?

1 个答案:

答案 0 :(得分:1)

像往常一样,没有上下文的信息太少了吗?

持久连接永远不会导致损坏。

始终记得在完成工作后关闭Microsoft Access数据库连接。

是的,但是您的持久连接永远不会做任何工作!!!

因此,如果编写一些代码来打开表,请执行一些工作,然后关闭该记录集和连接。这与使连接保持打开状态的代码有关。该连接永远不会做任何工作,也永远不会更新任何数据-因此,该建议在这里不适用。

所以,是的,您最肯定要清理更新代码,并说打开一个表的例程可以工作,然后应按建议将其关闭。但是对于只是坐在那里的连接却什么也没做却没有任何作用?它不会导致损坏,如果有的话,它将减少损坏。

一如既往,没有上下文的一点信息会变得更糟,然后根本没有这些信息。所以,我向你借了一根绳子?好吧,我没有提到你的牛被绑在那根绳子上了!!!因此,这里的上下文很重要。

因此,所读内容应真实地说:

请勿打开正在做有用工作的连接。做您的更新或其他操作,然后在完成后整理并关闭。但是,建议使用零代码来处理一些打开持久连接并执行零工作的代码,因此在完成工作后要整理和关闭的代码为零。因此,持久连接不做任何工作,也不做任何更新,因此没有任何清理余地,并且具有零功能,可以使未决的磁盘写操作(表写操作)保持打开状态,并且在Access崩溃时也不会完成。