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

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

Нестабильно работет StrToDateTime() [D2005]


Страницы:   1 2 3

sdfdh ©   (2014-04-10 20:49:00) 

Здравствуйте!
Необходимо кодировать текст в дату. Использую следующий код:

procedure TForm1.Button1Click(Sender: TObject);
Var
StrDate : string;
Fmt     : TFormatSettings;
dt      : TDateTime;
begin
fmt.ShortDateFormat:='dd.mm.yyyy';
fmt.DateSeparator  :='.';
StrDate:='02.04.2014';
dt:=StrToDateTime(StrDate,Fmt);

end;


Переменной dt присваивается 02.04.2014

Однако, если я тот же код!!! Один в один, вставляю в свое приложение, то этот же код уже не работает. dt=30.12.1899

В чем проблема? Что не так?


junglecat   (2014-04-13 23:26:00) [1]

> [41] Dimka Maslov ©   (13.04.14 23:23)
> EncodeDate никто не пробовал использовать?

а он тоже нестабильно работает?


Dimka Maslov   (2014-04-13 23:23:00) [2]

EncodeDateникто не пробовал использовать?


Германн   (2014-04-12 01:09:00) [3]

Удалено модератором
Примечание: Создание пустых сообщений


Inovet   (2014-04-12 00:23:00) [4]

> [38] Германн ©   (12.04.14 00:21)

Ну я вроде как понял, что в отладчике уже потом было обнаружено, после неправильной работы где-то в программе, где переменная следовательно используется. Или я тогда не понял причину паники.


Германн   (2014-04-12 00:21:00) [5]


> САМОЕ ГЛАВНОЕ: я нашел комбинацию, приводящую к верному/невернму
> решению.

Эта "комбинация" давно уже была названа в MBo ©   (11.04.14 07:32) [31]
И это не ошибка компилятора. Это ошибка программиста, который не знает как работает оптимизация компилятора Дельфи.
Но с некоторой натяжкой это можно назвать ошибкой отладчика Дельфи.


sdfdh   (2014-04-11 22:40:00) [6]

Коллеги!
За вешающее сообщение с решением! Возможно, кому-то в будущем поможет!

1. Все сообщения выше о том. что "типа "photoshop", конечно полная  херня! Конечно, мне заняться больше не чем как верстать Вам страничку с выдуманной ошибкой.

2. ПО всей видимости то, на что я натолкнулся - это ошибка компилятора Delphi. Не знаю  какая комбинация событий к ней приводит, так как, как я писал вверху в чистом новом проекте все работает ОК!

3. САМОЕ ГЛАВНОЕ: я нашел комбинацию, приводящую к верному/невернму решению. Комментировать ничего не буду, все и так ясно. Отдельное спасибо brotherза правильное направление решения!

Правильный ответ компилятора:
http://s1.ipicture.ru/uploads/20140411/hPeFJft3.jpg

Ошибочный ответ компилятора:
http://s1.ipicture.ru/uploads/20140411/6SIu1Aem.jpg

Блин! посмотрел на скрин. НИХЕРА не видно!
В общем во втором случае я комментул строку:
    {cName:=DateTimeToStr(DateStartGantt);  }

ВОт так!
Всем спасибо!
Проблема решена!


sdfdh   (2014-04-11 21:10:00) [7]

В общем понадобилось тоже самое в другой процедуре. Все то же! Та же ошибка!
Буду ставить другую Delphi  и вручную переносить приложение...


junglecat   (2014-04-11 10:50:00) [8]

а может, это вообще фотошоп?


Германн   (2014-04-11 10:42:00) [9]


>  правда, на скриншоте синяя точка на данной строчке есть

Но на скриншоте значение dt в тултипе показано. Может отладчик уже про эту переменную забыл?


brother   (2014-04-11 07:47:00) [10]

[32] видимо да, но

> правда, на скриншоте синяя точка на данной строчке есть


Inovet   (2014-04-11 07:40:00) [11]

Короче, надо было сразу писать
 ShowMessage(DateTimeToStr(dt));
вместо "Я закончил".


MBo   (2014-04-11 07:32:00) [12]

В приведенном коде не видно, чтобы переменная dt использовалась. Компилятор может оптимизировать код, не выполняя ненужную работу
(правда, на скриншоте синяя точка на данной строчке есть)


brother   (2014-04-11 07:27:00) [13]

а где по коду он их задавливает хз? и мой пример же исключения не вызывает!


Inovet   (2014-04-11 07:26:00) [14]

> [28] brother ©   (11.04.14 07:24)
> то будет исключение

А автор их задавиливает. Не?


brother   (2014-04-11 07:24:00) [15]

> Давилось.

в описании к функции сказано, что если что-то не так, то будет исключение...


brother   (2014-04-11 07:24:00) [16]

> dt:= 0;

инициализация, но вообще, если небыло исключения, то StrToDateTime также инициализировало бы переменную, впрочем у меня д7, так что хз что там в д2005...


Inovet   (2014-04-11 07:23:00) [17]

> [24] brother ©   (11.04.14 07:20)
> ведь исключения нет?

Давилось.


sdfdh   (2014-04-11 07:22:00) [18]

Ну да, исключений не было.
Попытаюсь сегодня поудалять последовательно из Вашего кода строки, посмотреть на какой все становится по старому. Потом отпишусь.

Еще раз спасибо!


brother   (2014-04-11 07:20:00) [19]

хотя, это не ответило на вопрос: почему? ибо Ваш код и так работал...ведь исключения нет?


brother   (2014-04-11 07:18:00) [20]

а варнинги надо читать... ну и на всяк проверить на исключения...


Страницы:   1 2 3

Наверх

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