在将记录插入Access之前检查重复

问题描述:

我有一个表单,我不希望用户能够输入具有相同名称的联系人。在将记录插入Access之前检查重复

窗体上有一个保存按钮。要检查重复的那个按钮的代码部分是: -

If Me.DataEntry = False Then 
Else 
    'Check for duplicate contact 
    If DCount("[ContactID]", "tblContactsNew", "[first_name] = " & "'" & Me.FIRST_NAME & "'" & "And [Surname] = " & "'" & Me.SURNAME & "'") <> 0 Then 
     MsgBox "A contact with these details already exists:-" & vbCrLf, vbOKOnly + vbExclamation 
     End 
    End If 
End If 

这是之前: -

DoCmd.RunCommand acCmdSaveRecord 

如果计数<> 0,则显示的消息。但是,如果我然后单击我的取消按钮,仍然为重复添加一条记录。

的取消按钮的代码是: -

If Me.Dirty Then 
Me.Undo 
End If 
DoCmd.Close acForm, Me.Name 

我怎样才能防止被写入重复记录?

我会将所有代码迁移到表单Form_BeforeUpdate事件。

在你保存按钮的代码,你唯一需要的是DoCmd.RunCommand acCmdSaveRecord

然后,在你Form_BeforeUpdate事件:

If Me.DataEntry = False Then 
    Cancel = True 'Don't save the form I guess 
Else 
    'Check for duplicate contact 
    If DCount("[ContactID]", "tblContactsNew", "[first_name] = " & "'" & Me.FIRST_NAME & "'" & "And [Surname] = " & "'" & Me.SURNAME & "'") <> 0 Then 
     MsgBox "A contact with these details already exists:-" & vbCrLf, vbOKOnly + vbExclamation 
     Cancel = True 'Cancel the update 
     End Sub 
    End If 
End If 

您可以添加一个全球性的形式,其设置为True你取消按钮,不保存,如果它是True

+0

这样做的工作,因为它不写入记录。但是(对于在问题中没有指定这个,但是保存按钮实际上是保存并关闭),所以,根据您的建议,显示该消息,然后表单关闭,我可以阻止这种情况发生吗? – user1936588

+0

那么,在关闭它之前你可以检查'Me.Dirty'(如果记录已经保存,它应该是'True',否则'False')。但是很难说不知道完整的代码 –

+0

对不起,意思是说反向(如果记录已保存,则'Me.Dirty'应该为'False') –