1

我正在尝试计算网格中两个日期之间的天数。这种工作但起初产生奇怪的结果:这是 TEMP 表的 Oncalculate 字段事件:

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

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

4

1 回答 1

2

这就是你要求的...

Delphi 将日期存储为自 1899 年 12 月 31 日以来的天数,因此当您编写第一个日期时,您正在执行 40731(自 1899 年 12 月 31 日以来的天数)- 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. 
于 2011-07-07T08:41:08.353 回答