【发布时间】:2019-11-19 16:32:02
【问题描述】:
我遇到了写入冲突问题。不知道可能是什么原因。当多个用户使用 Access 数据库时会出现此问题。
下面是正在发生的事情的示意图。 (Main) Form 显示 Subform(其中一些数据显示来自 Table)。用户可以通过弹出的(Details) Form 双击一个名称以调出该个人的详细信息。如果进行了更改,用户可以保存详细信息(实际上,在关闭窗口时会弹出一个提示询问您是否要保存)。
关闭(Details) Form时的代码:
Private Sub Form_BeforeUpdate(Cancel As Integer)
' This procedure checks to see if the data on the form has
' changed. If the data has changed, the procedure prompts the
' user to continue with the save operation or to cancel it. Then
' the action that triggered the BeforeUpdate event is completed.
Dim ctl As Control
On Error GoTo Err_BeforeUpdate
' The Dirty property is True if the record has been changed.
If Me.Dirty Then
' Prompt to confirm the save operation.
If MsgBox("Do you want to save?", vbYesNo + vbQuestion, _
"Save Record") = vbNo Then
Me.Undo
End If
End If
Exit_BeforeUpdate:
Exit Sub
Err_BeforeUpdate:
MsgBox Err.Number & " " & Err.Description
Resume Exit_BeforeUpdate
End Sub
取自微软网站(我认为)。
我的数据结构是否有问题导致此问题?
如果需要更多信息,我可以编辑帖子以包含更多代码等。
编辑 1:反转 Subform 箭头。 Subform 只显示来自Table 的数据。
编辑 2:后端是 Access。从Subform打开(Details) Form:
Private Sub First_Name_DblClick(Cancel As Integer)
DoCmd.OpenForm "Details", , , "[First Name] = '" & Me![First Name] & "' and [Last Name] = '" & Me![Last Name] & "'"
End Sub
编辑 3:
查看(Main) Form 时,Subform 的源对象设置为Subform 的名称,我称之为QuerySF。 QuerySF 表单将Record Source 设置为Table。弹出窗口(Details) Form 的记录源设置为Table。我可以改为将 (Details) Form 的记录源设置为我的查询,但我尝试了这个并没有帮助。
在某处插入Requery 会有帮助吗?
我注意到每三次通过子表单打开(Details) Form 时会出现一次弹出窗口。
【问题讨论】:
-
用户可以对主子窗体上的数据进行修改吗?
-
你的后端是什么?访问、服务器还是全部都在一个数据库中? -- 通常如果你通过VBA修改数据并且之后不重新查询表单就会弹出这个错误。
-
另外,然后要打开另一个人的详细信息的代码是什么?
-
我无法复制此问题。禁用错误处理程序和单步调试。也许需要发布保存按钮代码。为什么不使用 ID 而不是名称?
-
正如 June7 所写的,这里没有任何东西可以解释这种行为。我的赌注仍然是在此过程中运行的 一些 代码(例如,在打开详细信息表单时)。甚至可能是数据宏之类的。