Mai 19, 2022, 16:23:14

Neuigkeiten:

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


Doppelte Sicherheitsabfrage erstellen

Begonnen von Christian5467, Januar 07, 2022, 14:39:05

⏪ vorheriges - nächstes ⏩

Christian5467

Hallo zuusammen,

ich möchte über ein Formular Felder aktualisieren. Unter Anderem auch ein Ja/Nein Feld mithilfe eines Optionsfeldes.

Dabei möchte ich beim Fokuserhalt des Feldes eine doppelte Sicherheitsabfrage haben:

Als erstes: Achtung, die Stornierung kann nicht rückgängig gemacht werden!. Wenn dann auf "Abbrechen" gedrückt wird, möchte das Feld nicht aktualisiewren und den Cursor auf ein anderes Feld im Formular setzen. Das klappt mit dem Code unten soweit.

Private Sub Option45_GotFocus()
 If MsgBox("Achtung: Die Stornierung kann nicht rückgängig gemacht werden!", vbExclamation + vbOKCancel, "Bestätigung erforderlich") = vbCancel Then
        Cancel = True
   Me!Info.SetFocus
 End If
   
 Refresh
   
End Sub

Wenn auf OK gedrückt wird, möchte ich eine Weitere Sicherheitsabfrage einbauen "Sind Sie wirklich sicher?".
Wenn da auf OK gedrückt wird, soll die Feldänderung erfolgen. Wenn da auf Abbruch gedrückt wird, soll die Anderung nicht erfolgen und der Cursor auf ein anderes Feld gesetzt werden.

Leider weiß ich nicht, wie ich die 2. Abrage richtig einbinde. Kann mir hier jemand helfen?

Danke und Gruß
Christian



MzKlMu

Januar 07, 2022, 15:02:58 #1 Letzte Bearbeitung: Januar 07, 2022, 15:27:06 von MzKlMu
Hallo,
wozu willst Du hier ein extra Optionsfeld?
Und warum soll der Cursor bei Abruch in ein anderes Feld ?
Du kannst doch das Feld "Storno" selbst verwenden und zwar im Ereignis "Vor Aktualisierung".
Cancel = True ist hier völlig sinnlos.
Den Parameter Cancel kann man nur in Ereignissen verwenden in den Cancel auch im Prozedurkopf deklariert ist.

PS:
Du solltest in jedem Modulkopf
Option Explicitsetzen, dann führen undeklarierte Variablen (wie z.B. Cancel) zu einem Fehler, was sinnvoll ist.

PS2:
Aus Deinem anderen Thema:
Zitat von: undefinedich werde meine Datenbank entsprechend ändern,
Was ist daraus geworden, hast Du geändert ?
Wenn ja, zeige das neue Beziehungsbild.
Warum antwortest Du nicht mehr im anderen Thema auf den letzten beitrag von mir ?
Gruß
Klaus

andyfau

Hallo,
das lässt sich mit einer Msgbox in der Ereignisprozedur "Vor Aktualisierung" des Optionsfeldes bewerkstelligen

antwort = MsgBox("Wirklich ändern?", vbYesNoCancel)
select case antwort
      case Is = vbYes
            ......
      case Is = vbYNo
            ......
      case Is = vbcancel
            ......
end select

Christian5467

Zitat von: andyfau am Januar 07, 2022, 15:06:43Hallo,
das lässt sich mit einer Msgbox in der Ereignisprozedur "Vor Aktualisierung" des Optionsfeldes bewerkstelligen

antwort = MsgBox("Wirklich ändern?", vbYesNoCancel)
select case antwort
      case Is = vbYes
            ......
      case Is = vbYNo
            ......
      case Is = vbcancel
            ......
end select

Vielen Dank. Und wie genau bringe ich diesen Code jetzt unter, dass ich bei Ja 2 Sicherheitsabfragen habe?

Danke und Gruß
Christian

MzKlMu

Hallo,
was ist mit meinen Fragen/Hinweisen in #1 ?
Im einfachsten Fall geht das einfach direkt mit dem Feld Storno. Ein extra Optionsfeld braucht man da nicht.
Private Sub Storno_BeforeUpdate(Cancel As Integer)
    If Me.Storno = False Then
          If MsgBox("Kann nicht geändert werden, trotzdem ändern ?", vbYesNo) = vbNo Then
              Cancel = True
          Else
          If MsgBox("Wirlich Ändern ?", vbYesNo) = vbNo Then
              Cancel = True
          End If
          End If
    End If
End Sub
Gruß
Klaus

andyfau

Klaus hat natürlich Recht.....

Aber mal was Grundsätzliches zum Thema Storno. Sauberer wäre es allemal bei Storno einen neuen Stornodatensatz zu erzeugen, der den Ursprungsdatensatz neutralisiert und nicht einfach nur ein Stornokennzeichen zu setzen. (Beispiel: Ein Rechnungsbeleg wird nicht gelöscht oder mit Storno gekennzeichnet, sondern dazu gibt es dann einen passenden Gutschriftbeleg)

Christian5467

Januar 07, 2022, 17:41:09 #6 Letzte Bearbeitung: Januar 07, 2022, 17:54:00 von MzKlMu
Hallo Klaus,

Ich scheine mich da falsch ausgedrückt zu haben. Ich gehe schon direkt auf das Feld "Storno" Das ist bei mir aber als Optionsfeld gewählt, da ich nicht Ja/Nein in einem Feld im Formular stehen haben möchte, sondern lieber einen Optionspunkt, der entweder ausgefüllt oder leer ist.

Vielen Dank für den Code!

Gruß
Christian

Christian5467

Januar 07, 2022, 17:46:24 #7 Letzte Bearbeitung: Januar 07, 2022, 17:54:38 von MzKlMu
Zitat von: andyfau am Januar 07, 2022, 17:12:06Klaus hat natürlich Recht.....

Danke für den Hinweis. Die Stornoprozedur ist dafür gedacht, wenn der Eingang selber falsch gemacht wird und aus möglichen Gründen nicht geändert werden kann. Eigentlich wollte ich den Datensatz dann einfach komplett löschen können, das möchte ich jedoch aus Gründen der Nachvollziebarkeit nicht. Es gint im Datensatz ein Bemerkungsfeld, in weiches der Grund des Stornos eingetragen werden muss. Der Vorschlag mit Gutschriftenprozedur oder ähnlichem sprengt den Rahmen meines Anwendungsfalls.

Dennoch vielen Dank und Gruß
Christian