powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
25 сообщений из 146, страница 1 из 6
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39887189
matador955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Коллеги, нужна помощь.

Попал в руки старый чужой проект, который надо было немного доработать. До этого никогда с FireBird дел не имел (я ораклист со стажем). При добавлении нового интерфейса в проект столкнулся с необъяснимой ошибкой. Выражается она в том, что в интерфейсе проекта в гриде одно (и только одно!) поле показывается с ошибочным значением.

Теперь подробно. В FB есть вьюха со следующим кусочком кода:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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 решает проблему.

Коллеги, какие есть идеи о причинах подобной мистики?
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39887207
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
matador955,
возможно, в приложении ты что-то меняешь в неподтвержденной транзакции? А читающая транзакция не видит. В фиб+ датасеты часто с разными транзакциями делают, проверь.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39887211
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
matador955какие есть идеи о причинах подобной мистики?

У тебя на сервере часы отстают на два дня.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39887643
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавьте в запрос такие поля
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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, 
  (select max(oo.orderdate) from orders oo where oo.pcode = mc.pcode) as date,
  CURRENT_DATE
 ...
from .....

и посмотрите, что получится
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889446
matador955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё
matador955,
возможно, в приложении ты что-то меняешь в неподтвержденной транзакции? А читающая транзакция не видит. В фиб+ датасеты часто с разными транзакциями делают, проверь.


Проверял. Неподтвержденных транзакций нет. Вообще никаких параллельных транзакций нет.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889448
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.11.2019 11:32, matador955 пишет:
>
> Проверял. Неподтвержденных транзакций нет. Вообще никаких параллельных
> транзакций нет.

как проверял?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889459
matador955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov

У тебя на сервере часы отстают на два дня.

Не отстают, время верное.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889461
matador955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий

> Проверял. Неподтвержденных транзакций нет. Вообще никаких параллельных
> транзакций нет.
как проверял?

Какая разница? Я говорю что неподтвержденных транзакций нет, и это точно.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889466
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
matador955
Мимопроходящий

> Проверял. Неподтвержденных транзакций нет. Вообще никаких параллельных
> транзакций нет.
как проверял?

Какая разница? Я говорю что неподтвержденных транзакций нет, и это точно.


Наверное, у тебя и ошибок в коде нет.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889469
matador955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Vasilisk_
Добавьте в запрос такие поля
......
и посмотрите, что получится


А вот это мне в голову не пришло, ступил. Спасибо.

Вообще, наблюдение за ситуацией наводит на идиотскую мыль о том, что фраза
Код: sql
1.
... date 'TODAY' ...


будучи вставленной во VIEW, превращается сервером в константу в момент компиляции VIEW.
Я несколько дней подряд наблюдал за поведением приложения, при том, что не прикасался к exe-файлу вообще, и даже специально запускал его не из среды разработки. Так вот, на протяжении последних 3 дней, ошибка в данных увеличивалась на минус единицу в каждый следующий день (!). Честно говоря в шоке от такого. Сейчас наплодил тестовых VIEW, проверю их после выходных (чтобы дата компиляции отличалась от текущей даты). Но если гипотеза подтвердится..... Просто нет слов.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889470
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.11.2019 11:47, matador955 пишет:
> Какая разница? Я говорю что неподтвержденных транзакций нет, и это точно.

не, мужик, с таким настроением ты слона не продашь... (С)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889471
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.11.2019 11:55, matador955 пишет:
> Вообще, наблюдение за ситуацией наводит на идиотскую мыль о том, что фраза
> ... date 'TODAY' ...
> будучи вставленной во VIEW, превращается сервером в константу в момент
> компиляции VIEW.

надо не фантазировать, а доку читать.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889472
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
matador955

Код: sql
1.
... date 'TODAY' ...



http://firebirdsql.su/doku.php?id=current_date
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889482
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
matador955
Но если гипотеза подтвердится..... Просто нет слов.

Ага.
matador955
при открытии этой View из средства SQL-разработки (IBExpert) я вижу корректное значение этого поля
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889498
matador955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё
Наверное, у тебя и ошибок в коде нет.


Мимопроходящий
не, мужик, с таким настроением ты слона не продашь... (С)


Вот за что я люблю русскоязычные форумы, так это за неистребимое желание научить тебя жизни.

Да, я не буду тратить немеряно времени на то, чтобы описывать методику проверки на наличие транзакций. Просто потому, что время будет потрачено неэффективно: у меня нет необходимости кому-то что-то доказывать, а надо найти ошибку в системе. Мне дали дельный совет про транзакции (спасибо!) - я проверил и убедился, что дело не в этом. Поэтому ищу дальше.

Мимопроходящий
надо не фантазировать, а доку читать.


Какие все блин умные.... Читаем:

https://firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-functions-contextvars.html#fblangref25-contextvars-today

'TODAY' is not a variable but a string literal. It is, however, special in the sense that when you CAST() it to a date/time type, you will get the current date.
...
'TODAY' always returns the actual date, even in PSQL modules, where CURRENT_DATE, CURRENT_TIME and CURRENT_TIMESTAMP return the same value throughout the duration of the outermost routine.


ёёёёё
Ага.
matador955
при открытии этой View из средства SQL-разработки (IBExpert) я вижу корректное значение этого поля


