дней между двумя датами в сетке - PullRequest
1 голос
/ 07 июля 2011

Я пытаюсь вычислить дни между разницей между двумя датами в сетке.Этот вид работает, но сначала выдает странный результат: это событие Oncalculate fields таблицы TEMP:

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 (??), а затем, когда я вводю вторую дату, все работает нормально.Почему это так?

1 Ответ

2 голосов
/ 07 июля 2011

Это то, что вы просили ...

Delphi хранит даты как количество дней с 31.12.1899, поэтому, когда вы пишете первую дату, вы делаете 40731 (количество дней с 3112/1899) - 0, поскольку вы еще не ввели вторую дату.

Решение состоит в том, чтобы не рассчитывать поле, если обе даты не заполнены.установить для столбца сетки тип данных целое число.

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. 
...