Ms access MS Access后端数据库损坏

Ms access MS Access后端数据库损坏,ms-access,connection,persistence,data-corruption,Ms Access,Connection,Persistence,Data Corruption,我已经编写了一个MS Access应用程序并拆分了数据库。为了提高网络上多个并发用户使用它时的性能(如建议的),前端使用以下例程创建到后端的持久连接: 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

我已经编写了一个MS Access应用程序并拆分了数据库。为了提高网络上多个并发用户使用它时的性能(如建议的),前端使用以下例程创建到后端的持久连接:

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
Public theOpenDb作为dao.Database
Public Sub-OpenTheDatabase(pfInit作为布尔值,可选数据库路径作为变量)
'打开数据库的句柄,并在应用程序运行的整个过程中保持其打开状态。
'Params:pfInit TRUE初始化(应用程序启动时调用)
'假关闭(应用程序结束时调用)
'来源:总视觉资源手册
作为字符串的Dim strMsg
如果是pfInit那么
出错时继续下一步
设置OpenB=OpenDatabase(databasePath)
如果Err.number>0,则
strMsg=“打开数据库时出现问题:”&databasePath&vbCrLf&_
“确保驱动器可用。”&vbCrLf&_
错误:“&Err.Description&”(&Err.number&”)
如果结束
错误转到0
如果strMsg“”则
MsgBox strMsg
如果结束
其他的
出错时继续下一步
关闭
设置暂停B=无
如果结束
端接头
我的一些用户报告在其后端数据库中反复收到“无法识别的数据库格式”错误。所有的数据库都可以通过压缩和修复来恢复,但是这个问题仍然让他们非常沮丧

我读到:

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


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

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

持久连接不会导致损坏

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

是的,但是你的持续连接从来没有做过任何工作

所以,如果您编写一些代码来打开一个表,做一些工作,然后关闭该记录集和连接。这与保持连接打开的代码无关。这种联系从来没有做过任何工作,也从来没有更新过任何数据——所以这个建议在这里不适用

所以,是的,您肯定希望清理更新代码和例程,这些例程说打开一个表,做一些工作,然后它应该像建议的那样关闭一些东西。但是对于一个只坐在那里,什么都不做,什么都不做的连接呢?它不会导致腐败,如果有什么影响的话,它会减少腐败

和往常一样,没有上下文的一点信息比没有上下文的信息更糟糕。我向你借了根绳子?嗯,我没提到你的母牛系在绳子上!!!所以,这里的背景很重要

因此,这本书真正应该说:


不要保持正在进行有用工作的连接处于打开状态。做你的更新或者其他什么,然后在完成后整理并关闭。但是,suggeest与某些代码无关,这些代码保持一个持久连接的打开状态,并且执行零工作,因此在完成工作后,有零需要整理和关闭。因此,持久性连接不做任何工作,不做任何更新,因此它没有任何东西需要清理,并且没有任何能力保持挂起的磁盘写入(表写入)打开和未完成的访问崩溃

在很多情况下,数据库可能会损坏。您可能有一个持久连接,但服务器是否重新启动过?MSAccess关闭数据库的过程非常复杂,重新启动服务器可能无法正确关闭应用程序。这只是一件需要考虑的事情。理想情况下,持久连接最适合访问数据库的时间。如果您有停机时间,比如说在工作时间之外,您应该正确关闭数据库,以避免由于服务器电源循环或甚至防病毒软件扫描而导致数据库损坏。我同意最好始终正确关闭数据库,但我不能保证安装我的软件的公司总是会发生这种情况。我想问的是,持久连接的存在是否会增加数据库损坏的可能性。如果是这样的话,那么删除持久连接代码对我来说可能是有意义的。Access DB损坏将一直存在,并且在有大量并发连接时更为普遍。我建议将数据存储在SQL数据库中。然后,可以对前端使用MSAccess。这样,如果它确实损坏,您就可以消除可能的数据丢失,只需重新安装前端。@Lisa way,可能是个愚蠢的问题,但我假设您客户的用户在本地使用他们的前端?@Rene是的,前端安装在每个用户的计算机上。谢谢您提供这样一个完整的答案。我怀疑你所说的是真的,但我想确保我并没有因为这种持续的联系而自食其果。我肯定会到别处去寻找问题的原因。问题是,你读到的建议实际上是好的建议,但它从来没有明确指出这个问题,因为好的建议不适用于持久性连接,也不适用于持久性连接。因此,这两种观点都代表了一种联系——它只是一种类型(持久性)没有做任何工作,因此不是可能的腐败来源。