重复项的DCount,如果不小心编辑它们,则不允许用户保留旧字段

时间:2016-01-29 16:34:44

标签: vba ms-access access-vba dcount

在我的字段上的BeforeUpdate事件中,我设置了一个dcount,以禁用SurveyID字段中的重复项。这很有效,除非在过去的记录中,用户开始意外地编辑他们的SurveyID并尝试取消(意外地选择SurveyID字段,开始输入,然后删除它并输入SurveyID)。它将SurveyID视为重复(即使它不是真的)并且不允许它们保留ID。我已经通过在此之后重置SurveyID来完成了一半的解决方法,所以如果他们在上述场景中,他们至少可以保留他们的ID。我真的想知道我的代码是否有办法防止这种情况发生。 SurveyId不是主键,因为它们可以使用两种不同的ID代码。也许是一个额外的逻辑说,如果表单中该记录中的主键与“复制”(又称自身)的主键匹配,那么它不会被复制处理?

这是我目前的代码

Private Sub SurveyID_BeforeUpdate(Cancel As Integer)
'checks for duplicates'
If DCount("SurveyID", "test", "SurveyID=" & Nz(Me.SurveyID, 0)) > 0 Then
    Beep
    MsgBox "The Survey ID number you have entered is a duplicate. Please double check that the number you entered is correct. If it is correct, please X."
    Me.SurveyID.Undo
    Cancel = True
End If
End Sub

2 个答案:

答案 0 :(得分:0)

您是否尝试将SurveyID设置为是(无重复)索引?只要Required也设置为No,它不应该允许您输入重复值,但如果您愿意,也可以将其留空。

您仍然可以在表单的On Error事件中捕获错误,以便显示友好的消息。

答案 1 :(得分:-1)

这正是为什么绑定表单是一个坏主意。永远不要将表单绑定到表格。撤销条目充其量是不可能的,并且绑定表单的工作方式是,只要更改字段,记录就会写入表中。是的,有一个撤消命令,但它不可靠。

从表单中取消绑定表,并编写更新记录(如果已存在)或在按下"提交"时写入新记录的代码。按钮。它需要更多编码并且需要更好地理解Access,但这是正确的方法。