Fehler bei Zahlenwert abfangen

Moderator: ModerationP

Fehler bei Zahlenwert abfangen

Beitragvon benny66 » 28. Sep 2019, 21:20

Hallo,
in einem Unterformular gibt es txtPreis (Typ Währung).
Es soll darin die Eingabe von Buchstaben abgefangen werden.
Code: Alles auswählen
Private Sub Form_Error(DataErr As Integer, Response As Integer)
   Response = acDataErrContinue
   MsgBox "Bitte geben Sie einen Zahlenwert als Betrag ein."
   Me!txtPreis.Undo
End Sub

Oder
Code: Alles auswählen
Private Sub txtPreis_BeforeUpdate(Cancel As Integer)
If Not IsNumeric(txtPreis) Then
   Beep
   Cancel = True
End If
End Sub

Trotzdem kommt:
Sie haben einen Wert eingegeben, der für dieses Feld nicht zulässig ist. Sie haben z.B. Text in ein numerisches Feld eingegeben, oder Sie haben eine Zahl eingegeben, die größer ist, als die Feldgröße-Einstellung es zulässt.

Wie kann man den Fehler durch eine eigene Meldung abfangen?
Vielen Dank!
Gruß Benny

Edit
Fällt mir gerade ein :D
man kann durch Key-Events die falsche Eingabe verhindern.
Trotzdem interessiert mich, warum obiger Code nicht funzt.
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 784
Registriert: 22. Nov 2015, 21:56

Re: Fehler bei Zahlenwert abfangen

Beitragvon KlausMz » 28. Sep 2019, 22:52

Hallo,
mache eine vollständige Fehlerbehandlung und achte auf die Reihenfolge der Befehle.
Du musst ja erst die Eingabe rückgängig machen (Undo) bevor Du weiter machen (acDataErrContinue) kannst, sonst ist die Meldung ja endlos.
Ich würde auch die Fehlernummer auswerten, damit ggf. andere Fehler angezeigt werden.
Code: Alles auswählen
Private Sub Form_Error(DataErr As Integer, Response As Integer)
    If DataErr = 2113 Then
        MsgBox "Bitte geben Sie einen Zahlenwert als Betrag ein."
        Me.txtPreis.Undo
        Response = acDataErrContinue
    End If
End Sub


Deine 2. Version mit IsNumeric funktioniert nicht, da die Meldung eine Systemmeldung ist, die nur im Form_Error verhindert werden kann.
Es kommt dann zwar Deine MsgBox, aber die Systemmeldung kommt trotzdem noch.
Ich würde durch Key-Events die falsche Eingabe verhindern, wie Du es auch schon gedacht hattest.
Zahlen zulassen, das Komma, ggf. das Minuszeichen und die Rücktaste zum löschen eines Zeichens.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 39170
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Fehler bei Zahlenwert abfangen

Beitragvon benny66 » 29. Sep 2019, 08:05

Hallo,
ich werde die Zeichenprüfung in ein Modul packen, um eine Fehlangabe abzufangen.
Ich habe auch den Code dem deinen angepasst. Aber er funktioniert nicht.
Seltsam, läuft er bei dir?
Gruß Benny
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 784
Registriert: 22. Nov 2015, 21:56

Re: Fehler bei Zahlenwert abfangen

Beitragvon KlausMz » 29. Sep 2019, 08:59

Hallo,
zeige bitte den vollständigen Code wie Du es umgesetzt hast.

Ja, bei mir funktioniert das.
Setze mal einen Haltepunkt zur Einzelschrittprüfung.
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 39170
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Fehler bei Zahlenwert abfangen

Beitragvon benny66 » 29. Sep 2019, 09:36

Hallo Klaus,
ich teste mit deinem.
Ja, bei mir funktioniert das.

Bei mir auch, wenn ich ihn im Hafo einsetze, wie ich gerade fand. Aber ich testete zuvor in einem Ufo.

Kommt also derselbe Code in das Formmodul des Ufos, wird der Stopp schon bei der Sub-Zeile nicht erreicht.
Dieses Formmodul hat ja auch einen Form_Error - müßte also dort auch klappen. Ist aber nicht so.
Hat das damit zu tun, dass es eine systeminterne Meldung ist, die nur das Hafo berücksichtigt? Seltsam

Übrigens muss man die Meldung noch ändern, da Err.number recht unspezifisch ist. Gibt man in ein Datumsfeld fremde Zeichen ein (im Hafo), kommt dieselbe FehlerNummer und da passt besser "Kontrolliere ..." (Übrigens wird das Komma, Bindestrich, Slash durch den Punkt ersetzt)
?Error(2169)
Anwendungs- oder objektdefinierter Fehler
?Error(2113)
Anwendungs- oder objektdefinierter Fehler
Gruß Benny
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 784
Registriert: 22. Nov 2015, 21:56

