我有一个非常标准的设置,可以在几乎100%的时间内完美运行。有一个窗体(frmLeaveRequest),其中有一个表作为记录源(tblLeave)。该表格严格用于输入新数据。您无法查看/编辑/删除现有记录。
此表单具有几个用于数据输入的绑定字段(字符串,整数和日期)和一个Submit按钮。在Form_Load事件上,将运行以下操作转到新记录:
DoCmd.GoToRecord acDataForm, Me.Name, acNewRec
单击“提交”按钮时,运行的相关代码段为:
blnGood = True
DoCmd.GoToRecord , , acNewRec
blnGood = False
在Form_BeforeUpdate事件中,有以下代码:
If Me.Dirty = True And blnGood = False Then
Cancel = True
End If
如果一切都很好,则会使用新的AutoNumber主键和表单中的所有数据创建一条新记录(验证数据等涉及的VBA明显更多,但所有这些都可以正常工作)。 / p>
使用该数据库几个月后,我们才有了该表单的第一个实例,导致创建了重复的记录(仍然具有唯一键)。它发生在两个不同的用户上。这些用户在其工作站上使用自己的前端文件副本,这些副本链接到服务器上的后端。
我没有确切的记录添加时间的记录,但是基于键,看来这可能是因为记录是同时添加(或足够接近)而发生的。当按其键顺序查看这四个记录时,将交替显示用户(用户1记录1,用户2记录1,用户1记录2,用户2记录2)。同样,每个“记录2”只是带有新键的“记录1”的副本。 4个唯一键按顺序排列(268、269、270、271)。我知道每个用户都不会两次提交数据,因为每个提交者都会发送一封电子邮件(其他vba内容的一部分)。
所以,我的问题是:我的原因理论是否合理,有什么方法可以解决或预防它?我目前不检查重复记录,因为通常这不是问题。即使这样,我不确定在这种情况下是否会有所帮助。所有重复检查将在保存之前通过,然后添加记录。如果某种原因导致记录被添加两次,那么我认为它不会受到此类检查的影响。