| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Не присваиваются значения в записи Record |
| Автор: Akella 2.8.2010, 12:27 | ||||||
Есть запись
есть глобальная переменная
есть в процедуре код:
код работает, в Case заходит (пробовал все строки), но значения dtStart и dtEnd не меняются Смотрю дебаггером. Как были до присвоения, так и остались: 2,6395166155e-308 и 5,1542870537e-278 соответственно Сделал обе переменные локальными, так всё работает. Что не так с типом TDate в записях? D2007. |
| Автор: Akella 2.8.2010, 12:47 | ||
Странно, если добавить в конце
то показывается правильная дата %) |
| Автор: Демо 2.8.2010, 13:01 |
| А структура где-то используется? |
| Автор: Akella 2.8.2010, 13:13 | ||
В какой-то из процедур была объявлена ещё одна переменная локально
Видать как-то они пересеклись, т.к. после того, как оставил только глобальную, проблема исчезла. |
| Автор: Frees 2.8.2010, 13:14 |
| может это фича оптимизатора, раз ты только пишешь в StatisticsDatas то это все лишнее, попробуй убрать оптимизацию |
| Автор: Keeper89 2.8.2010, 13:15 | ||
| Демо, +1 Akella, вообще, раз
лучше использовать везде не now, а Date. |
| Автор: xkor 2.8.2010, 16:30 |
| Keeper89, чем лучше? Date просто возвращает результат Now отбросив дробную часть. |
| Автор: k0rvin 2.8.2010, 17:31 | ||||
как-то это неправильно |
| Автор: Keeper89 2.8.2010, 23:46 |
| xkor, просто насколько я помню Now возвращает TDateTime, а не Date, это конечно не принципиально. Хотя, не прав и то, и то TDateTime |
| Автор: Akella 3.8.2010, 09:00 |
Я и использовал именно Date с самого начала k0rvin, Почему? Предложи лучший вариант. Добавлено через 24 секунды Да пофиг |
| Автор: CodeMonkey 3.8.2010, 10:24 | ||
Потрясающее наплевательство к качеству кода. Кообще-то Keeper прав: использовать надо Date, потому что она возвращает только дату, Now - возвращает дату и время. Если мне достанется ваш код и я не видел, как вы заполняете запись, то, смотря на объявление:
а). Я решу, что в dtStart лежит дата и время? или всё же б). Я решу, что в dtStart лежит только дата? Наверное всё же второе, как вы считаете? И тогда я начну делать какие-то проверки и вычисления, и для меня станет полной неожиданностью, что у dtStart ВНЕЗАПНО появляется дробная часть. Не надо врать компилятору - целее будете. Хотите использовать Now - измените тип на TDateTime. То, что TDateTime = TTime и TDate не имеет никакого значения. Зачем создавать потенциальное место для бага? |
| Автор: CodeMonkey 3.8.2010, 14:23 | ||||||
Отсюда: Да ну. Пусть:
Теперь мы хотим определить, сегодня ли было начало:
Надо ли говорить, что никакого сообщения не появится? Но стоит исправить этот код на правильный вариант:
Как баг исчезает! |
| Автор: Akella 3.8.2010, 14:37 |
| Да, т.к. сравнение идёт вещественных чисел. Спасибо. |