Re: Fehler bei Zahlenwert abfangen

Beitragvon KlausMz » 29. Sep 2019, 09:46

Hallo,
bitte zeige immer den verwendeten Code (mit Codetags), vollständig.
Das kann doch kein Problem sein, das einfach noch mal zu zeigen.
Und Err.Number wird ja in meinem Vorschlag gar nicht verwendet.

Bei mir funktioniert das auch bei einem Ufo, völlig problemlos.

Übrigens wird das Komma, Bindestrich, Slash durch den Punkt ersetzt
Wo wird was ersetzt ?
Gruß
Klaus . . . . . Feedback wäre wünschenswert.
Ich möchte bitte keine unaufgeforderten PN. Fragen bitte im Forum.
Benutzeravatar
KlausMz
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 39170
Registriert: 06. Okt 2003, 15:09
Wohnort: Irgendwo in der Pfalz

Re: Fehler bei Zahlenwert abfangen

Beitragvon benny66 » 29. Sep 2019, 19:21

Hallo Klaus,
bin jetzt erst zurück und habe alles rausgeschmissen, bis auf den gezeigten Code.
Ist nicht schwer, aber der besagte Code ist identisch.
Im Hafo klappt es, wie ich schon schrieb.
Code: Alles auswählen
Private Sub Form_Error(DataErr As Integer, Response As Integer)
    If DataErr = 2113 Then
      Debug.Print "Msg kommt von: " & Screen.ActiveControl.Name
      MsgBox "Kontrolliere den Wert."
      Me.txtBeginn.Undo 'Datumsfeld
      Response = acDataErrContinue
    End If
End Sub


im Ufo ähnliches, aber da wird kein Fehler ausgelöst, wenn man beim Währungsfeld txtPreis zB ein 'e' statt der '3' erwischt:
Code: Alles auswählen
Private Sub Form_Error(DataErr As Integer, Response As Integer)
   If DataErr = 2113 Then
      Debug.Print "Msg kommt von: " & Screen.ActiveControl.Name
      MsgBox "Bitte geben Sie einen Zahlenwert als Betrag ein."
      Me.txtPreis.Undo' Währung
      Response = acDataErrContinue
   End If
End Sub


ich schrieb:
Gibt man in ein Datumsfeld fremde Zeichen ein (im Hafo)...

Hier wird das Komma, Bindestrich, Slash automatisch durch den Punkt ersetzt
Mit err.number meine ich die im Code stehende 2113. Die kommt, wenn man Fehleingaben bei Währung ODER Datum hat, so dass man nicht selektiv reagieren kann, also allgemeiner wie "Kontrolliere..."
Aber das ist zweitrangig.
Der Unterschied Hafo/Ufo ist schon komisch. Mehr Code gibt es nicht.
Gruß Benny
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 784
Registriert: 22. Nov 2015, 21:56

Re: Fehler bei Zahlenwert abfangen

Beitragvon benny66 » 30. Sep 2019, 09:37

Hallo,
zur weiteren Klärung:
Ich habe ein völlig neues Formular mit identischen Controls, Code usw. in dieser Datenbank erstellt.
Es kommt dann bei der beschriebenen Fehleingabe im Ufo dies (beim Hafo funktioniert das Abfangen wie schon beim alten Formular):

Problem Fehleingabe.png

Darauf kommt dann noch die systemeigene Fehlermeldung.
Sie haben einen Wert eingegeben, der für dieses Feld nicht zulässig ist.
Sie haben z.B. Text in ein numerisches Feld eingegeben, oder Sie haben eine Zahl eingegeben, die größer ist, als die Feldgröße-Einstellung es zulässt.

Dies geschieht auch nach "Reparieren/Komprimieren".

Daraufhin habe ich eine neue DB erstellt und die benötigten Tabellen importiert und wieder ein identisches Formular erstellt.
Hier funktioniert alles wie erwartet.
Was hat bei der alten den Fehler genau verursacht?
Ich habe dazu das alte Hafo und Ufo in die neue DB kopiert und geöffnet.

Es funktioniert in der neuen DB. :o
Irgendwas muss also wahrscheinlich in der alten DB defekt gewesen sein, was sich nur bei genannter Fehleingabe im Ufo herausstellte.

Nicht sehr vertrauenserweckend, da man ja nicht jede Fehleingabe checken kann und das Formular ansonsten völlig unauffällig war. :roll:
Gruß Benny
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
benny66
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 784
Registriert: 22. Nov 2015, 21:56


Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste