Announcement

Collapse
No announcement yet.

prüfen ob ein korrektes Datum eingeben wurde

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

  • prüfen ob ein korrektes Datum eingeben wurde

    Hallo,

    ich habe ein DBedit Feld in meinem Programm das sich auf ein TDateField einer Tabelle bezieht. Wenn sich das Datum ändert müssen bestimmte folge Daten (auch Datumswerte) automatisch neu berechnet werden. Jetzt möchte ich über das onDataChange Ereignis des DBedit Feldes eine Prüfung einbauen ob ein korrektes Datum in dem DBEdit Feld eigegeben wurde und dann die Daten neu berechnen. Wie kann ich jetzt prüfen ob ein korrektes Datum eingeben wurde hat jemand eine Routine hierfür. Ich nutze Delphi 1.0.

    Grüße Hendrik

  • #2
    <pre>
    function isdatetime(str:STring):Boolean;
    begin
    try
    formatdatetime(str);{führt zu einer Exception falls str kein gültiges Datum}
    result:=true;
    except
    on exception do
    result:=false;
    end;
    end;
    </pre&gt

    Comment


    • #3
      Hallo Hendrik,
      die Schwierigkeit beim OnChange-Ereignis ist folgende:
      Es wird aufgerufen, sobald sich der Wert text ändert, das bedeutet schon beim ersten Datum. Dadurch erhältst du solange Fehlermeldungen, bis das Datum korrekt eingegeben ist.
      Deshalb prüfe ich solche Eingaben lieber später, bevor der Datensatz geschrieben wird oder verwende eine TDateTimePicker-Komponente.

      mfg Klaus-Pete

      Comment


      • #4
        Nur TdateTimePicker gibt es nicht bei Delphi 1.<br>
        Aber ich denke, daß er die Berechnung der neuen Daten eh nur dann startet, wenn die eingabe ein gültiges datum ist. Also in der Form:<br>
        if isdatetime(dbedit1.text) then<br>
        berechnemeinedaten

        Comment


        • #5
          Hi,

          die Prüfung auf Korrektheit gehört, wie Klaus-Peter schon gesagt hat, eher in das OnExit-Ereignis, da man sonst bei z.B. 12.12.2001 9mal mit einer Fehlermeldung überschüttet wird. Auch sollte man bei der Prüfung den Fall berücksichtigen das str='' ist. Das ist nämlich kein gültiges Datum aber meistens eine gültige Eingabe. Bei Verwendung des OnExit-Ereignisses sollte man auch noch prüfen ob der Anwender gerade den Abbrechen-Button gedrückt hat (Form.ActiveControl=). Als Anwender finde ich es nämlich lästig wenn mich eine Fehlermeldung anschreit weil ich ein falsches Datum eingegeben habe obwohl ich den Dialog gerade Abbrechen will.

          Gruß Fal
          Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

          Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

          Comment


          • #6
            Hallo Falk,<br>
            ist es denn nicht nur eine Frage der Implementation ? Was ist, wenn der Benutzer das Ergebnis der Berechnung sehen soll, ohne daß onExit aufgerufen wird ?<br>
            Ich würde in diesem Fall auch keine Fehlermeldung im Onchange rausgeben sondern nur im Onexit. Aber dies auch nur wenn das Feld mit OK bestätigt wird. Ansonsten verwerf ich in meinen Porgrammen eh über Cancel die Benutzereingaben.<br>
            Im onChange würde ich überprüfen ob der eingegeben Text ein gültiges Datum oder '' ist, falls es erlaubt ist, und dann die anderen Daten berechnen. Ist es kein gültiges Datum gehe ich davon aus, daß der Benutzer noch mehr Eingaben machen will und gebe keine Meldung aus

            Comment


            • #7
              Hallo Frank,

              ich hab ja nur gemeint das man im OnChange mit Fehlermeldungen vorsichtig sein sollte, da ich dort nie weiß wann der Benutzer mit seiner Eingabe fertig ist. Deshalb ist OnExit besser geeignet ihm zu sagen das er einen Fehler gemacht hat. Wenn ich abhängige Daten aktualisieren will, dann würde ich auch deinen Weg wählen.

              Gruß Fal
              Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

              Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

              Comment


              • #8
                Hallo,

                danke für die Infos, Falk hat grundsätzlich natürlich recht. Aber in meinem Fall werfe ich ehh keine Fehlermeldung aus sondern ich muss halt wissen (direkt beim ändern nicht erst beim speichern) ob das Datum geändert wurde da in dem selben Dialog noch weitere Datumswerte dargestellt werden die eben von dem einen Datumsfeld was geändert wird abhängig sind und der User sollte dann schon direkt beim ändern des ersten Datums die Auswirkungen auf die anderen Datumswerte sehen und da ist die Lösung von Frank ohne Fehlermeldung genau richtig :-)

                Grüße Hendri

                Comment


                • #9
                  Hallo Frank,
                  habe ich nicht gewusst. Dafür gibt es isdatetime() nicht mehr :-(

                  mfg Klaus-Pete

                  Comment


                  • #10
                    Ist ja auch keine Delphifunktion sondern der Name der Funktion die ich oben angegeben hatt

                    Comment

                    Working...
                    X