Announcement

Collapse
No announcement yet.

Textfeld bei Fehleingabe das feld nicht verlassen!

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Textfeld bei Fehleingabe das feld nicht verlassen!

    Hallo Leute,

    ich habe ein ungebundenen Eingabe - Formular mit einigen Textfeldern.

    Ein textfeld ist mit Datum/kurz formatiert und der Eingabemaske für das kurz Datum eingestellt.

    Wenn nun ein fehlerhaftes Datum 12.31.2005 eingeben wird, wechselt Access tag und monat automatisch und spring in das nächste Eingabefeld. Wird ein datum mit 22.22.3400 eingeben wirft Access die Standardmeldung das der Wert für dieses Feld falsch ist und verbleibt mit dem Focus im Fehlerfeld.

    Wenn ich nun im FocusLost oder Exit Event die Eingabe auf ein gültiges jahr prüfe kann ich mit setFocus nicht im Fehlerfeld verbleiben.

    Was kann ich tun, ausser mir das Object zu merken und in allen GotFocus Events dem Fehler Object den Focus zurückzugegeben.

    Danke!

    Gruß

    Gerd

  • #2
    Hallo Gerd,

    Um das Eingabedatum auf gültige Werte zu prüfen musst Du eine Gültigkeitsregel definieren und im Textfeld speichern. In Deinem Fall könnte die Regel wie folgt aussehen:

    ([Text0].[Text] Wie "[0-3]#.[0-1]#.####")=Wahr

    [Text0] ist der Name des Textfeldes und müsste angepasst werden.
    Die Regel überprüft Deine Eingabe: Bei den Tageswerten sind sind für die erste Stelle nur Werte zwischen 0 und 3, bei den Monatswerten für die erste Stelle nur die Werte 0 und 1 zulässig.

    Wichtig: Du musst vom Textfeld den Wert "Text" und nicht "Value" prüfen! Value enthält in Deinem Beispiel statt 12.31.2005 den Wert 31.12.2005. "Text" hingegen den aktuell eingegebenen Wert 12.31.2005. Du kannst das Eingabefeld erst verlassen wenn die eingegebenen Werte der Gültigkeitsregel entsprechen.

    Ich hoffe der Tipp hilft Dir weiter.
    Gruß
    Wolfgan

    Comment


    • #3
      Hallo Wolfgang,

      vielen Dank für deinen Tip. Ich denke damit komme ich weiter.
      Ein Ereignis abbrechen kann man wohl nicht, oder?

      Die Anwendung ist eine Multi-Language Anwednung. Das Access dient nur als Frontend. Es liegt eine Oracle-DB im Hintergrund.
      Dort sind alle Sprach-Abhängigen Labels, Meldungen, Datensätze gespeichert.
      Wenn der User nun ein Falsches Datum, welches nicht im Gültigkeitsbereich liegt, eingibt, dann soll in seiner Favoritisierten Sprache auch eine Fehlermeldung ausgegeben werden.

      Das Funktioniert nicht mit einer Gültigkeitsregel. Notfalls muss der Kunde mit einer englischen Meldung leben.

      Gruß und danke

      Ger

      Comment


      • #4
        Hallo Gerd,

        Mein Tipp war leider etwas fehlerhaft. Sicherer gehts mit der StrComp-funktion. Diese kannst Du im Formular als Gültigkeitsregel eingeben.

        In Deinem Fall müsste das etwa so aussehen:

        StrVgl([Text0].[Text];ZString(Nz([Text0].[Wert];[Text0].[Text])))=0

        Dabei wird der "Text"-Wert mit dem "Value"-Wert verglichen. Sind beide Werte gleich wird 0 zurückgegeben und die Eingabe ist o.K. Die Nz-Funktion für den Fall dass der Anwender die Eingabe löscht, dann wäre Value=Null. Es wird dann einfach der Wert aus "Text" zurückgegeben.
        Mit dieser Version musst Du ein Eingabeformat definieren das dann so aussehen könnte:

        99.99.0000;;_

        In beiden Fällen ist auch das setzen des (Ausgabe)Formats notwendig. Entweder "Datum,kurz" oder "tt.mm.jjjj"

        Willst Du die Vergleichsfunktion ausbauen, so müsstest Du die Gültigkeitsregel in eine eigene Funktion einbauen. Dort könntest Du die Werte vergleichen. Falls der Vergleich falsch ist könntest Du die Eingabe löschen, z.B. indem Du eine MsgBox ausgibst mit welcher Du den Benutzer fragst ob er abbrechen will. Bestätigt er so muss die Funktion True zurückgeben und den falschen Wert im Eingabefeld löschen. Du müsstest allerdings ein bißchen probieren, so auf Anhieb habe ich keinen Code dafür parat.

        Viel Glück und herzlichen Gruß
        Wolfgan

        Comment


        • #5
          Hallo Gerd,
          falls es Dich interessiert hier eine Lösung für Deinen Wunsch das Ereignis durch den Benutzer steuern zu lassen.
          Definiere eine Gültigkeitsregel als Funktion und trage sie im Feld Gültigkeitsregel wie folgt ein:

          Test()=0

          die Funktion sieht wie folgt aus:

          Private Function Test() As Integer
          Test = StrComp(Text0.Text, CStr(Nz(Text0.Value, Text0.Text)))
          If Test <> 0 Then
          If MsgBox("Ungültiges Format. Automatisch Umwandeln?", vbOKCancel + vbQuestion) = vbOK Then
          Test = 0
          Else
          SendKeys "{Home}+{End}{Delete}", True
          MsgBox ("Ungültiges Format wurde gelöscht")
          SendKeys "{Enter}" 'Cursor verbleibt im Steuerelement
          'SendKeys "{Enter 2}" 'Cursor springt zum nächsten Steuerelement
          End If
          End If
          End Function

          Die Funktion vergleicht die Eigenschaft Text und Value. Sind die Werte gleich wird 0 zurückgegeben, der Eintrag ist o.k.
          Sind die Werte nicht gleich wird eine MsgBox ausgegeben in der der Benutzer gefragt wird ob er den Wert automatisch umwandeln oder abbrechen will. Bei Abbruch wird mit der Funktion SendKeys das Eingabefeld gelöscht, eine MsgBox ausgegeben die die Aktion bestätigt. Soll das Steuerelement verlassen werden so sende mit Sendkeys zweimal Enter, ansonsten nur einmal.

          Die Lösung ist vielleicht nicht ideal aber möglich.

          Herzlichen Gruß
          Wolfgan

          Comment


          • #6
            Hallo Wolfgang,

            vielen Dank noch mal für deine Bemühungen.
            Ich glaube auch dein letzter Vorschlag ist der bessere.

            MfG

            Ger

            Comment

            Working...
            X