2011-07-07 74 views
1

我试图计算网格中两个日期之间的差异。 这kind'a的作品,但在生产第一怪结果: 这是TEMP表的Oncalculate领域事件:网格中两个日期之间的差异天数

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

BIV_OD和BIV_DO是日期字段(即喜欢... Date_From - 日期间)。 当我选择网格中的第一个日期(BIV_OD)时,我的DAYS字段首先显示40731(??) 然后,当我输入第二个日期时,一切正常。 这是为什么?

+0

该网格是tcxgrid ... – user763539

回答

2

这就是你问什么...

德尔福保存日期,天数,因为31/12/1899所以,当你写你正在做40731的第一天(31/12以来的天数/ 1899) - 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