2011-07-07 19 views
1

グリッド内の2つの日付の差の曜日を計算しようとしています。 これはkind'a最初の奇妙な結果で動作しますが、生成します。これは、TEMP表のOncalculateフィールドイベントです :日グリッド内の2つの日付の間の差

TEMP.FieldByName('DAYS').asstring := IntToStr(Daysbetween(TEMP.FieldByName('BIV_OD').AsDateTime,TEMP.FieldByName('BIV_DO').AsDateTime)); 

はBIV_ODとBIV_DOは、日付フィールド(すなわちなどの... DATE_FROM - 日-に。)されています グリッドの最初の日付(BIV_OD)を選択すると、最初の40731(??)のDAYSフィールド 2番目の日付を入力するとすべて正常に動作します。 なぜですか?

+0

グリッドはtcxgridです... – user763539

答えて

2

あなたが尋ねたものだ...

Delphiの店あなたが最初の日付を書くときに、あなたが12分の31以降(の日数を40731をやっている31/12/1899からの日数として日付/ 1899) - まだ2番目の日付を入力していないので0です。

ソリューションは、両方の日付が記入されていない限り、フィールドを計算することはないだろう。

if (Temp.FieldByName('BIV_OD').AsDateTime > 0) and (TEMP.FieldByName('BIV_DO').AsDateTime > 0) then 
    TEMP.FieldByName('DAYS').AsString:= IntToStr(Daysbetween(TEMP.FieldByName('BIV_OD').AsDateTime,TEMP.FieldByName('BIV_DO').AsDateTime)) 
else 
    TEMP.FieldByName('DAYS').AsString:= ''; //don't display anything. 

私は整数のデータ型を持つようにグリッド列を設定すると思いますが。

if (Temp.FieldByName('BIV_OD').AsDateTime > 0) and (TEMP.FieldByName('BIV_DO').AsDateTime > 0) then 
    TEMP.FieldByName('DAYS').AsInteger:= Daysbetween(TEMP.FieldByName('BIV_OD').AsDateTime,TEMP.FieldByName('BIV_DO').AsDateTime) 
else 
    TEMP.FieldByName('DAYS').Value := Null; //don't display anything. 
+0

あなたは完全に正しいです...ありがとう – user763539

関連する問題