![]() |
AW: CompareDate gibt immer 1 aus...
Zitat:
Ein Ergebnis war falsch und deshalb habe ich die Funktion und es konnte nur die Funktion sein, im OnKeyDown Ereignis eines TEdits getestet und eben entdeckt, dass egal, was für ein Datum ich eingebe, ob größer oder kleiner als das 2. Datum immer eine 1 ausgegeben wird, auch wenn die beiden Datums gleich sind. Hier der einfache Test über ein Editfeld:
Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); var t:TDate; begin if key = VK_Return then begin Try if Edit1.Text = '' then t := Date else t:= strtodate(edit1.Text); Zeitraum(t); Except Zeitraum(now); end; end; end; |
AW: CompareDate gibt immer 1 aus...
Ups, ich glaube, ich habe Alzheimer, ich habe den Fehler.
Ich habe tatsächlich ein falsches Datum als festgelegten zweiten Parameter übergeben. Das ist jetzt wirklich Höchstpeinlich :oops: Egal, was ich eingegeben habe, das Datum war immer größer. Ich bitte euch alle um Entschuldigung. |
AW: CompareDate gibt immer 1 aus...
Und bezüglich des
Delphi-Quellcode:
Einfach so was "Anderes" machen, ohne dem Bediener seinen Fehler zu nennen, ist nicht die feine englische Art.
Except
Zeitraum(now); end; Und zusätzlich ist diese Art der Fehlerbehandlung eh "ungünstig", dazumal es sowieso absichtlich ein ![]() ![]() |
AW: CompareDate gibt immer 1 aus...
Zitat:
Zitat:
![]() Nochmals Allen vielen Dank :oops: |
AW: CompareDate gibt immer 1 aus...
Fehlerbehandlung sollte mit eine der ersten Dinge sein, die man unbedingt lernen sollte.
Einfach nur das verwendete StrToDate durch eine der beiden fehlerbehandelnden Funktionen austauschen und dafür das Try-Except weglassen. Oder alles so lassen und blos das Try-Except weglassen. Dann bekommt der Bediener eine Fehlermeldung und der nachfolgende Code wird nur ausgeführt, wenn er die Eingabe richtig macht. Sonst weiß er garnicht, daß das eingegebene Datum falsch ist und er wundert sich nur, warum dein Programm "Schrott" berechnet, also mit dem "falschen" Datum. Debugge mal Programme, welche Code wie Diesen benutzen, was auch zu oft in Fremdkomponenten vor kommt. Da wird man verrückt und will den Programmier davon nur noch erwürgen, weil das Programm so ständig sinnlos irgendwo hängen bleibt.
Delphi-Quellcode:
Richtiger wäre es so
S := 'abc';
try i := StrToInt(S); except i := 0; end; ShowMessage(IntToStr(i));
Delphi-Quellcode:
oder
S := 'abc';
i := StrToIntDef(S, 0); ShowMessage(IntToStr(i));
Delphi-Quellcode:
Oder halt ganz einfach so und nur arbeiten, wenn in "S" etwas "Ordentliches" drin steht.
S := 'abc';
if TryStrToInt(S, i) then ShowMessage(IntToStr(i)); // oder S := 'abc'; if not TryStrToInt(S, i) then raise Exception.CreateFmt('Was soll denn der Scheiß? "%s" ist doch kein Integer!', [S]); ShowMessage(IntToStr(i));
Delphi-Quellcode:
Aber wenn man mit Exceptions arbeitet, dann grundsätzlich niemals irgendwelche Fehler, vorallem keine Eingabefehler, blindlinks abfangen oder gar durch Irgendwas ersetzen und den Fehler ungezeigt verwerfen.
S := 'abc';
i := StrToInt(S); ShowMessage(IntToStr(i)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz