Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Unterformular in Register Speichern und Me.Undo

Begonnen von Frank77, Februar 07, 2012, 12:55:21

⏪ vorheriges - nächstes ⏩

Frank77



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
Selbstständig = Selbst und Ständig

database

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.

Frank77

#2
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
Selbstständig = Selbst und Ständig

database

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

Frank77

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
Selbstständig = Selbst und Ständig