Ich versuche Access integrierte msgbox über die Eingabe von doppelten Datensätzen zu vermeiden, indem Sie Einträge vor dem Update-Ereignis überprüfen. Code funktioniert, aber ein großes Problem - Sie können diese Datensätze nicht mehr bearbeiten. Jeder Weg, beides zu erreichen - erlauben Bearbeitungen und vermeiden Access msgbox?Zugriff auf VBA - doppelte Eingabe verhindern
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("MyTable", dbOpenDynaset)
If Data_Changed Then 'Variable of Boolean that is set to True in Dirty event
If Not IsNull(ID_Field) Then
If MsgBox("You have done changes. you wish to save? ?" & vbCrLf & vBCrLf & "Click Yes for saving changes or NO for Undoing changes ! " & _
, vbQuestion + vbOKCancel + vbDefaultButton1) = vbOK Then
rs.FindFirst "ID = " & Me.ID_Field
If Not rs.NoMatch Then
Cancel = True
MsgBox "Error. You cannot add another record with same ID!", vbCritical
DoCmd.RunCommand acCmdUndo
Exit Sub
End If
Else
DoCmd.RunCommand acCmdUndo
End If
Else
MsgBox "Error. you cannot save record with blank ID !", vbCritical
DoCmd.SetWarnings False
If Me.Dirty Then Me.Undo
DoCmd.SetWarnings True
Exit Sub
End If
Me.ID_Field.Locked = True
Me.Other_Field.Locked = True
End If
End Sub
Ich sehe. Ist Ihr 'ID_Field' der Primärschlüssel? Normalerweise sollten PKs für den Benutzer unsichtbar sein und definitiv nicht vom Benutzer bearbeitet werden können. Wie Sie herausgefunden haben, schafft es Probleme. Wenn es das PK ist, gibt es einen Grund, warum Benutzer es bearbeiten können? Wenn nicht, können Sie den PK verwenden, um den aktuellen Datensatz zu identifizieren und ihn von Ihrer Suche auszuschließen. – Andre
@Andre, nein. ID_Field ist kein Primärschlüssel. Und PK ist für den Benutzer unsichtbar. Aber sowohl die ID als auch ID_Field (die einen anderen Namen hat - das habe ich vermasselt) haben den Index auf Keine Duplikate gesetzt. Die Änderung von Id_Field in Indexed No ändert jedoch nichts. – LuckyLuke82
Wie kann ich den Datensatz von der Suche ausschließen, aber den Code beibehalten Wenn ein neuer Datensatz mit demselben Id_Field eingegeben wird? – LuckyLuke82