IF CTOD(oXbp:getData()) == CTOD("")
MSgBox("Fehlerhaftes Datum")
ENDIF
Datumsprüfung?
Moderator: Moderatoren
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Datumsprüfung?
wie prüfe ich denn, ob ein Datum gültig ist? Mit diesem Konstrukt kann ich zwar feststellen, daß das Datum leer ist, wenn aber z.B. "16.05. " im Feld oXbp steht kommt kein Fehler.
Zuletzt geändert von Wolfgang_B am So, 16. Mai 2021 17:50, insgesamt 1-mal geändert.
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2827
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 96 Mal
- Danksagung erhalten: 13 Mal
Re: Datumsprüfung?
Hallo, Wolfgang -
welches Xbase-Part verwendest Du denn?
Wenn Du XbpDatePicker() verwendest, sollte das Datum gültig sein.
welches Xbase-Part verwendest Du denn?
Wenn Du XbpDatePicker() verwendest, sollte das Datum gültig sein.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Datumsprüfung?
xbpSLE!
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Datumsprüfung?
Hallo Georg,
XbpDatePicker() wir hier nicht gehen. Der Kunde kann hier ein beliebiges Datum eintragen. Ich möchte nur prüfen, ob das Datum gültig sein kann (richtig geschrieben und datumrechtlich möglich)
XbpDatePicker() wir hier nicht gehen. Der Kunde kann hier ein beliebiges Datum eintragen. Ich möchte nur prüfen, ob das Datum gültig sein kann (richtig geschrieben und datumrechtlich möglich)
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2827
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 96 Mal
- Danksagung erhalten: 13 Mal
Re: Datumsprüfung?
Hallo, Wolfgang -
in dem Fall würde ich die Eingabe konvertieren CToD() oder SToD() und prüfen, ob das Eregbnis nicht leer ist.
Alternativ würde ich mir mal SLEPic anschauen, dort kannst Du als Format auch Datum definieren, und dann können auch nur gültige Werte eingegeben werden.
in dem Fall würde ich die Eingabe konvertieren CToD() oder SToD() und prüfen, ob das Eregbnis nicht leer ist.
Alternativ würde ich mir mal SLEPic anschauen, dort kannst Du als Format auch Datum definieren, und dann können auch nur gültige Werte eingegeben werden.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Datumsprüfung?
Ob das Feld leer ist oder nicht, sehe ich mit meinem Code. Nur ob das gültig ist oder nicht sehe ich nicht. Hier sagt die Doku allerdings was anderes:
SLEPic sagt m ir nichts. Finde auch in der Doku nichts darüberCtoD() returns a date value. When <cDate> is an invalid date, CtoD() returns an empty date.
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2827
- Registriert: Fr, 08. Feb 2008 21:29
- Hat sich bedankt: 96 Mal
- Danksagung erhalten: 13 Mal
Re: Datumsprüfung?
Hallo, Werner -
das ist eine von XbpSLE abgeleitete Klasse, die James Loughner geschrieben hat: http://www.gogalthorp.com/splash
Vorteil: alles in Xbase++ geschrieben, kann also auch relativ leicht angepasst werden.
das ist eine von XbpSLE abgeleitete Klasse, die James Loughner geschrieben hat: http://www.gogalthorp.com/splash
Vorteil: alles in Xbase++ geschrieben, kann also auch relativ leicht angepasst werden.
Zuletzt geändert von georg am So, 16. Mai 2021 19:16, insgesamt 1-mal geändert.
Liebe Grüsse aus der Eifel,
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
-
- Rekursionen-Architekt
- Beiträge: 200
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 4 Mal
Re: Datumsprüfung?
Hallo Wolfgang,
Solltest du ein ungültiges Datum konvertieren, bekommst du ein leeres zurück.
Dies könntet du auch mit der Funktion Empty() abfragen.
Solltest du ein ungültiges Datum konvertieren, bekommst du ein leeres zurück.
Dies könntet du auch mit der Funktion Empty() abfragen.
Gruß Dominik
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Datumsprüfung?
@ Dominik: Wie soll die Abfrage mit EMPTY() aussehen? Das Ergebnis eines leeren Datums ist doch " . . ". Da sind mindestens Punkte drin, also nicht empty.
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Datumsprüfung?
@Wolfgang:
Empty() prüft, ob ein Feld oder eine Variable bezogen auf ihren Datentyp leer ist. "" ist ein leeres Stringfeld, "0.00" ein leeres numerisches Feld, " . . " ein leeres Datumsfeld:
Empty() prüft, ob ein Feld oder eine Variable bezogen auf ihren Datentyp leer ist. "" ist ein leeres Stringfeld, "0.00" ein leeres numerisches Feld, " . . " ein leeres Datumsfeld:
Code: Alles auswählen
? Empty(Date()) // .F.
? Empty(Ctod(" . . ")) // .T.
? Empty(Ctod("32.01.2021")) // .T.
Herzlich,
Tom
Tom
-
- Rekursionen-Architekt
- Beiträge: 200
- Registriert: Mo, 15. Apr 2019 16:19
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 4 Mal
Re: Datumsprüfung?
Exakt.
Am besten du schaust einfach mal in die Dokumentation, das ist dort gut beschrieben.
Empty ist übrigens eine meiner Lieblingsfunktionen
Am besten du schaust einfach mal in die Dokumentation, das ist dort gut beschrieben.
Empty ist übrigens eine meiner Lieblingsfunktionen
Gruß Dominik
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Datumsprüfung?
Und Empty() prüft nicht nur Variablen und Felder, sondern ganz allgemein Ausdrücke. Wie im Beispiel von mir gezeigt.
Ob eine Variable demgegenüber bislang unbelegt/nichttypisiert ist, erfragt man über ValType() bzw. Type(), wobei dann die Antwort "U" bedeuten würde, dass sie noch nicht/noch nie* Werte enthält/enthielt. Oder man vergleicht mit NIL, das wäre dann auch in allen Fällen .T. Und auch dieser Vergleich funktioniert bei Ausdrücken, die eine Rückgabe erzeugen sollten. Das ist vermutlich, was Wolfgang mit seiner irritierten Anmerkung, dass ein leeres Datum wohl doch keine leere Variable wäre, gemeint hat.
*wobei man natürlich jede Variable NILen kann, so dass das wieder der Fall ist.
Ob eine Variable demgegenüber bislang unbelegt/nichttypisiert ist, erfragt man über ValType() bzw. Type(), wobei dann die Antwort "U" bedeuten würde, dass sie noch nicht/noch nie* Werte enthält/enthielt. Oder man vergleicht mit NIL, das wäre dann auch in allen Fällen .T. Und auch dieser Vergleich funktioniert bei Ausdrücken, die eine Rückgabe erzeugen sollten. Das ist vermutlich, was Wolfgang mit seiner irritierten Anmerkung, dass ein leeres Datum wohl doch keine leere Variable wäre, gemeint hat.
Code: Alles auswählen
LOCAL d
? d // NIL
? ValType(d) // "U"
d := CtoD(' . . ')
? Empty(d) // .T.
? ValType(d) // "D"
d := Date()
? Empty(d) // .F.
Herzlich,
Tom
Tom
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Datumsprüfung?
Die Prüfung mit EMPTY() stimmt aber nur bedingt. Wenn ein falsches Datum vollständig eingeben wird z.B. "34.01.2021" ist EMPTY() -> .T. .Wenn aber ein unvollständiges Datum in der Form "01.01. " eingegeben wird, ist EMPTY() .F. , d.h. die Prüfung auf ein gültiges Datum schlägt fehl.
Code: Alles auswählen
IF EMPTY(CTOD(oXbp:getData()))
MSgBox(".T.")
ELSE
MSgBox(".F.")
ENDIF
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Datumsprüfung?
Das liegt an der automatischen Vervollständigung von Datumseingaben und der Einstellung von SET EPOCH, Wolfgang. Wenn EPOCH belegt ist und ein Datum eingegeben oder zugewiesen wird, dessen Jahreszahl nur zweistellig ist, wird das Jahrhundert aufgefüllt. Wenn die Jahreszahl ganz fehlt, wird der Jahrhundertbeginn übernommen.
Code: Alles auswählen
SET EPOCH TO 2000
? CtoD("01.01. ") -> 01.01.2000
SET EPOCH TO 0
? CtoD("01.01. ") -> nix
? Empty(CtoD("01.01. ")) -> .T.
Herzlich,
Tom
Tom
- Wolfgang_B
- Rekursionen-Architekt
- Beiträge: 486
- Registriert: Do, 14. Jun 2007 18:22
- Wohnort: 94065 Waldkirchen
- Hat sich bedankt: 14 Mal
- Danksagung erhalten: 5 Mal
Re: Datumsprüfung?
das erklärt natürlich alles. Bis zur nächsten Jahrtausendwende muß sich Alaska dann was einfallen lassen
Besten Dank!!
Besten Dank!!
Beste Grüße
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
Wolfgang
Mitglied des Deutschsprachigen Xbase-Entwickler e. V.
Mitglied der XUG Osnabrück
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9367
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 102 Mal
- Danksagung erhalten: 361 Mal
- Kontaktdaten:
Re: Datumsprüfung?
Gerne!
Keine Jahreszahl wird als Jahreszahl "0" gewertet, wonach diese 0 dann auf den Wert aus SET EPOCH bezogen wird.
Anders verhält sich das, wenn man auch den Monat weglässt. Dann erhält man wieder ein ungültiges Datum bzw. ein leeres Datum bei der Umwandlung via CtoD().
Keine Jahreszahl wird als Jahreszahl "0" gewertet, wonach diese 0 dann auf den Wert aus SET EPOCH bezogen wird.
Anders verhält sich das, wenn man auch den Monat weglässt. Dann erhält man wieder ein ungültiges Datum bzw. ein leeres Datum bei der Umwandlung via CtoD().
Herzlich,
Tom
Tom