AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.04.2021, 09:16   #1  
oleggy is offline
oleggy
Участник
 
145 / 18 (1) ++
Регистрация: 03.12.2019
DAX09 при попытке фильтрации по значению */* ошибка SQL
Привет.
Подскажите а поведение AX при попытке отфильтровать в любом поле формы по значению */* или только с одной звездочкой /* или */ приводит к ошибке:

Невозможно выбрать запись в <Имя таблицы> (<Сист. имя таб.>).
База данных SQL обнаружила ошибку.


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

Последний раз редактировалось oleggy; 12.04.2021 в 09:47.
Старый 12.04.2021, 10:08   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,304 / 1631 (61) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
У меня не воспроизвелось. Фильтрует корректно. AX2009

У вас база данных синхронизируется без ошибок?
За это сообщение автора поблагодарили: mazzy (2).
Старый 12.04.2021, 10:50   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,294 / 4114 (196) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от oleggy Посмотреть сообщение
при попытке отфильтровать в любом поле формы по значению */* или только с одной звездочкой /* или */ приводит к ошибке:
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
У меня не воспроизвелось.
ага. понятно.

oleggy, "фильтруете" при помощи query?
и не экранируете ваши звездочки при помощи SysQuery::value?

* - это спец.символ в аксапте https://axapta.mazzy.ru/lib/search/

в MS SQL аксаптовская неэкранированная звездочка транслируется в спец.символ %

Всегда используйте SysQuery::value

Цитата:
Сообщение от oleggy Посмотреть сообщение
Не должна ли система просто игнорировать такой запрос? Т.е. без вывода каких либо сообщений. Ничего не нашлось --> пустая форма.
почему вы решили, что ничего не нашлось?
__________________
Полезное на axForum, GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 12.04.2021 в 10:52.
Старый 12.04.2021, 10:55   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,479 / 2370 (86) +++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Скорее всего там запрос идет с литералами и не экранируется служебный символ /
Можно делать sql injection.
Попробуйте в запросе поставить forceplaceholders если используете select
А если query то
Query.literals(2)

Последний раз редактировалось Logger; 12.04.2021 в 10:57.
Старый 13.04.2021, 10:08   #5  
oleggy is offline
oleggy
Участник
 
145 / 18 (1) ++
Регистрация: 03.12.2019
Цитата:
Сообщение от mazzy Посмотреть сообщение
oleggy, "фильтруете" при помощи query?
Я делаю фильтрацию просто в форме. Т.е. нажимаю 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?
Если это предлагаете, то можете шаблон сбросить такого кода? Самому интересно стало.

Цитата:
Сообщение от mazzy Посмотреть сообщение
и не экранируете ваши звездочки при помощи SysQuery::value?
Что вы подразумеваете под экранированием? Прямо в поле формы писать код: SysQuery::value('*/*')

Цитата:
Сообщение от mazzy Посмотреть сообщение
ага. понятно.
почему вы решили, что ничего не нашлось?
Потому что выводит такой infolog:
Цитата:
Невозможно выбрать запись в <label таблицs> (<name таблицы>). <label поля>: , .
База данных SQL обнаружила ошибку.
И так по любому полю в любой форме. Я поэтому очень удивился.

Может это как то профиксить для все полей всех форм. Где то в глобальном методе надо что то подправить?
\Classes\Application\sysTrace ?

Последний раз редактировалось oleggy; 13.04.2021 в 10:18.
Старый 13.04.2021, 10:24   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,294 / 4114 (196) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от oleggy Посмотреть сообщение
Я делаю фильтрацию просто в форме. Т.е. нажимаю Ctrl+G и ввожу.
Значит через query.
попробуйте вводить экранирующий \ перед спец.символами.
т.е вместо строки */* вводите \*/\*
__________________
Полезное на axForum, GitHub, Facebook, mazzy.priot, mazzy.music, coub.
Старый 13.04.2021, 10:36   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,304 / 1631 (61) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от oleggy Посмотреть сообщение
Раньше генерируется:
Цитата:
[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
У вас нет собственных модификаций в методе Application.sysTrace?
У вас включен функционал Мониторинг запросов SQL? Попробуйте выключить. Может это он косячит.


Цитата:
Сообщение от mazzy Посмотреть сообщение
попробуйте вводить экранирующий \ перед спец.символами.
т.е вместо строки */* вводите \*/\*
Но тогда же смысл фильтра изменится. Символ звёздочки уже не будет означать любой символ. Будет искаться именно сам символ звёздочки
Старый 13.04.2021, 10:54   #8  
oleggy is offline
oleggy
Участник
 
145 / 18 (1) ++
Регистрация: 03.12.2019
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
У вас нет собственных модификаций в методе Application.sysTrace?
У вас включен функционал Мониторинг запросов SQL? Попробуйте выключить. Может это он косячит.
Было включена трассировка запросов SQL. Выключил.
Клиента переоткрыл - все так же. Или надо 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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,294 / 4114 (196) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Но тогда же смысл фильтра изменится. Символ звёздочки уже не будет означать любой символ. Будет искаться именно сам символ звёздочки
в оригинальном вопросе было так:
Цитата:
Сообщение от oleggy Посмотреть сообщение
при попытке отфильтровать в любом поле формы по значению */* или только с одной звездочкой /* или */ приводит к ошибке:
выделено мной.
или я вопроса не понимаю.

oleggy, можете переформулировать вопрос на простом человеческом языке, не употребляя спец.терминов?
где вы находитесь в аксапте и чего вы хотите, чтобы аксапта сделала?
__________________
Полезное на axForum, GitHub, Facebook, mazzy.priot, mazzy.music, coub.

Последний раз редактировалось mazzy; 13.04.2021 в 11:22.
Старый 13.04.2021, 11:38   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,294 / 4114 (196) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от mazzy Посмотреть сообщение
где вы находитесь в аксапте
поясню этот пункт:
вы задали вопрос в разделе "Разработка"
поэтому отвечающие логично предположили что вы задаете вопрос о разработке.

но, похоже, вы находитесь в какой-то пользовательской форме, а не в среде разработке.

поэтому начните пожалуйста свой вопрос со слов, "я открыл то-то. я нажал Ctrl+G. я ввожу строку в фильр такой-то. я ожидаю увидеть..., которые содержат..."

или "я создал Query в job'е, в котором задал SysQuery::value... я вывел результаты в... я ожидаю увидеть..., которые содержат..."

ну, или в любой другой форме на языке, который вы считаете человеческим.
__________________
Полезное на axForum, GitHub, Facebook, mazzy.priot, mazzy.music, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: AX Performance Troubleshooting Checklist Part 1A [Introduction and SQL Configuration] Blog bot DAX Blogs 0 05.09.2014 21:11
При попытке открыть форму TutorialGantt выдается ошибка? Hidden DAX: Прочие вопросы 3 25.11.2005 12:45
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Ошибка SQL в модуле "Расчеты с персоналом" Карбофос DAX: Функционал 5 02.08.2002 12:44
Ошибка SQL в модуле "Расчеты с персоналом" Карбофос DAX: Программирование 0 31.07.2002 17:20
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 06:12.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.