Я начал вспоминать, как именно проверял выдачу этой VIEW, когда получал якобы правильные данные в IBExpert. Так вот, у меня был открыт SQL-редактор с текстом VIEW, я комментировал в нем строчку "alter view ... as" и запускал на выполнение получившийся голый SELECT. Так казалось удобнее, чем писать в отдельном окне select * from view . Так что проверка была, в общем-то, невалидной - но мне и в голову не могло прийти, что один и тот же запрос может отработать по-разному, будучи запущен отдельно или внутри view. За 20 лет работы с Ораклом ничего подобного не встречал, поэтому кейс подсознательно не рассматривал.

Сегодня сделал именно select * from view - и получил в выдаче ту же ошибку в данных, что наблюдаю в приложении. Это собственно и подтолкнуло к гипотезе о некорректной отработке литерала 'TODAY' внутри view.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889505
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.11.2019 12:30, matador955 пишет:
>
> Какие все блин умные.... Читаем:
> 'TODAY' is not a variable but a string literal. It is, however, special
> in the sense that when you CAST() it to a date/time type, you will get
> the current date.

ну дык ты ж CAST не делаешь.
а вместо этого пихаешь константу.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889517
matador955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё
Вот ты какой. Тебе давай помогай, а от тебя - шиш.

Если тебе нужна идея о том, как на указанном ландшафте инструментальных средств проверить наличие параллельных транзакций - сделай отдельный тред с этим вопросом, и я с удовольствием поделюсь наработками. Но в контексте этого треда, такое обсуждение будет лишним.

Мимопроходящий
ну дык ты ж CAST не делаешь. а вместо этого пихаешь константу.

Неее, брат. В коде написано :
Код: sql
1.
... date 'TODAY' ...


а это неявный cast.
Кроме того, сама идея мне кажется сомнительной: cast не является функцией, что-то вычисляющей. Он просто выполняет преобразования типов. Вряд ли именно cast столь радикально меняет поведение константы. Впрочем, ради интереса добавлю и такой вариант для проверки, и в понедельник расскажу о результатах.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889519
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.11.2019 12:44, matador955 пишет:
>
> Неее, брат. В коде явно написано :
> ... date 'TODAY' ...

это КОНСТАНТА, блеать!
возьми для примера подёргай:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE VIEW v_DEMO(
  D1,
  D2)
AS
SELECT
  timestamp'NOW',
  CAST('NOW' AS TIMESTAMP)
FROM RDB$DATABASE;


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889552
matador955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий

это КОНСТАНТА, блеать!


Трындец.
Кстати, вот еще подтверждение нашел: 10304342 и 5468611
И ни в одной документации этого нет. Зашибись.

Что ж, проблема решена, всем спасибо.

PS Ну его нафиг этот Firebird с такими приколами, в какой-то момент решил что реально крыша едет. Пойду обратно в Оракл, там как-то поспокойнее.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889558
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.11.2019 13:09, matador955 пишет:
> И ни в одной документации этого нет.

а ты её читал?
Руководство по языку SQLОбратите внимание, что эти
сокращённые выражения вычисляются сразу же во время синтаксического
анализа, т.е. как будто оператор уже подготовлен к выполнению.
Таким образом, даже если запрос выполняется несколько раз, значение
например, для timestamp 'now' не изменится , независимо от
того, сколько времени проходит.
Если вам нужно получать нарастающее значение времени (т.е. оно должно
быть оценено при каждом вызове), используйте полный синтаксис оператора
CAST('now' as timestamp)

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889593
matador955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий

а ты её читал?
Руководство по языку SQL...



Откуда эта цитата? Я привык ориентироваться на англоязычную оригинальную (официальную) документацию, ссылку привел выше, и там ничего подобного нет.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889596
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.11.2019 13:54, matador955 пишет:
> Я привык ориентироваться на англоязычную оригинальную документацию

английская дока - кривой перевод русского оригинала.
(не шучу)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889597
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
matador955
Я начал вспоминать, как именно проверял выдачу этой VIEW, когда получал якобы правильные данные в IBExpert. Так вот, у меня был открыт SQL-редактор с текстом VIEW, я комментировал в нем строчку "alter view ... as" и запускал на выполнение получившийся голый SELECT. Так казалось удобнее, чем писать в отдельном окне select * from view . Так что проверка была, в общем-то, невалидной - но мне и в голову не могло прийти, что один и тот же запрос может отработать по-разному, будучи запущен отдельно или внутри view. За 20 лет работы с Ораклом ничего подобного не встречал, поэтому кейс подсознательно не рассматривал.

Сегодня сделал именно select * from view - и получил в выдаче ту же ошибку в данных, что наблюдаю в приложении. Это собственно и подтолкнуло к гипотезе о некорректной отработке литерала 'TODAY' внутри view.

Неправильное заключение.
IBExpert после завершения каждого запроса закрывает его хэндл, поэтому ты и получаешь разные данные без View.

Вот смотри, тестовое приложение из трех строк.
По кнопке запрос выполняется в TpFIBQuery:
Код: sql
1.
select time 'NOW', cast('NOW' as time) from RDB$DATABASE;


т.е., без всякого View.

По другой кнопке выполняется Unprepare-Prepare. Вот что получаем:
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889600
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

вывод №2: IBExpert - вещь в себе.
...
Рейтинг: 0 / 0
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
    #39889607
matador955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё

Неправильное заключение.
IBExpert после завершения каждого запроса закрывает его хэндл, поэтому ты и получаешь разные данные без View.


Понятно. В данном случае имеем, что вычисление константы происходит в момент открытия хэндла.

Но у меня ситуация несколько иная. Фиксация значения происходила в момент компиляции VIEW (и я это уже проверил экспериментально). Не очень понимаю, при чем тут хэндл.
...
Рейтинг: 0 / 0
25 сообщений из 146, страница 1 из 6
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]