![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Исключение EConvertError c SInvalidDateTime [D4, WinXP]
Германн © (2005-10-15 00:53:00)Ткните меня плиииз носом в дерьмо, если кто знает как подобное исключение может выдаваться в таком варианте:
try
FieldByName('EvDateTime').AsDateTime:=StrToDateTime(BCDDateTimeToStr(Dt));
except
on EConvertError do
FieldByName('EvDateTime').AsDateTime:=StrToDateTime('01.01.80 00:00');
end;
или в таком
try
FieldByName('EvDateTime').AsDateTime:=StrToDateTime(BCDDateTimeToStr(Dt));
except
FieldByName('EvDateTime').AsDateTime:=StrToDateTime('01.01.80 00:00');
end;
P.S. работа не под отладчиком.
Проверил всю свою программу. Явно, функция StrToDateTime вызывается только там. Неявные её вызовы, вроде бы, в программе отсутствуют. (XXX:=TStringField.AsDateTime не пользую. TDateTimeField.AsString:=... - то же. Фильтр на таблицу - то же не использую. Это все возможные вызовы StrToDateTime, которые я накопал в Delphi\Source. Есть ещё, правда и IniFiles, но это я исключил, поскольку в нём я не использую ДатуВремя.
P.P.S.
Нифига не понял, зачем было в Consts объявлять ещё раз константу SInvalidDateTime, которая уже объявлена в SysConsts, но с другим форматом вывода!
Германн (2005-10-16 00:02:00) [21]sniknik © (15.10.05 19:47) [12]
> > это моя собственная.
> aaa... а ошибку значит ищеш в стандартной, проверенной многими
> и многими ее использовавшими...
> > ... Явно, функция StrToDateTime вызывается только там.
> Неявные её вызовы ...
Блин, ну ты и написал. Вопрос то хоть прочёл? Или "как всегда"?
Не ищу я ошибки в стандартной StrToDateTime!
Я ищу Как ёклмнИсключение указанное в сабже вылезло из блока try except end. Кстати в той самой моей функции происходит как раз преобразование данных в строку.
sniknik (2005-10-15 19:47:00) [22]> это моя собственная.
aaa... а ошибку значит ищеш в стандартной, проверенной многими и многими ее использовавшими...
> ... Явно, функция StrToDateTime вызывается только там. Неявные её вызовы ...
========================================
- гражданин, чего это вы тут под фанарем на карачках ползаете?
- да, я там в подворотне десятку потерял, вот ищу...
- чего вы ее здесь ищете? если там потеряли.
- а здесь светлее!
Германн (2005-10-15 18:54:00) [23]2 sniknik © (15.10.05 14:45) [10]
Не. BCDDateTimeToStr - это моя собственная.
sniknik (2005-10-15 14:45:00) [24]что за функция BCDDateTimeToStr? и нет ли там же где взял эту другой BCDDateTimeToDateTime?
Германн (2005-10-15 03:12:00) [25]2 GuAV © (15.10.05 02:57) [7]
Ну дык ещё раз! В Д4 - оборзел, тьфу ты, обозрел :) всё, что смог! Но ничего не нашёл!
Германн (2005-10-15 03:01:00) [26]2 GuAV © (15.10.05 02:46) [6]
Ну, так это же от Д7. А у меня Д4.
2 GuAV © (15.10.05 02:45) [5]
>Или следует поискать вызовы ещё, или настолько тяжелый (и невероятный) случай, что память под константу портится.
Имхо, может и портится, но как?
GuAV (2005-10-15 02:57:00) [27]FloatToDateTime и EncodeDateTime, DecodeDateTime из DateUtils тоже понимают это исключение, а
GuAV (2005-10-15 02:46:00) [28]
>> А варианты ? Или их в четвёрке ещё нет ?
>>
>
>
> Не понял! Это ты об чём?
D:\Program Files\Borland\Delphi7\Source\Indy\IdFTPList.pas
362 AItem.ModifiedDate := StrToDateTime(LModified);
D:\Program Files\Borland\Delphi7\Source\Indy\IdGlobal.pas
209 function GmtOffsetStrToDateTime(S: string): TDateTime;
1228 function GmtOffsetStrToDateTime(S: string): TDateTime;
1257 DateTimeOffset := GmtOffsetStrToDateTime(S);
D:\Program Files\Borland\Delphi7\Source\Rtl\Common\IniFiles.pas
225 Result := StrToDateTime(DateStr);
D:\Program Files\Borland\Delphi7\Source\Rtl\Sys\SysUtils.pas
2248 { StrToDateTime converts the given string to a date and time value. The
2253 function StrToDateTime(const S: string): TDateTime; overload;
2254 function StrToDateTime(const S: string;
2257 function StrToDateTimeDef(const S: string;
2259 function StrToDateTimeDef(const S: string; const Default: TDateTime;
2262 function TryStrToDateTime(const S: string;
2264 function TryStrToDateTime(const S: string; out Value: TDateTime;
2375 '"at" hh:mm AM/PM', StrToDateTime('2/15/95 10:30am'));
12650 function StrToDateTime(const S: string): TDateTime;
12652 if not TryStrToDateTime(S, Result) then
12656 function StrToDateTime(const S: string;
12659 if not TryStrToDateTime(S, Result, FormatSettings) then
12663 function StrToDateTimeDef(const S: string; const Default: TDateTime): TDateTime;
12665 if not TryStrToDateTime(S, Result) then
12669 function StrToDateTimeDef(const S: string; const Default: TDateTime;
12672 if not TryStrToDateTime(S, Result, FormatSettings) then
12676 function TryStrToDateTime(const S: string; out Value: TDateTime): Boolean;
12696 function TryStrToDateTime(const S: string; out Value: TDateTime;
D:\Program Files\Borland\Delphi7\Source\Rtl\Sys\VarUtils.pas
795 Dest.VDate := StrToDateTime(WideString(LSource.VOleStr));
1133 Result := CResult[TryStrToDateTime(strIn, dateOut)];
D:\Program Files\Borland\Delphi7\Source\ToolsAPI\DesignEditors.pas
1963 else DT := StrToDateTime(Value);
D:\Program Files\Borland\Delphi7\Source\Vcl\ComCtrls.pas
21517 DT := StrToDateTime(pszUserString);
D:\Program Files\Borland\Delphi7\Source\Vcl\DB.pas
4317 Result := StrToDateTime(GetAsString);
5160 DateTime := StrToDateTime(Value);
D:\Program Files\Borland\Delphi7\Source\Vcl\DBCommon.pas
927 DateTime := StrToDateTime(string(TVarData(Value).VString)) else
D:\Program Files\Borland\Delphi7\Source\Vcl\IBSQL.pas
1241 SetAsDateTime(StrToDateTime(Value))
D:\Program Files\Borland\Delphi7\Source\Vcl\SqlTimSt.pas
609 Result := TryStrToDateTime(S, DT);
D:\Program Files\Borland\Delphi7\Source\WebSnap\xmlutil.pas
562 Date := StrToDateTime(DateStr);
GuAV (2005-10-15 02:45:00) [29]Тогда два варианта. Или следует поискать вызовы ещё, или настолько тяжелый (и невероятный) случай, что память под константу портится. У меня, ктати grep search выдал много результатов, не только IniFiles.
Германн (2005-10-15 02:43:00) [30]
> GuAV © (15.10.05 02:30) [2]
>
>
> > Это все возможные вызовы StrToDateTime, которые я
> > накопал в Delphi\Source.
>
>
> А варианты ? Или их в четвёрке ещё нет ?
>
Не понял! Это ты об чём?
Германн (2005-10-15 02:39:00) [31]2 GuAV © (15.10.05 02:23) [1]
Запоминать дату тут нет нужды. В тексте исключения приведено: ' ', т.е. пробел.
GuAV (2005-10-15 02:30:00) [32]
> Это все возможные вызовы StrToDateTime, которые я
> накопал в Delphi\Source.
А варианты ? Или их в четвёрке ещё нет ?
GuAV (2005-10-15 02:23:00) [33]Да хотя бы так:
DateSeparator := '/';
StrToDateTime('01.01.80 00:00');
Причём, DateSeparator изначально берётся из настроек системы, поэтому поведение может различатся на различных машинах.
В D7 я бы порекомендовал другую overloaded версию. В данном случае, видимо, следует явно задать DateSeparator или писать дату числом (const 01_01_80__18_00=29221).
Может исключение и не здесь. Следовало бы запомнить дату, указанную в тескте исключения.