我正在尝试计算网格中两个日期之间差异的天数。 这种工作但最初会产生奇怪的结果: 这是TEMP表的Oncalculate fields事件:
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(??) 然后当我输入第二个日期时一切正常。 那是为什么?
答案 0 :(得分:2)
这就是你要求的......
德尔福将日期存储为自1988年12月31日以来的天数,所以当您写第一个日期时,您正在做40731(自18/12/18以来的天数) - 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.