我已经编写了一个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数据库连接总是有可能损坏。
在前端和后端之间保持持久连接是否会增加数据库损坏的风险?
答案 0 :(得分:1)
像往常一样,没有上下文的信息太少了吗?
持久连接永远不会导致损坏。
始终记得在完成工作后关闭Microsoft Access数据库连接。
是的,但是您的持久连接永远不会做任何工作!!!
因此,如果编写一些代码来打开表,请执行一些工作,然后关闭该记录集和连接。这与使连接保持打开状态的代码有关。该连接永远不会做任何工作,也永远不会更新任何数据-因此,该建议在这里不适用。
所以,是的,您最肯定要清理更新代码,并说打开一个表的例程可以工作,然后应按建议将其关闭。但是对于只是坐在那里的连接却什么也没做却没有任何作用?它不会导致损坏,如果有的话,它将减少损坏。
一如既往,没有上下文的一点信息会变得更糟,然后根本没有这些信息。所以,我向你借了一根绳子?好吧,我没有提到你的牛被绑在那根绳子上了!!!因此,这里的上下文很重要。
因此,所读内容应真实地说:
请勿打开正在做有用工作的连接。做您的更新或其他操作,然后在完成后整理并关闭。但是,建议使用零代码来处理一些打开持久连接并执行零工作的代码,因此在完成工作后要整理和关闭的代码为零。因此,持久连接不做任何工作,也不做任何更新,因此没有任何清理余地,并且具有零功能,可以使未决的磁盘写操作(表写操作)保持打开状态,并且在Access崩溃时也不会完成。