在将记录插入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
这样做的工作,因为它不写入记录。但是(对于在问题中没有指定这个,但是保存按钮实际上是保存并关闭),所以,根据您的建议,显示该消息,然后表单关闭,我可以阻止这种情况发生吗? – user1936588
那么,在关闭它之前你可以检查'Me.Dirty'(如果记录已经保存,它应该是'True',否则'False')。但是很难说不知道完整的代码 –
对不起,意思是说反向(如果记录已保存,则'Me.Dirty'应该为'False') –