|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
Коллеги, нужна помощь. Попал в руки старый чужой проект, который надо было немного доработать. До этого никогда с FireBird дел не имел (я ораклист со стажем). При добавлении нового интерфейса в проект столкнулся с необъяснимой ошибкой. Выражается она в том, что в интерфейсе проекта в гриде одно (и только одно!) поле показывается с ошибочным значением. Теперь подробно. В FB есть вьюха со следующим кусочком кода: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Смысл этого поля - показать, сколько дней прошло с момента оформления последнего объекта типа 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 решает проблему. Коллеги, какие есть идеи о причинах подобной мистики? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 15:08 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
matador955, возможно, в приложении ты что-то меняешь в неподтвержденной транзакции? А читающая транзакция не видит. В фиб+ датасеты часто с разными транзакциями делают, проверь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 17:53 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
matador955какие есть идеи о причинах подобной мистики? У тебя на сервере часы отстают на два дня. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
10.11.2019, 18:15 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
Добавьте в запрос такие поля Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
и посмотрите, что получится ... |
|||
:
Нравится:
Не нравится:
|
|||
11.11.2019, 17:53 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
ёёёёё matador955, возможно, в приложении ты что-то меняешь в неподтвержденной транзакции? А читающая транзакция не видит. В фиб+ датасеты часто с разными транзакциями делают, проверь. Проверял. Неподтвержденных транзакций нет. Вообще никаких параллельных транзакций нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 11:32 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
15.11.2019 11:32, matador955 пишет: > > Проверял. Неподтвержденных транзакций нет. Вообще никаких параллельных > транзакций нет. как проверял? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 11:33 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov У тебя на сервере часы отстают на два дня. Не отстают, время верное. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 11:46 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
Мимопроходящий > Проверял. Неподтвержденных транзакций нет. Вообще никаких параллельных > транзакций нет. как проверял? Какая разница? Я говорю что неподтвержденных транзакций нет, и это точно. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 11:47 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
matador955 Мимопроходящий > Проверял. Неподтвержденных транзакций нет. Вообще никаких параллельных > транзакций нет. как проверял? Какая разница? Я говорю что неподтвержденных транзакций нет, и это точно. Наверное, у тебя и ошибок в коде нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 11:53 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
_Vasilisk_ Добавьте в запрос такие поля ...... и посмотрите, что получится А вот это мне в голову не пришло, ступил. Спасибо. Вообще, наблюдение за ситуацией наводит на идиотскую мыль о том, что фраза Код: sql 1.
будучи вставленной во VIEW, превращается сервером в константу в момент компиляции VIEW. Я несколько дней подряд наблюдал за поведением приложения, при том, что не прикасался к exe-файлу вообще, и даже специально запускал его не из среды разработки. Так вот, на протяжении последних 3 дней, ошибка в данных увеличивалась на минус единицу в каждый следующий день (!). Честно говоря в шоке от такого. Сейчас наплодил тестовых VIEW, проверю их после выходных (чтобы дата компиляции отличалась от текущей даты). Но если гипотеза подтвердится..... Просто нет слов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 11:55 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
15.11.2019 11:47, matador955 пишет: > Какая разница? Я говорю что неподтвержденных транзакций нет, и это точно. не, мужик, с таким настроением ты слона не продашь... (С) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 11:55 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
15.11.2019 11:55, matador955 пишет: > Вообще, наблюдение за ситуацией наводит на идиотскую мыль о том, что фраза > ... date 'TODAY' ... > будучи вставленной во VIEW, превращается сервером в константу в момент > компиляции VIEW. надо не фантазировать, а доку читать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 11:57 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 11:58 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
matador955 Но если гипотеза подтвердится..... Просто нет слов. Ага. matador955 при открытии этой View из средства SQL-разработки (IBExpert) я вижу корректное значение этого поля ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 12:09 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
ёёёёё Наверное, у тебя и ошибок в коде нет. Мимопроходящий не, мужик, с таким настроением ты слона не продашь... (С) Вот за что я люблю русскоязычные форумы, так это за неистребимое желание научить тебя жизни. Да, я не буду тратить немеряно времени на то, чтобы описывать методику проверки на наличие транзакций. Просто потому, что время будет потрачено неэффективно: у меня нет необходимости кому-то что-то доказывать, а надо найти ошибку в системе. Мне дали дельный совет про транзакции (спасибо!) - я проверил и убедился, что дело не в этом. Поэтому ищу дальше. Мимопроходящий надо не фантазировать, а доку читать. Какие все блин умные.... Читаем: 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. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 12:30 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 12:37 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
ёёёёё Вот ты какой. Тебе давай помогай, а от тебя - шиш. Если тебе нужна идея о том, как на указанном ландшафте инструментальных средств проверить наличие параллельных транзакций - сделай отдельный тред с этим вопросом, и я с удовольствием поделюсь наработками. Но в контексте этого треда, такое обсуждение будет лишним. Мимопроходящий ну дык ты ж CAST не делаешь. а вместо этого пихаешь константу. Неее, брат. В коде написано : Код: sql 1.
а это неявный cast. Кроме того, сама идея мне кажется сомнительной: cast не является функцией, что-то вычисляющей. Он просто выполняет преобразования типов. Вряд ли именно cast столь радикально меняет поведение константы. Впрочем, ради интереса добавлю и такой вариант для проверки, и в понедельник расскажу о результатах. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 12:44 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
15.11.2019 12:44, matador955 пишет: > > Неее, брат. В коде явно написано : > ... date 'TODAY' ... это КОНСТАНТА, блеать! возьми для примера подёргай: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 12:47 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
Мимопроходящий это КОНСТАНТА, блеать! Трындец. Кстати, вот еще подтверждение нашел: 10304342 и 5468611 И ни в одной документации этого нет. Зашибись. Что ж, проблема решена, всем спасибо. PS Ну его нафиг этот Firebird с такими приколами, в какой-то момент решил что реально крыша едет. Пойду обратно в Оракл, там как-то поспокойнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 13:09 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
15.11.2019 13:09, matador955 пишет: > И ни в одной документации этого нет. а ты её читал? Руководство по языку SQLОбратите внимание, что эти сокращённые выражения вычисляются сразу же во время синтаксического анализа, т.е. как будто оператор уже подготовлен к выполнению. Таким образом, даже если запрос выполняется несколько раз, значение например, для timestamp 'now' не изменится , независимо от того, сколько времени проходит. Если вам нужно получать нарастающее значение времени (т.е. оно должно быть оценено при каждом вызове), используйте полный синтаксис оператора CAST('now' as timestamp) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 13:18 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
Мимопроходящий а ты её читал? Руководство по языку SQL... Откуда эта цитата? Я привык ориентироваться на англоязычную оригинальную (официальную) документацию, ссылку привел выше, и там ничего подобного нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 13:54 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
15.11.2019 13:54, matador955 пишет: > Я привык ориентироваться на англоязычную оригинальную документацию английская дока - кривой перевод русского оригинала. (не шучу) Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 14:01 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
matador955 Я начал вспоминать, как именно проверял выдачу этой VIEW, когда получал якобы правильные данные в IBExpert. Так вот, у меня был открыт SQL-редактор с текстом VIEW, я комментировал в нем строчку "alter view ... as" и запускал на выполнение получившийся голый SELECT. Так казалось удобнее, чем писать в отдельном окне select * from view . Так что проверка была, в общем-то, невалидной - но мне и в голову не могло прийти, что один и тот же запрос может отработать по-разному, будучи запущен отдельно или внутри view. За 20 лет работы с Ораклом ничего подобного не встречал, поэтому кейс подсознательно не рассматривал. Сегодня сделал именно select * from view - и получил в выдаче ту же ошибку в данных, что наблюдаю в приложении. Это собственно и подтолкнуло к гипотезе о некорректной отработке литерала 'TODAY' внутри view. Неправильное заключение. IBExpert после завершения каждого запроса закрывает его хэндл, поэтому ты и получаешь разные данные без View. Вот смотри, тестовое приложение из трех строк. По кнопке запрос выполняется в TpFIBQuery: Код: sql 1.
т.е., без всякого View. По другой кнопке выполняется Unprepare-Prepare. Вот что получаем: ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 14:01 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
ёёёёё, вывод №2: IBExpert - вещь в себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 14:03 |
|
Необъяснимая ошибка визуализации значения поля (D7+FB25+FIBplus)
|
|||
---|---|---|---|
#18+
ёёёёё Неправильное заключение. IBExpert после завершения каждого запроса закрывает его хэндл, поэтому ты и получаешь разные данные без View. Понятно. В данном случае имеем, что вычисление константы происходит в момент открытия хэндла. Но у меня ситуация несколько иная. Фиксация значения происходила в момент компиляции VIEW (и я это уже проверил экспериментально). Не очень понимаю, при чем тут хэндл. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.11.2019, 14:07 |
|
|
start [/forum/topic.php?fid=40&fpage=18&tid=1560518]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
47ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 168ms |
0 / 0 |