Neuigkeiten:

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

Mobiles Hauptmenü

Datensatz speichern wenn Pflichtfelder OK

Begonnen von -Tom-, Dezember 07, 2013, 07:53:21

⏪ vorheriges - nächstes ⏩

-Tom-

Hallo,

Ich möchte einen Datensatz nur speichern wenn alle Pflichtfelder ausgefüllt sind.
Dazu mache ich eine Abfrage auf Änderungen und prüfe nun ob alle Pflichtfelder ausgefüllt sind. Wennn nicht kommt einem Meldung die darauf hinweist dass diese noch ausgefüllt werden müssen.
Das funktioniert soweit auch alles. Mein Problem ist jetzt folgendes:
User gibt Daten ein und verläßt das Ufo, dann kommt die Meldung "Änderungen speichern?" User klickt auf "Ja". Da aber nicht alle Pflichtfelder ausgefüllt wurden kommt die Meldung " Bitte alle erforderlichen Felder ausfüllen!".
Jetzt füllt der User nur einen Teil der Pflichtfelder aus und verläßt wieder das Ufo. Bei der jetzigen Frage ob er die Änderungen speichern will klickt er auf Nein.

Jetzt werden aber nur die Änderung rückgängig gemacht die nach der Meldung "Bitte alle erforderlichen Felder ausfüllen!" gemacht wurden. Die Daten die am Anfang eingegeben wurden sind gespeichert.

Wie kann ich diese Daten auch zurücksetzen?

Ich hoffen Ihr versteht mein Problem.

Hier die Datenbank falls von nöten -> Motordatenbank

Tom


Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen

bahasu

Hi,

denkbar wäre doch, das erste Speichern nur zuzulassen, wenn alle erforderlichen Felder ausgefüllt sind.
Dann wäre ein "Rückspeichern" von unvollständigen Infos nicht nötig.

Harald
Servus

-Tom-

Zitat von: bahasu am Dezember 07, 2013, 19:24:52
denkbar wäre doch, das erste Speichern nur zuzulassen, wenn alle erforderlichen Felder ausgefüllt sind.
Dann wäre ein "Rückspeichern" von unvollständigen Infos nicht nötig.

Das sind ja alles gebundene Formularfelder, also wird ja sofort alles gespeichert.
Und ich möchte nicht alle Felder zurücksetzen nur weil eins nicht ausgefüllt wurde, sonst muss man ja immer alles neu eingeben.

Tom
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen

bahasu

#3
hI;

Deine Routinen stehen an der falschen Stelle: nicht bei CLOSE
sondern bei "vor Aktualisierung"

Dort ist if me.dirty unnötig {wie schon zuvor erwähnt}

Eine Anweisung in der Art:
Cancel = CheckInput = FALSEgehört dorthin. Und auch noch:
If cancel then MsgBox "Bitte füllen Sie alle erforderlichen (roten) Felder aus!", vbInformation + vbOKOnly, "Hinweis"

Harald

PS die Gänsefüße bei "false" habe ich entfernt, da die Test-Routine einen Wahrheitswert liefert. Die Krücke über einen Text-String halte ich für suboptimal. Gilt zumindestens, wenn der Teil aus der anderen Anfrage umgesetzt wird.  ;D
Servus

-Tom-

Zitat von: bahasu am Dezember 08, 2013, 12:12:17
Deine Routinen stehen an der falschen Stelle: nicht bei CLOSE
sondern bei "vor Aktualisierung"

Verstehe ich das richtig ich muss die Routinen aus _BeforeUpdate nach  _Close verschieben?

Zitat von: bahasu am Dezember 08, 2013, 12:12:17
Dort ist if me.dirty unnötig {wie schon zuvor erwähnt}

Hab ich schon entfernt :)

Zitat von: bahasu am Dezember 08, 2013, 12:12:17
Eine Anweisung in der Art:
Cancel = CheckInput = FALSEgehört dorthin. Und auch noch:
If cancel then MsgBox "Bitte füllen Sie alle erforderlichen (roten) Felder aus!", vbInformation + vbOKOnly, "Hinweis"

Wo soll diese Anweisung hin?


Zitat von: bahasu am Dezember 08, 2013, 12:12:17
PS die Gänsefüße bei "false" habe ich entfernt, da die Test-Routine einen Wahrheitswert liefert. Die Krücke über einen Text-String halte ich für suboptimal. Gilt zumindestens, wenn der Teil aus der anderen Anfrage umgesetzt wird.  ;D

Hab ich auch schon geändert da es auf einem anderem System zu Problemen führte.

Tom
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen

bahasu

Zitat von: -Tom- am Dezember 09, 2013, 20:27:54
Zitat von: bahasu am Dezember 08, 2013, 12:12:17
Deine Routinen stehen an der falschen Stelle: nicht bei CLOSE
sondern bei "vor Aktualisierung"

Verstehe ich das richtig ich muss die Routinen aus _BeforeUpdate nach  _Close verschieben?

Zitat von: bahasu am Dezember 08, 2013, 12:12:17
Dort ist if me.dirty unnötig {wie schon zuvor erwähnt}

Hab ich schon entfernt :)

Zitat von: bahasu am Dezember 08, 2013, 12:12:17
Eine Anweisung in der Art:
Cancel = CheckInput = FALSEgehört dorthin. Und auch noch:
If cancel then MsgBox "Bitte füllen Sie alle erforderlichen (roten) Felder aus!", vbInformation + vbOKOnly, "Hinweis"

Wo soll diese Anweisung hin?


Zitat von: bahasu am Dezember 08, 2013, 12:12:17
PS die Gänsefüße bei "false" habe ich entfernt, da die Test-Routine einen Wahrheitswert liefert. Die Krücke über einen Text-String halte ich für suboptimal. Gilt zumindestens, wenn der Teil aus der anderen Anfrage umgesetzt wird.  ;D

Hab ich auch schon geändert da es auf einem anderem System zu Problemen führte.

Tom

Nein: Die Überprüfungsroutine auf unvollständige Daten darf nicht bei Close stehen, sie muss bei vor Aktualisierung stehen, damit Du eine Chance hast, vor dem Speichern darauf zu reagieren, wenn noch nicht vollständig.

Harald
Servus

-Tom-

Zitat von: bahasu am Dezember 09, 2013, 21:38:22
Nein: Die Überprüfungsroutine auf unvollständige Daten darf nicht bei Close stehen, sie muss bei vor Aktualisierung stehen, damit Du eine Chance hast, vor dem Speichern darauf zu reagieren, wenn noch nicht vollständig.

Aber die steht doch außer im Hfo immer im BeforeUpdate-Ereignis!
Das passiert z.B. im Ufo Getriebedaten. Wenn dort etwas geändert wird und so wie oben beschrieben verfahren wird, dann wird ein unvollständiger DS gespeichert.

Tom
Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen

bahasu

Hi Tom,

wenn Du den Inhalt Deiner Überprüfungsroutine dem Parameter Cancel zuweist (siehe weiter oben), wird das Speichern verhindert, sofern Cancel auf TRUE gesetzt worden war.
Cancel ist True, wenn "CheckInput = FALSE" gilt.

CANCEL ist als Parameter in der Kopfzeile des Ereignisses deklariert.

Harald
Servus

bahasu

#8
Moin,

und nun ein Beispiel für das Formular "frm01MotorErfassungUfoMechDat"

Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim CheckInput As String
Dim strMsgBox As Integer

If 1 = 2 Then   ' damit werden die folgenden Zeilen deaktiviert
   If Me.Dirty = True Then
       strMsgBox = MsgBox("Änderungen speichern?", vbQuestion + vbYesNo, "Änderungen speichern")
     
       If (strMsgBox = 6) Then 'JA wurde gedrückt
           CheckInput = MechDatenPruefen_neu()
       
           If (CheckInput = "FALSE") Then
               'DoCmd.Undo
               ' Registerwechsel unterbinden bis alle Felder ausgefüllt sind
               RegChgAllow = 0
               MsgBox "Bitte füllen Sie alle erforderlichen (roten) Felder aus!", vbInformation + vbOKOnly, "Hinweis"
               Exit Sub
           Else
               ' Registerwechsel erlauben
               RegChgAllow = 99
           End If
       Else
           ' Registerwechsel erlauben            RegChgAllow = 99
           Me.Undo
       End If
   End If

   ' ***************************************************************************************************
   
Else        ' hier beginnt die alternative Routine
   
   If MechDatenPruefen_neu() = True Then       ' alle Daten korrekt eingetragen
       Cancel = False
       
       ' Registerwechsel erlauben
       RegChgAllow = 99
   
   Else
       ' Registerwechsel unterbinden bis alle Felder ausgefüllt sind
       RegChgAllow = 0
       
       MsgBox "Bitte füllen Sie alle erforderlichen (roten) Felder aus!", vbInformation + vbOKOnly, "Hinweis"

       
       strMsgBox = MsgBox("Änderungen speichern?", vbQuestion + vbYesNo, "Änderungen speichern")
     
       If (strMsgBox = 6) Then 'JA wurde gedrückt
           ' Registerwechsel erlauben
           RegChgAllow = 99
            Cancel = False
       
       Else
           Cancel = True
       End If
   End If
End If      ' hier endet die alternative Routine
End Sub



Die Abfrage, ob die Daten auch bei Unvollständigkeit gespeichert werden sollen, habe ich drin gelassen, um die Möglichkeit aufzuzeigen, dass  trotzdem auf Nachfrage gespeichert werden kann {auch wenn ich das nicht für sinnvoll erachte}.


Harald
Servus

-Tom-

Computerprobleme??? -> http//www.weber-computerhilfe.de

Fordere keine Anerkennung!
Zeige was und man wird Dich kennen