گام اول این هست که ببینیم چنین رکوردی داریم یا نه،
و بعد با یک پیغام مناسب به کاربر خبر بدیم.
برای جستجو کافی هست از متد findfirst رکوردست استفاده کنیم که به مراتب از dlookup سریعتر هست.
ولی دامنه جستجو رو به همه رکوردها به جز رکورد فعلی محدود میکنیم.
همچنین به روال منطقی بجای رکوردست فرم از recordsetclone اون استفاده میکنیم.
Option Compare Database
Option Explicit
Const WHR = "[ID]<> @ID AND [FirstName]=""@FN"" AND LastName=""@LN"" AND [DepartmentID]=@DID"
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Criteria As String
Criteria = Replace(WHR, "@ID", Me.ID)
Criteria = Replace(Criteria, "@FN", Me.FirstName)
Criteria = Replace(Criteria, "@LN", Me.LastName)
Criteria = Replace(Criteria, "@DID", Me.DepartmentID)
With Me.RecordsetClone
.FindFirst Criteria
If Not .NoMatch Then
Cancel = True
If MsgBox( _
Prompt:="ID=" & !ID & vbCrLf & _
"First Name=" & !FirstName & vbCrLf & _
"Last Name=" & !LastName & vbCrLf & _
"Birth Date=" & !BirthDate & vbCrLf & _
"Department=" & DLookup("Department", "Departments", "DepartmentID=" & !DepartmentID) & vbCrLf & _
"Job Title=" & DLookup("JobTitle", "JobTitles", "JobID=" & !JobID) & vbCrLf & vbCrLf & _
"Drop Changes ?", _
Buttons:=vbExclamation + vbYesNo, _
Title:="Duplicate Record") = vbYes Then
Me.Undo
End If
End If
End With
End Sub