12.04.2021, 09:16 | #1 |
Участник
|
DAX09 при попытке фильтрации по значению */* ошибка SQL
Привет.
Подскажите а поведение AX при попытке отфильтровать в любом поле формы по значению */* или только с одной звездочкой /* или */ приводит к ошибке: Невозможно выбрать запись в <Имя таблицы> (<Сист. имя таб.>). База данных SQL обнаружила ошибку. Вопрос, это нормальное поведение? Не должна ли система просто игнорировать такой запрос? Т.е. без вывода каких либо сообщений. Ничего не нашлось --> пустая форма. Последний раз редактировалось oleggy; 12.04.2021 в 09:47. |
|
12.04.2021, 10:08 | #2 |
Участник
|
У меня не воспроизвелось. Фильтрует корректно. AX2009
У вас база данных синхронизируется без ошибок? |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
12.04.2021, 10:50 | #3 |
Участник
|
Цитата:
oleggy, "фильтруете" при помощи query? и не экранируете ваши звездочки при помощи SysQuery::value? * - это спец.символ в аксапте https://axapta.mazzy.ru/lib/search/ в MS SQL аксаптовская неэкранированная звездочка транслируется в спец.символ % Всегда используйте SysQuery::value почему вы решили, что ничего не нашлось? Последний раз редактировалось mazzy; 12.04.2021 в 10:52. |
|
12.04.2021, 10:55 | #4 |
Участник
|
Скорее всего там запрос идет с литералами и не экранируется служебный символ /
Можно делать sql injection. Попробуйте в запросе поставить forceplaceholders если используете select А если query то Query.literals(2) Последний раз редактировалось Logger; 12.04.2021 в 10:57. |
|
13.04.2021, 10:08 | #5 |
Участник
|
Я делаю фильтрацию просто в форме. Т.е. нажимаю Ctrl+G и ввожу.
По идее это класс Query должен отрабатывать. Но до этого метода не доходит: Цитата:
\Classes\SysQueryRun\new
Цитата:
[c] \Classes\Info\add - 14
[s] \Classes\Global\info - 3 [s] \Classes\SysTrace\outputInfolog - 5 [s] \Classes\SysTraceError\output - 23 [s] \Classes\Application\sysTrace - 35 Или вы предлагаете проверить работу через джоб написав в нем запрос вручную через Query? Если это предлагаете, то можете шаблон сбросить такого кода? Самому интересно стало. Что вы подразумеваете под экранированием? Прямо в поле формы писать код: SysQuery::value('*/*') Потому что выводит такой infolog: Цитата:
Невозможно выбрать запись в <label таблицs> (<name таблицы>). <label поля>: , .
База данных SQL обнаружила ошибку. Может это как то профиксить для все полей всех форм. Где то в глобальном методе надо что то подправить? \Classes\Application\sysTrace ? Последний раз редактировалось oleggy; 13.04.2021 в 10:18. |
|
13.04.2021, 10:24 | #6 |
Участник
|
Значит через query.
попробуйте вводить экранирующий \ перед спец.символами. т.е вместо строки */* вводите \*/\* |
|
13.04.2021, 10:36 | #7 |
Участник
|
Цитата:
[c] \Classes\Info\add - 14
[s] \Classes\Global\info - 3 [s] \Classes\SysTrace\outputInfolog - 5 [s] \Classes\SysTraceError\output - 23 [s] \Classes\Application\sysTrace - 35 У вас включен функционал Мониторинг запросов SQL? Попробуйте выключить. Может это он косячит. Но тогда же смысл фильтра изменится. Символ звёздочки уже не будет означать любой символ. Будет искаться именно сам символ звёздочки |
|
13.04.2021, 10:54 | #8 |
Участник
|
Цитата:
Клиента переоткрыл - все так же. Или надо AOS рестартовать? По модификациям класса Application.sysTrace. На какой метод намекаете? Вижу что модификации есть в методах (жирным выделены): startup startupPost dbSynchronize Если смотреть метод dbSynchronize то в нем добавлена только строка в начале: X++: if (! this.cit_appl().dbSynchronizeBefore(tableId, syncAsNeeded, continueOnError, showProgress, checkSyncTables)) { return false; } Последний раз редактировалось oleggy; 13.04.2021 в 10:59. |
|
13.04.2021, 11:20 | #9 |
Участник
|
Цитата:
Цитата:
или я вопроса не понимаю. oleggy, можете переформулировать вопрос на простом человеческом языке, не употребляя спец.терминов? где вы находитесь в аксапте и чего вы хотите, чтобы аксапта сделала? Последний раз редактировалось mazzy; 13.04.2021 в 11:22. |
|
13.04.2021, 11:38 | #10 |
Участник
|
поясню этот пункт:
вы задали вопрос в разделе "Разработка" поэтому отвечающие логично предположили что вы задаете вопрос о разработке. но, похоже, вы находитесь в какой-то пользовательской форме, а не в среде разработке. поэтому начните пожалуйста свой вопрос со слов, "я открыл то-то. я нажал Ctrl+G. я ввожу строку в фильр такой-то. я ожидаю увидеть..., которые содержат..." или "я создал Query в job'е, в котором задал SysQuery::value... я вывел результаты в... я ожидаю увидеть..., которые содержат..." ну, или в любой другой форме на языке, который вы считаете человеческим. |
|
|
|