Ms access 在MS Access 2010 I';我试图忽略控件中的重复项

Ms access 在MS Access 2010 I';我试图忽略控件中的重复项,ms-access,ms-access-2010,Ms Access,Ms Access 2010,我想忽略表单上特定文本字段中的重复条目。例如,我有3个字段用于输入印章。如果此人扫描印章两次,它将忽略副本,并将焦点保持在字段上,直到输入不同的号码。我拼凑了一些适用于第一个和第二个条目的代码,但不适用于第三个条目。当我调试时,它似乎发现了一个重复的数字,即使我输入了一个不同的数字 Private Sub Seal2_AfterUpdate() If Seal2.Value = Seal1.Value Or Seal3.Value Then Seal2.Value = Null

我想忽略表单上特定文本字段中的重复条目。例如,我有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

您对
的处理是错误的。它在
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
此外,您似乎将焦点设置为一个字段,然后再设置另一个字段。你可能只想去其中一个,除非你试图在每一个事件中获得/失去焦点时触发/事件;然而,如果你这样做,你可能是在玩火

最后,您的if块可能希望如下所示:

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

最后,如果您发现必须扩展到3个字段之外,那么您可能需要采取一种稍微不同的方法,这种方法更具可扩展性。例如,在内存中建立一个列表,对其进行排序和过滤。但是对于3到4件物品,你可以不必担心你已经拥有了什么

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