Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Исключение EConvertError c SInvalidDateTime [D4, WinXP]


Страницы:   1 2

Германн ©   (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).

Может исключение и не здесь. Следовало бы запомнить дату, указанную в тескте исключения.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо