在 MS Access 2010 中,我试图忽略控件中的重复条目

In MS Access 2010 I'm trying to ignore a duplicate entry in a control

我想忽略表单上特定文本字段中的重复条目。因此,例如,我有 3 个用于印章输入的字段。如果此人扫描印章两次,它将忽略重复项并将焦点保持在该字段上,直到输入不同的数字为止。我拼凑了一些适用于第一个和第二个条目但不适用于第三个条目的代码。当我调试时,它似乎找到了重复的数字,即使我输入的是不同的数字。

Private Sub Seal2_AfterUpdate()

If Seal2.Value = Seal1.Value Or Seal3.Value Then
    Seal2.Value = Null
    Seal1.SetFocus
    Seal2.SetFocus
End If

End Sub

Private Sub Seal3_AfterUpdate()

If Seal3.Value = Seal1.Value Or Seal2.Value Then
    Seal3.Value = Null
    Seal1.SetFocus
    Seal3.SetFocus
End If

End Sub

你对待 Or 是错误的。它在 Seal2.Value = Seal1.Value.

之后进行评估

所以你在那个 if 语句中所做的等同于

If (Seal3.Value = Seal1.Value) Or Seal2.Value Then

并且由于 Seal2 有一个值,它的计算结果为 True

你想要更像的东西:

If (Seal3.Value = Seal1.Value) Or (Seal3.Value = Seal2.Value) Then

此外,您似乎将重点放在一个字段上,然后又放在另一个字段上。你可能只想去一个,除非你在 get/lose 专注于每一个时试图开火 triggers/events;然而,如果你这样做,你可能是在玩火

最后你的 if 块可能看起来像这样:

If (Seal2.Value = Seal1.Value) Or (Seal2.Value = Seal3.Value) Then
    Seal2.Value = Null
    Seal2.SetFocus
End If

If (Seal3.Value = Seal1.Value) Or (Seal3.Value = Seal2.Value) Then
    Seal3.Value = Null
    Seal3.SetFocus
End If

最后,如果您发现必须扩展超过 3 个字段,您可能需要采用一种稍微不同的方法,这种方法的可扩展性更高。例如,在内存中建立一个列表,对其进行排序和过滤。但是对于 3 或 4 件物品,您可以摆脱已有的东西。