|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Мистическое изменение значения поля (D7+FB25+FIBplus)
Коллеги, нужна помощь.
Попал в руки старый чужой проект, который надо было немного доработать. До этого никогда с FireBird дел не имел (я ораклист со стажем). При добавлении нового интерфейса в проект столкнулся с необъяснимой ошибкой. Выражается она в том, что в интерфейсе проекта в гриде одно (и только одно!) поле показывается с ошибочным значением. Теперь подробно. В FB есть вьюха со следующим кусочком кода: Код:
create view ... as select .... ,cast(iif(mc.is_closed=1,null, DATEDIFF( DAY , cast(( select max(oo.orderdate) from orders oo where oo.pcode = mc.pcode ) as date), date 'TODAY') ) as bigint) as last_visit, ... from ..... Содержимое этой вьюхи я показываю в гриде, реализованном на компоненте TDBGridEh из библиотеки EhLib версии 4. Для доступа к данным используется библиотека FIBplus версии 7.6, компонент FIBDataSet. В компоненте созданы статические поля (Fields), т.к. есть потребность в полях тип Lookup. Теперь собственно проблема: при открытии этой View из средства SQL-разработки (IBExpert) я вижу корректное значение этого поля (неоднократно проверял вручную по исходным таблицам). Но вот при запуске моего проекта в соответствующей колонке видны значения на 2 или 3 единицы МЕНЬШЕ !!!!! Ну т.е. через IBExpert вижу, например, значение поля "3", а в интерфейсе своего проекта - "1". Подобное уменьшение значения происходит по всей колонке (т.е. по всем строкам датасета). Столкнувшись с проблемой впервые, подумал, что причина кроется в статически созданных полях (я тогда активно менял наполнение той самой вьюхи, и подумал, что идет неправильный мапинг полей на буфер строки данных ), и заново пересоздал все Fields объекта FIBDataSet. Ошибка ушла, значения стали показываться корректные. НО! Через несколько дней, НА ТОМ ЖЕ exe-ФАЙЛЕ ошибка вернулась. Я опять запускаю Delphi, удаляю все Fields и пересоздаю их заново - проблема уходит. Опять не трогаю проект, опять проходит 2-3 дня - и опять ошибка в визуализации!!!! И опять пересоздание Fields решает проблему. Коллеги, какие есть идеи о причинах подобной мистики? |
#2
|
||||
|
||||
А в проблемном столбце грида свойство LookupParams-LookupCache отключено?
|
#3
|
||||
|
||||
Цитата:
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. |
#4
|
|||
|
|||
Цитата:
LookupCache=false, проверил сейчас. Так что не оно. Вообще, наблюдение за ситуацией наводит на идиотскую мыль о том, что фраза "... date 'TODAY' ...", будучи вставлена во VIEW, превращается сервером в константу в момент компиляции VIEW. Я несколько дней подряд наблюдал за поведением приложения, при том, что не прикасался к exe-файлу вообще, и даже специально запускал его не из среды разработки. Так вот, на протяжении последних 3 дней, ошибка в данных увеличивалась на минус единицу в каждый следующий день (!). Честно говоря в шоке от такого. Сейчас наплодил тестовых VIEW, проверю их после выходных (чтобы дата компиляции отличалась от текущей даты). Но если гипотеза подтвердится..... Просто нет слов. |
#5
|
|||
|
|||
Еще попробуй использовать CURRENT_DATE и NOW вместо TODAY.
|