| |
Visual-Basic EinsteigerVerarbeitung Abbrechen | | | Autor: crosstravel | Datum: 14.04.20 18:46 |
| Hallo,
ich habe ein kleines Problem bezüglich der abnormalen Beendung eines Programmes. Ich habe auf
der Form einen Abbrechen>-Button. Hier close ich alle Records und gehe mit Unload Me auf das
Hauptbild - jedenfalls sollte es so sein.
In Wahrheit springt die Steuerung in die Plaus-Prüfung eines Eingabefeldes, was zu einem ungewollten
Verhalten führt. Ich habe extra eine Abfrage auf Abbruch an den Anfang der Plaus-Routine gestellt - aber diese Weiche wird nicht gesetzt. Nachstehend die kleine AbbruchRoutine.
Private Sub bvtnAbbrechen_Click()
bAbbruch = True
FileClose ' Schliessen aller Recordsets
Unload Me
End Sub Kann mir jemand einen Rat geben?
Danke
Rainer | |
Re: Verarbeitung Abbrechen | | | Autor: Wobi | Datum: 15.04.20 02:50 |
| Hallo Rainer,
wie bzw. wann wird die Plausibilitätsprüfung des Eingabefeldes denn ausgelöst?
Wenn du die z.B. über z.B. .lostFocus, .validate, .change aus löst, dann wird das zuerst abgearbeitet bevor das click Event des Abbrechen Buttons an die Reihe kommt.
Sollte es jedoch ein Zeitproblem innerhalb deiner Plausibilitätsprüfung sein, könnte DoEvents helfen. Siehe z.B.:
https://www.vbarchiv.net/tipps/tipp_2301-doevents-gezielt-und-nur-wenn-notwendig-einsetzen.html
Gruß
Frank | |
Re: Verarbeitung Abbrechen | | | Autor: crosstravel | Datum: 15.04.20 07:18 |
| Hallo Frank,
es wird in einem Validate ausgelöst. Hier wird festgestellt, dass ein Eingabefeld keinen gültigen Werrt enthält. Der Benutzer wird durch eine Meldung darauf hingewiesen und er kann entweder den korrekten Wert setzen oder die Verarbeitung abbrechen.
Das Problem tritt auf, wenn er den Abbrechen-Button klickt, ohe vorher einen Wert in das Feld eingetragen hat. Die Steuerung kreist dann immer zwischen Validate und Abbrechen. das bAbbruch wird dann überhaupt nicht gesetzt.
Gruss
Rainer | |
Re: Verarbeitung Abbrechen | | | Autor: crosstravel | Datum: 15.04.20 10:10 |
| Hallo Dieter,
ich habe nun die CausesValidation wie folgt eingebaut. Beim Klick auf den Abbruch-Button wird aber direkt Validate-Routine nochmals durchlaufen; das VausesValidate = False wird nicht ausgeführt. Ist
es vielleicht am falschen Ort definiert.
Der Benutzer muss die Freiheit haben, entweder einen gültigen Wert zu wählen oder die Verarbeitung abzubrechen.
Gruss
Rainer
Private Sub btnAbbrechen_Click()
With sevWerbe
.CausesValidation = False
End With
FileClose ' Schliessen aller Recordsets
Unload Me
End Sub Private Sub sevWerbe_Validate(Cancel As Boolean)
Cancel = False
If IsNull(sevWerbe) Or sevWerbe = "" Then
MsgBox "Erfassen Sie bitte zwingend die Werbeart"
Cancel = True
Exit Sub
End If
End Sub | |
Re: Verarbeitung Abbrechen | | | Autor: crosstravel | Datum: 15.04.20 11:26 |
| Hallo Dieter,
ich habe jetzt testhalben das causesvalidation = false in Form_Load eingebaut. Aber dann läuft die Steuerung überhaupt nicht mehr in die Validation. Die Prüfungen müssen aber durchgeführt werden - nur soll der Benutzer im Fehlerfall entscheiden können, ob er den Wert korrgiert/erfasst oder die Verarbeitung abbricht.
Ich habe auch versucht, die causesvalidation = false in den Fehlerzweig einzubauen; dann zeigt es jedoch keine Wirkung. Aber hier wäre es richtig; nur im Fehlerfall und wenn der User abbrechen will, soll die Validierung unterbunden werden.
Gruss
Rainer | |
Re: Verarbeitung Abbrechen | | | Autor: crosstravel | Datum: 15.04.20 16:48 |
| Hallo Dieter,
vielleicht habe ich michnicht klar ausgedrückt; aber die Situation ist ziemlich simpel.
Ein Benutzer muss z.B. ein bestimmtes Merkmal in ein Feld eingeben. Er ist plötzlich unsicher, welches Merkmal as Richtige ist und will das zunächst abklären. Deshalb will er die Verarbeitung abbrechen um sie später, nach Vorlage der fehlenden Informationen, wieder aufzunehmen.
Deshalb benötigt er eine Möglichkeit, den Abbruch durchzuführen.
Gruss
Rainer | |
Re: Verarbeitung Abbrechen | | | Autor: Wobi | Datum: 16.04.20 02:11 |
| Hallo Rainer,
Zitat: | |
Ein Benutzer muss z.B. ein bestimmtes Merkmal in ein Feld
eingeben. Er ist plötzlich unsicher, welches Merkmal as
Richtige ist und will das zunächst abklären. Deshalb will er
die Verarbeitung abbrechen um sie später, nach Vorlage der
fehlenden Informationen, wieder aufzunehmen. | |
Das ist ja eine übliche Situation.
Aber von welchem Abbrechen Button reden wir hier eigentlich?
Du hast eine einfache MsgBox, aber gar keine Möglichkeit den User da reagieren zu lassen, du zeigst ihm nur den Hinweis, dass er einen gültigen Wert eingeben soll. Wenn es dir um genau dieses Feld geht, musst du die MsgBox so gestalten, dass er genau dort wählen kann was er machen möchte und nirgendwo anders. Aber auch das kann man anders machen, siehe unten....
So wie ich das aber verstanden habe, hast du irgendwo auf deinem Formular einen anderen Abbrechen Button der nicht nur für dieses Feld gelten soll, sondern für den Abbruch des Formulars allgemein. Gehe ich da richtig in dieser Annahme?
Nehmen wir als simples Beispiel die Erfassung eines Kunden wo eine Kontaktadresse notwendig ist (Pflichtfeld)
Da hat er Telefon und E-Mail zur Auswahl. Beim E-Mail Eingabefeld machst du eine Plausibilitätsprüfung, ob die E-Mail Adresse gültig sein könnte oder eben auch nicht. Wenn nicht, dann ist das Feld uninteressant du leerst es wieder und der User kann eine Telefonnummer eingeben. Ist auch diese ungültig nach entsprechender Prüfung ebenso. Also jedes Feld wird für sich behandelt.
Du hast ja irgendwo auch eine Möglichkeit die Daten des ganzen Formulars zu speichern. Spätestens da musst du prüfen, ob alle Pflichtfelder ausgefüllt sind. (Gültigkeitsprüfung war ja schon vorher) und wenn da etwas fehlt musst bzw. solltest du dem User anbieten die Verarbeitung abbrechen zu können weil er später noch Informationen nachtragen möchte.
Also die bisherigen richtigen Daten irgendwo zwischenspeichern, in der DB entsprechend kennzeichnen usw. Wenn er den Datensatz später vervollständigt, alles ok ist kannst du ihn "scharf schalten"
Nur das ganze Formular ab zu brechen oder auch das einzelne Feld (und das Formular stehen lassen) ist nicht komfortabel für den User, denn du weißt ja nicht wann er die noch fehlenden Informationen zur Verfügung hat. (In 10 Minuten, nach dem Wochenende, nach dem Urlaub)
Also beschreibe doch mal was wann genau der User abbrechen können soll und warum genau ein Feld so entscheidend ist.
Gruß
Frank | |
Re: Verarbeitung Abbrechen | | | Autor: crosstravel | Datum: 16.04.20 06:50 |
| Hallo Dieter,
ich habe das CausesValidation nun direkt bei der Inhaltsprüfung eingebaut. Die Fehlermeldung kommt und der Benutzer kann über den Abbruch-Button die Verarbeitung des Formulars abbrechen. Danke.
Private Sub sevWerbe_Validate(Cancel As Boolean)
Cancel = False
If IsNull(sevWerbe) Or sevWerbe = "" Then
Aktion = MsgBox("Eingabe zwingend, erfassen?", vbOKCancel + vbCritical, _
"Eingabe")
If Aktion = vbCancel Then
sevWerbe.CausesValidation = False
Exit Sub
Else
Cancel = True
Exit Sub
End If
End If | |
Re: Verarbeitung Abbrechen | | | Autor: crosstravel | Datum: 16.04.20 17:37 |
| Hallo Dieter,
danke für Dein Feedback. Ich habe die CausesValidation Eigenschaft nun auf dem Button und im Form_Load gesetzt. Es funktioniert.
Hab einen schönen Abend
Rainer | |
Re: Verarbeitung Abbrechen | | | Autor: crosstravel | Datum: 17.04.20 07:56 |
| Hallo Frank,
Deine Beschreibung ist vollkommen korrekt. Genauso läuft die Erfassung. Die Daten sind, wo immer möglich, gespeichert und der Benutzer kann nach dem Abbrechen der Verarbeitung genau da wieder aufsetzen.
Das war jedoch nicht das Problem. Wenn auf einem zwingenden Eingabefeld bei der Validierung ein Fehler festgestellt wird, kann der Benutzer im Ausnahme^fall (normalerweise wird der Feldinhalt ja korrigiert) die Erfassung nicht über einen Abbrechen-Button auf dem Formular beenden. Der Cursor bleibt einfach in dem zu prüfenden Feld stehen.
Dieter hat mir hier den richtigen Weg zeigen können. Dem Abbrechen-Button in Form_Load oder beim Entwurf die Eigenschaft causesvalidate = false zuweisen - dann kann der Abbruch durchgeführt werden.
Gruss
Rainer | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevGraph (VB/VBA)
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere Infos
|