Здравствуйте,
Максим Гумеров.
Заинтересовался вашей статьей и решил попробовать Вашего наследника TDataSet.
При этом столкнулся с ошибкой при отображении даты.
Как правильно поместить значение даты в Data?
У меня такой код
TDateTime(Data) := TMyRecord(List[Index]).Date;
вызывает ошибку
---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EConvertError with message ''0.37904' is not a valid timestamp'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
Нашел, что ошибка возникает здесь:
function NativeToDateTime(DataType: TFieldType; Data: TDateTimeRec): TDateTime;
var
TimeStamp: TTimeStamp;
begin
case DataType of
ftDate:
begin
TimeStamp.Time := 0;
TimeStamp.Date := Data.Date;
end;
ftTime:
begin
TimeStamp.Time := Data.Time;
TimeStamp.Date := DateDelta;
end;
else
try
TimeStamp := MSecsToTimeStamp(Data.DateTime); // Попадает сюда
except
TimeStamp.Time := 0;
TimeStamp.Date := 0;
end;
end;
Result := TimeStampToDateTime(TimeStamp); // и здесь возникает ошибка
end;
function TimeStampToDateTime(const TimeStamp: TTimeStamp): TDateTime;
asm
PUSH EBX
{$IFDEF PIC}
PUSH EAX
CALL GetGOT
MOV EBX,EAX
POP EAX
{$ELSE}
XOR EBX,EBX
{$ENDIF}
PUSH EAX
CALL ValidateTimeStamp // Вот тут вот
POP EAX
MOV ECX,[EAX].TTimeStamp.Time
MOV EAX,[EAX].TTimeStamp.Date
SUB EAX,DateDelta
IMUL [EBX].IMSecsPerDay
OR EDX,EDX
JNS @@1
SUB EAX,ECX
SBB EDX,0
JMP @@2
@@1: ADD EAX,ECX
ADC EDX,0
@@2: PUSH EDX
PUSH EAX
FILD QWORD PTR [ESP]
FDIV [EBX].FMSecsPerDay
ADD ESP,8
POP EBX
end;
В чем причина, никак не могу понять.
С уважением, Артем.