Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler bei Datumsberechnung in Schleife-DbGridDrawDataCell (https://www.delphipraxis.net/130808-fehler-bei-datumsberechnung-schleife-dbgriddrawdatacell.html)

erich.wanker 13. Mär 2009 15:24


Fehler bei Datumsberechnung in Schleife-DbGridDrawDataCell
 
Hallo Leute,

ich hab hier ein witziges Problem.

Delphi7, Firebird SQL Server
In einem DBGrid (defaultdrawing=flase) - in der Procedure OnDrawDataCell rechne ich mir aus,
ob ein Datensatz in einem bestimmten Zeitraum fällt - wenn ja, setzt ich die Farben anders.

-es wird aber kein passender Datensatz gefunden, obwohl einer existiert !

Ich suche:
Datensätze, die größer/gleich 13.03.2009 sind
Datensätze, die kleiner/gleich 13.03.2009 sind
Demodatensatz/Feld'CREATE_DATE'/Wert= 13.03.2009




Delphi-Quellcode:
 

// x1,x2,x3            sind Integer;
// temp_datums_dinger sind TDateTime;
// DBGrid             ist ein TwwDBGrid;

procedure TForm.dbobenDrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
begin
...
..                
temp_bis_date := bis_datepicker.DateTime; //TDateTimePicker
temp_von_date := von_datepicker.DateTime; //TDateTimePicker
temp_my_date := data_form.STRUCTURE.FieldByName('CREATE_DATE').AsDateTime; // Query auf Table

x1:=CompareDateTime(temp_von_date,temp_my_date);
x2:=CompareDateTime(temp_bis_date,temp_my_date);
x3:=CompareDateTime(temp_bis_date,temp_von_date);

memo2.Lines.Append('');
memo2.Lines.Append(datetostr(temp_von_date)+' x1:'+inttostr(x1));
memo2.Lines.Append(datetostr(temp_bis_date)+' x2:'+inttostr(x2));
memo2.Lines.Append(datetostr(temp_my_date)+' x3:'+inttostr(x3));

if ((x1=-1) or (x1=0)) AND ((x2=1) or (x2=0)) then
 begin
  showmessage('bin drin');
 end;

..
.
Hab ein Memo auf die Form geklatscht und mir die Daten ins Memo schreiben lassen..
Dort stehen die Datumswerte richtig - aber CompareDateTime "rechnet in dem Moment nicht richtig" ???


Text aus dem Memo2:
  • 13.03.2009 x1:1
    13.03.2009 x2:1
    13.03.2009 x3:0


    13.03.2009 x1:1
    13.03.2009 x2:1
    13.03.2009 x3:0


    13.03.2009 x1:1
    13.03.2009 x2:1
    13.03.2009 x3:0



..ich versteh einfach nicht warum x1 und x2 den Wert "1" haben !

Hat jemand eine Idee ?

Vielen Dank

Erich

mkinzler 13. Mär 2009 15:34

Re: Fehler bei Datumsberechnung in Schleife-DbGridDrawDataCe
 
Besser
Delphi-Quellcode:
temp_bis_date := Trunc(bis_datepicker.Date); //TDateTimePicker
...

erich.wanker 13. Mär 2009 15:44

Re: Fehler bei Datumsberechnung in Schleife-DbGridDrawDataCe
 
das "Trunc" ist die Lösung :-) ...

...vielen Dank!

nahpets 13. Mär 2009 15:56

Re: Fehler bei Datumsberechnung in Schleife-DbGridDrawDataCe
 
Hallo,
Zitat:

Zitat von erich.wanker
das "Trunc" ist die Lösung :-) ...

...vielen Dank!

bei DateTime bitte nie vergessen, dass in den Nachkommastellen die Uhrzeit steht und die wird bei Deinen ursprunglichen Vergleichen mit berücksichtigt. Ein DateTimeToStr macht sowas dann sichtbar.

mkinzler 13. Mär 2009 16:00

Re: Fehler bei Datumsberechnung in Schleife-DbGridDrawDataCe
 
Und Trunc schneidet den Nachkommaanteil ab, was dann in jedem Fall zu 00:00:00.00 Uhr führt

nahpets 13. Mär 2009 16:11

Re: Fehler bei Datumsberechnung in Schleife-DbGridDrawDataCe
 
Zitat:

Zitat von mkinzler
Und Trunc schneidet den Nachkommaanteil ab, was dann in jedem Fall zu 00:00:00.00 Uhr führt

jaja, schon richtig, finde nur, man sollte wissen, warum man abschneidet :wink:

mkinzler 13. Mär 2009 16:13

Re: Fehler bei Datumsberechnung in Schleife-DbGridDrawDataCe
 
War ja auch eine Ergänzung zu deiner Aussage


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:41 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