Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.153 Beiträge
 
Delphi 12 Athens
 
#15

AW: CompareDate gibt immer 1 aus...

  Alt 26. Mai 2015, 01:05
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:
S := 'abc';
try
  i := StrToInt(S);
except
  i := 0;
end;
ShowMessage(IntToStr(i));
Richtiger wäre es so
Delphi-Quellcode:
S := 'abc';
i := StrToIntDef(S, 0);
ShowMessage(IntToStr(i));
oder
Delphi-Quellcode:
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));
Oder halt ganz einfach so und nur arbeiten, wenn in "S" etwas "Ordentliches" drin steht.
Delphi-Quellcode:
S := 'abc';
i := StrToInt(S);
ShowMessage(IntToStr(i));
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat