Показать сообщение отдельно
  #1  
Старый 10.11.2019, 15:02
matador955 matador955 вне форума
Прохожий
 
Регистрация: 10.11.2019
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
Злость Мистическое изменение значения поля (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 .....
Смысл этого поля - показать, сколько дней прошло с момента оформления последнего объекта типа ORDER.

Содержимое этой вьюхи я показываю в гриде, реализованном на компоненте 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 решает проблему.

Коллеги, какие есть идеи о причинах подобной мистики?
Ответить с цитированием