AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CompareDate gibt immer 1 aus...

Ein Thema von Codix32 · begonnen am 18. Mai 2015 · letzter Beitrag vom 26. Mai 2015
Antwort Antwort
Seite 2 von 2     12   
Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#11

AW: CompareDate gibt immer 1 aus...

  Alt 26. Mai 2015, 00:30
Zitat:
Warum?
Formatiere mal den Quelltext ordentlich und dann sieht du es bestimmt.
Wollte ich gerade auch drauf hinweisen.

......

Im Code compareDate(vor,nach) steht vor vor nach. In der Funktion Zeitraum ist in der Zeile wievieltePackung(Tagedazwischen(dt, vorTag)) der vorTag an zweiter Stelle. Ich weiß nicht welche Tage in dt stehen, aber ich gehe davon aus, dass es nachTage sind. Vielleicht solltest du für den Fall in der Funktion Tagedazwischen zuerst vor und nach sortieren, also prüfen ob vor auch wirklich das frühere Datum ist. Ansonsten prüfst du drauf ob das spätere Datum vor dem älteren Datum steht. Das Ergebnis wäre in dem Fall -1.
Danke Popov,

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;
  Mit Zitat antworten Zitat
Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#12

AW: CompareDate gibt immer 1 aus...

  Alt 26. Mai 2015, 00:38
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
Egal, was ich eingegeben habe, das Datum war immer größer.

Ich bitte euch alle um Entschuldigung.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: CompareDate gibt immer 1 aus...

  Alt 26. Mai 2015, 00:54
Und bezüglich des
Delphi-Quellcode:
    Except
     Zeitraum(now);
    end;
Einfach so was "Anderes" machen, ohne dem Bediener seinen Fehler zu nennen, ist nicht die feine englische Art.

Und zusätzlich ist diese Art der Fehlerbehandlung eh "ungünstig", dazumal es sowieso absichtlich ein Delphi-Referenz durchsuchenTryStrToDate oder Delphi-Referenz durchsuchenStrToDateDef gibt, was man besser statt einer Exception verwenden sollte.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Codix32

Registriert seit: 23. Apr 2009
137 Beiträge
 
Delphi 2005 Personal
 
#14

AW: CompareDate gibt immer 1 aus...

  Alt 26. Mai 2015, 01:20
Und bezüglich des
Delphi-Quellcode:
    Except
     Zeitraum(now);
    end;
Einfach so was "Anderes" machen, ohne dem Bediener seinen Fehler zu nennen, ist nicht die feine englische Art.
Himitsu, was meinst Du mit "was Anderes"?
Und zusätzlich ist diese Art der Fehlerbehandlung eh "ungünstig", dazumal es sowieso absichtlich ein Delphi-Referenz durchsuchenTryStrToDate oder Delphi-Referenz durchsuchenStrToDateDef gibt, was man besser statt einer Exception verwenden sollte.
Danke Himitsu, aber so gut bin ich nicht im Programmieren. Ich bewundere allerdings Deine Kenntnisse und habe großen Respekt. Und danke für den Tip. Allerdings hat Delphi-Referenz durchsuchenEditkeydown genau das gemacht, was ich wollte.

Nochmals Allen vielen Dank
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: CompareDate gibt immer 1 aus...

  Alt 26. Mai 2015, 02: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
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz