Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Speicherabfrage bei Schaltfläche verhindern

Begonnen von Brallu, April 19, 2017, 21:35:03

⏪ vorheriges - nächstes ⏩

Brallu

Moin Gemeinde,
jetzt schon wieder ein Problem :-[
wie kann ich bei dem unten aufgeführtem Code verhindern das beim Button auch die Frage nach dem Speichern Ja / Nein kommt???
Hoffe das ist nicht so schwer aber ich komme nicht weiter :(

Gruß
Danny

Option Compare Database
Option Explicit
Private Sub Form_BeforeUpdate(Cancel As Integer)
'Immer wenn der Datensatz gespeichert werden soll egal wie wird gefragt was passieren soll Speichern Ja oder Nein
If Me.Dirty Then
    If vbNo = MsgBox("Möchten Sie Speichern?", vbQuestion + vbYesNo, "Frage") Then 'vbNo = Nein Schaltfläche
      Cancel = acDataErrContinue
      Me.Undo
   End If
End If
End Sub
_______________________________________________________________

'was kann ich hier einfügen das der Befehl oben aufgehoben ist und ich ohne Frage Speichern kann
Private Sub cmdPruefSpeichern_Click()

' Speichern eines neu eingegebenen oder eines bearbeiteten Auftrages
' mit Sicherheitsabfragen

If IsNull(PruefDatum) Then
   MsgBox "Bitte geben Sie ein Datum ein!"
   PruefDatum.SetFocus
   Exit Sub
End If

If IsNull(pruefPrüfErgebnis_F_ID) Then
   MsgBox "Bitte geben Sie ein Ergebnis ein!"
   pruefPrüfErgebnis_F_ID.SetFocus
   Exit Sub
End If

If IsNull(pruefPruef_F_ID) Then
   MsgBox "Bitte geben Sie eine Endzeit ein!"
   pruefPruef_F_ID.SetFocus
   Exit Sub
End If

    DoCmd.RunCommand acCmdSaveRecord
    cmdPruefSpeichern.Requery

End Sub

Beaker s.a.

Hallo Danny,
Gar nicht, - BeforeUpdate wird immer gefeuert, wenn du einen DS speichern
willst. Das ist ja der Sinn dieses Events.
Du könntest beim Button eine formularweite Variable setzen, und diese
BeforeUpdate auslesen.
If blnButton Then
   'dein jetziger Code
End If


ZitatcmdPruefSpeichern.Requery
Bekommst du da keinen LZ-Fehler? Eine Schaltfläche stellt IMO keine
Requery-Methode zur Vefügung.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

Einige Bemerkungen:
- Das Event Form_BeforeUpdate ist umfassender als Dein Commandbutton-Klick. Das wirkt auch, wenn das Formular geschlossen wird, ein Datensatz- oder Formularwechsel erfolgt usw. Daher gehört eine Prüfung auf Vollständigkeit von Pflichtangaben dort hinein, der Commandbutton ist auf das Wohlwollen des Users angewiesen und etwas hilflos.
- Rückfragen wie "Wollen Sie wirklich speichern" sind Kinderkram, also für ahnungslose User und für Programmierneulinge, die etwas sehen wollen, das sich bewegt. Ein Poweruser, der richtig arbeitet, wird die laufenden Rückfragen und den verursachenden Programmierer verfluchen.
- Gleichlautend sollte man auch fehlende Pflichtwerte sammeln und dazu eine (in Worten eine) Meldung dazu herausgeben. Wenn Dein User aus Versehen Deinen Commandbutton klickt und dann 5 ... 8 ... 15 Einzelmeldungen kommen, dass da etwas fehlt, wird sich seine Begeisterung auch in Grenzen halten.

Empfehlung:
- Entferne den Commandbutton. User kommen leicht ohne explizites Speichern klar.
- Verzichte aus das "Wollen Sie wirklich ...".
- Lege die Prüfung auf vollständige Pflichtfelder in das Form_BeforeUpdate.
Mit freundlichem Glück Auf!

Eberhard

MzKlMu

Hallo,
im Anhang findest Du ein Beispiel für Pflichtfelder das auch weitgehend den Vorschlägen von Eberhard folgt.
Hier kann noch nicht mal die DB beendet werden, ohne Prüfung.
Gruß Klaus

Brallu

#4
Ich danke euch  allen!!! :)
Die Hinweise und die Beispielbank sind super und helfen mir hoffentlich das Problem in den Griff zubekommen.

Damit ihr seht warum ich einen Speicherbutton brauche/möchte könntet ihr euch die Beispiel_DB unter
http://www.access-o-mania.de/forum/index.php?topic=22362.msg129776#msg129776
3 Fragen weiter unten mal anschauen.
Wenn ich es schaffe baue ich da alles ein und setze es nochmal hier rein.

Gruß und nochmals Danke,
Danny

Brallu

Hallo nochmal ich habe es leider nicht in den Griff bekommen :(

Habe die Gemeinsame Fehlerabfrage eingepflegt aber das Speichern verhindern wenn ich von UFO ins Hauptformular kilcke leider nicht.

Da ich VBA Anfänger bin stoße ich hier leider an meine Grenzen.
Der Button ist so genau das was ich brauche aber sonst soll nix gespeichert werden ohne frage ob gespeichert werden soll oder so.
Gibt es da eine Möglichkeit???

Habe die Demodatei nochmal angehängt!

Gruß
Danny


Option Compare Database
Option Explicit

'Speichert und kehrt zurück zur Auswahl
    Private Sub cmdPruefSpeichern_Click()
If fncPruefen = True Then
    DoCmd.RunCommand acCmdSaveRecord
    End If
End Sub

'wird eventuell nicht mehr gebraucht
Private Sub Form_AfterUpdate()
    Me.Parent.frmPruefPruefungUFO.Form.Requery      'aktualisiert FRM Prüfung damit neuer Datensatz möglich ist
    Me.Parent.frmMatPruefUebersichtUFO.Form.Requery 'aktualisieren des UFOs damit änderungen in UFO2 angezeigt werden können
End Sub


'hier wird für alle Geprüft ob daten in den Feldern vorhanden
Public Function fncPruefen()
Dim strFehlerText As String, intFehlerzahl As Integer: intFehlerzahl = 1
    fncPruefen = True
   
    'prüfen ob Datum leer oder falsch
    If IsNull(Me!PruefDatum) Or Not IsDate(Me!PruefDatum) Then
        strFehlerText = strFehlerText & intFehlerzahl & ". Datum fehlt oder ist ungültig" & vbCrLf
        intFehlerzahl = intFehlerzahl + 1
        fncPruefen = False
    End If
   
    'prüfen ob leer Optionsgruppe Prüfer
    If IsNull(Me!Rahmen67) Then
        strFehlerText = strFehlerText & intFehlerzahl & ". Es wurde keine Option gewählt" & vbCrLf
        intFehlerzahl = intFehlerzahl + 1
        fncPruefen = False
    End If
   
    'prüfen ob leer Optionsgruppe Prüfergebnis
    If IsNull(Me!Rahmen52) Then
        strFehlerText = strFehlerText & intFehlerzahl & ". Es wurde keine Option gewählt" & vbCrLf
        intFehlerzahl = intFehlerzahl + 1
        fncPruefen = False
    End If
   
    'prüfen ob Bemerkungen leer
    If IsNull(Me!pruefBemerkungen) Then
        strFehlerText = strFehlerText & intFehlerzahl & ". Es wurde keine Bemerkung angegeben" & vbCrLf
        intFehlerzahl = intFehlerzahl + 1
        fncPruefen = False
    End If
   
   
    If fncPruefen = False Then
        If intFehlerzahl = 2 Then strFehlerText = Mid(strFehlerText, 3)
        Select Case MsgBox("Es gibt noch " & intFehlerzahl - 1 & " Fehler" & vbCrLf & vbCrLf & strFehlerText _
        & vbCrLf & vbCrLf & "mit OK zurück, Abbrechen verwirft den begonnenen Datensatz", vbOKCancel)
            Case vbCancel
                Me.Undo
        End Select
    End If
End Function

Brallu

Hab es über die Abfrage Speichern Ja Nein jetzt so wie ich es Brauche. :D

Also nochmals Danke für eure Hilfe!!