|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Грабли с типом TDate
В общем решил поделится историей, как я наступил на грабли.
Есть у меня программа написанная в Дельфи которая подключается к Акцесовской БД. Вплоть до 01.05.2010 года программа работала безупречно, а вот первого мая она начала чудить. В программе активно используются операции сравнения дат. Сравнивается дата возвращаемая функцией Date с полем из БД аналогичного типа TDate. Вот тут, как оказалось и можно закопать злую собаку. Итак просматриваю код программы в отладчике и отладчик мне выдает 01.05.2010 <> 01.05.2010. Не равно и все, хоть ты тресни. После долгих танцев с бубном выявилась удивительная вещь, оказывается несмотря на то, что Дельфи заявляет что тип TDate используется для хранения даты, на самом деле он хранит еще и время, но при этом отказывается показывать это самое время в числе. Если вам Дельфи говорит, что значение типа TDate = 14566, то это не так, на самом деле там может быть 14566,11 или 14566,67. И естественно сравнение этих чисел не даст равенства. Дальнейшие изыскания показали, что я в программе случайно записывал данные в поле TDate как TDateTime и в итоге благополучно наступил на грабли. Вывод - осторожно обращайтесь с типом TDate - проверить, что в переменную этого типа на самом деле записывается, увидеть в отладчике не получится. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 25.05.2010 в 17:45. |