Hallo!
Habe da folgendes Problem mit der Umsetzung des im Download Bereich geposteten Beispiels
Neuer Datensatz im Endlosformular oben
Ich habe das Ganze in einem Register Steuerelement umgesetzt nun habe ich folgendes Problem
Wenn der Datensatz gespeichert wird werden alle Felder vorher über eine Funktion fncPrüfen
Mit dem Rückgabewert True /False geprüft und der Satz gespeichert
Das Formular ist an eine Abfrage gebunden
Wenn ich den Datensatz nicht speichern möchte habe ich einen Button mit dem Sub belegt
Public Sub CmdLoeschen_Click
If Me.Dirty And Me.NewRecord Then
DoCmd.SetWarnings False
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
'Me.Undo <<<<<<<<<< gibt einen Fehler wenn 2 mal hintereinander verwendet wird
Me!TxtArtikel = ""
DoCmd.SetWarnings True
End If
End Sub
Beide Buttons sind in dem Unterformular enthalten
Wenn ich nun das Formular ausfülle und das Register Steuerelement wechsle wird der Datensatz gespeichert da das form ja gebunden ist leider auch wenn nicht alle Felder ausgefüllt sind
Es sei denn es ist ein Kombinationsfeld mit Ref-Integrität dann meckert Access von allein
Beim zurückblättern des Registers ist der Datensatz gespeichert allerdings auch wenn er fehlerhaft ist ersteht dann aber noch in Eingabe Unterformular und es ist dann abgestürzt
Wie kann ich diesen Fehler umgehen
Ich habe schon versucht den löschen Button beim klicken des Registers auszulösen aber das ändert nichts
Me.UfoWareneingangEingeben.Form. CmdLoeschen_Click
'Oder
Me! UfoWareneingangEingeben.Form.Undo
Ich dacht das ich es jetzt als ungebundenes form anlege und über das Öffnen eines Recorders oder eine SQL Insert Into Anweisung arbeite
Gruß Frank
Hallo,
warum verwendest du nicht das Ereignis BeforeUpdate des Formulars um auf Vollständigkeit der Felder zu prüfen und gibst dem Benutzer die Möglichkeit per MsgBox zu entscheiden ob der DS vervollständigt werden soll wenn nicht alle Felder ausgefüllt wurden (damit tritt dann Cancel = True in Kraft) oder nicht?
Im Fall von NEIN lässt du dann Me.Undo ausführen.
Den Button zum Verwerfen der Einträge kannst du dann weglassen.
Super!
Danke für die Idee
Gruß Frank
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Msg As String
If fncPruefen = True Then Exit Sub
If Me.Dirty And Me.NewRecord Then
Msg = "Der Wareneingang wurde nicht vervollständigt !" & vbCr & _
" " & vbCr & "Möchten sie das Anlegen des Wareneingangs " & vbCr & " abbrechen ?"
If MsgBox(Msg, vbCritical Or vbYesNo Or vbDefaultButton2, "Wareneingang nicht Vollständig !") = vbYes Then
DoCmd.SetWarnings False ' Ja
Me!CboArtIDWareEinzeln = ""
Me!TxtBisher.Value = ""
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
Cancel = True
Else
Cancel = True ' Nein
End If
End If
End Sub
Hallo Frank
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim Msg As String
If fncPruefen = True Then Exit Sub
If Me.Dirty And Me.NewRecord Then
If fncPruefen = False Then
Msg = "Der Wareneingang wurde nicht vervollständigt !" & vbCrLf & vbCrLf & _
" " & vbCr & "Möchten sie das Anlegen des Wareneingangs abbrechen ?"
If MsgBox(Msg, vbExclamation + vbYesNo + vbDefaultButton2, "Wareneingang nicht vollständig") = vbYes Then
DoCmd.SetWarnings False ' Ja
Me!CboArtIDWareEinzeln = ""
Me!TxtBisher.Value = ""
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
Cancel = True
Me.Undo
Else
Cancel = True ' Nein
End If
End If
End If
End Sub
Versuch mal so ...
vbExclamation habe ich reingenommen, da dieses bei einer erwartenden Benutzeraktion anzuwenden wäre. (Ist aber nur ein Vorschlag)
HTH
Hallo!
Danke für deinen Vorschlag
Das Me.Undo macht allerdings immer Probleme da es den Datensatz nicht wirklich abbricht
Da habe ich dann das weiter verwendet dann klappt es
DoCmd.DoMenuItem acFormBar, acEditMenu, acUndo, , acMenuVer70
Gruß Frank