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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.12.2004, 11:05   #1  
levsha is offline
levsha
Участник
 
22 / 14 (1) ++
Регистрация: 20.10.2003
Адрес: СПб
баг в 2.5. Будьте осторожнее с символом "_" подчеркивание
Создал string EDT Type1 размером 10 символов. Создал табличку Table1 с двумя текстовыми полями Field1 и Field2 типа Type1. Добавил в табличку запись "1_2_3_4_5", "6_7_8".
Написал джобик:

static void Job300(Args _args)
{
Table1 table;
Query q = new Query();
QueryBuildDataSource qbds = q.addDataSource(tableNum(Table1));
QueryBuildRange qbr = qbds.addRange(fieldNum(Table1,Field1));
Type1 value = '1_2_3_4*';
Type1 value2 = '6_7_8';
QueryRun qr;
;
qbr.value(value);
qbr = qbds.addRange(fieldNum(Table1, Field2));
qbr.value(value2);
select table where (table.Field1 like value) && (table.Field2 == value2);
print table.Field1;
pause;
qr = new QueryRun(q);
while (qr.next())
{
print 'uraaaa';
}
pause;
}

Поразился результатам - никакой записи мне возвращено не было ни в первом, ни во втором случае. Само собой, если на таблице я поставлю фильтр по двум полям с теми же значениями в том же порядке, то этот фильтр мне также не вернет искомую запись.

Изменил значение value на "1_2_3_*" - все в порядке, джобик отрабатывает правильно в обоих случаях. Если же оставить value прежним и убрать вторую часть фильтра по полю Field2 - тоже все в порядке, если поменять местами фильтры(говорят от перемены мест слагаемых сумма не меняется) - опять будет хорошо отрабатывать.

Решил посмотреть какие параметры приходят на sql server. Так вот символ подчеркивание "_" по какой-то причине аксаптой (именно в случае like) преобразуется в "\_" как будто это какой-то специальный символ (хотя нигде не слышал до сих пор, чтобы подчеркивание был каким-то спец символом). Когда приходит запрос, в котором стоит like со значением, в котором общее количество всех символов плюс число подчеркиваний превышает указанную длину поля(в нашем примере 10), а после like через "и"(через "или" - опять же все в порядке)присоединен еще какой-нибудь фильтр по другому полю, то происходит глюк - значение фильтра по первому полю обрезается максимальным числом символов в этом поле плюс один(при условии, что теперь в этом значении фильтра добавлены слэши) и к этому значению присоединяется значение следующего фильтра (то есть в приведенном выше примере - получаются параметры фильтра "1\_2\_3\_4%6_7_8", "6_7_8"). Если с учетом слэшей количество символов не превышает размер поля - то все в порядке. Баг мне кажется достаточно критичным - так как у нас широко используются символы "_" в кодах клиентов, кодах поставщиков, кодах номенклатуры(длина полей, которых составляет всего 20 символов) и в запросах, подобных приведенному выше по этим кодам может в каких-то случаях теряться информация.

К сожалению нет под рукой трешки, чтобы проверить этот баг в ней.
Сам имею в распоряжении:
Axapta 2.5, sp6,
Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
Старый 07.12.2004, 12:02   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: баг в 2.5. Будьте осторожнее с символом "_" подчеркивание
Цитата:
Изначально опубликовано levsha
Так вот символ подчеркивание "_" по какой-то причине аксаптой (именно в случае like) преобразуется в "\_" как будто это какой-то специальный символ (хотя нигде не слышал до сих пор, чтобы подчеркивание был каким-то спец символом).
http://msdn.microsoft.com/library/de...la-lz_115x.asp

_ (underscore) Any single character.
WHERE au_fname LIKE '_ean' finds all four-letter first names that end with ean (Dean, Sean, and so on).

Предельно осторожно используйте в кодах также символы . , " ? * ! < > \
Поскольку их также надо экранировать
См. также http://axapta.mazzy.ru/hints/search/
Старый 07.12.2004, 12:06   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: баг в 2.5. Будьте осторожнее с символом "_" подчеркивание
Цитата:
Изначально опубликовано levsha
К сожалению нет под рукой трешки, чтобы проверить этот баг в ней.
И еще. В 3й версии также.
Да. ошибка переполнения.
Старый 07.12.2004, 12:13   #4  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
И еще. Баг не имеет никакого отношения к символу _.
Это типичная ошибка переполнения буфера.

Попробуйте посмотреть в sql что происходит с фильтром
value = "1_2_345'*";
Старый 07.12.2004, 12:20   #5  
levsha is offline
levsha
Участник
 
22 / 14 (1) ++
Регистрация: 20.10.2003
Адрес: СПб
Re: Re: баг в 2.5. Будьте осторожнее с символом "_" подчеркивание
Цитата:
Изначально опубликовано mazzy


http://msdn.microsoft.com/library/de...la-lz_115x.asp

_ (underscore) Any single character.
WHERE au_fname LIKE '_ean' finds all four-letter first names that end with ean (Dean, Sean, and so on).
Да, Вы правы, об этом я забыл... поэтому действительно только в like такое вылезает

Цитата:
Изначально опубликовано mazzy

Предельно осторожно используйте в кодах также символы . , " ? * ! < > \
Поскольку их также надо экранировать
См. также http://axapta.mazzy.ru/hints/search/

И еще. Баг не имеет никакого отношения к символу _.
Это типичная ошибка переполнения буфера.
Попробуйте посмотреть в sql что происходит с фильтром
value = "1_2_345'*";
вот об использовании этих символов наши пользователи неоднократно предупреждались - и их использование в каких-то ключевых полях практически сведено к нулю, а с подчеркиваниями для нас нас оказалось все-таки новостью и подчеркивания у нас используются повсеместно...
Старый 07.12.2004, 12:26   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Тогда разрешите вас предупредить еще и о символе %
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Тендер на внедрение модуля "Управление персоналом" и "Расчеты с персоналом" Oxsana DAX: Прочие вопросы 5 02.05.2006 19:47
поле "Документы к обновлению" в форме "Обработка закупки" sev DAX: Функционал 3 08.12.2005 17:21
Неудобство использования аналитик "Цвет" и "Размер" clerk DAX: Функционал 17 23.05.2005 13:08
"BinData" против "Файл на дискe" ATimTim DAX: Программирование 8 08.12.2004 18:20
"LIKE" и "OR" в "qbds" @x DAX: Программирование 14 20.01.2004 13:20

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:30.