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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.08.2010, 14:26   #1  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Выборка не пустых строковых значений в AX 3.0
Вероятно баян, но в поиске не нашел.
Столкнулся со странным поведением, когда при выборке из таблицы по условию table.field (но не по условию table.field != "")
не выбираются значения, начинающиеся со знака "минус" (-). Тут проще показать, чем рассказать )):

X++:
    TestTable           testTable;
    RecordInsertList    ril;
;
    ttsbegin;
    delete_from testTable;

    ril = new RecordInsertList(tableNum(TestTable));

    testTable.stringField = "1";
    ril.add(testTable);

    testTable.stringField = "-1";
    ril.add(testTable);

    testTable.stringField = "(3%*3%)";
    ril.add(testTable);

    testTable.stringField = "-(3%*3%)";
    ril.add(testTable);

    testTable.stringField = "bla-bla";
    ril.add(testTable);

    testTable.stringField = "-bla-bla";
    ril.add(testTable);

    ril.insertDatabase();

    ttscommit;

    setPrefix("Result");
    while select testTable
        where testTable.stringField
    {
        info("First\t" + testTable.stringField);
    }

    while select testTable
        where testTable.stringField != ""
    {
        info("Second\t" + testTable.stringField);
    }
Так вот, результат сего следующий:

Код:
Result
    First
	1
	(3%*3%)
	bla-bla
    Second
	1
	-1
	(3%*3%)
	-(3%*3%)
	bla-bla
	-bla-bla
Axapta 3.0 SP3 без KR.
В AX2009 такое не повторяется.
Старый 25.08.2010, 14:33   #2  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А QueryRun как себя ведет? Через него не пробовали?

А вообще, было что-то такое, но с RecId. Поэтому в ВР как раз и рекомендоалось ставить условие. Хотя странно, конечно.

С Уважением,
Георгий
Старый 25.08.2010, 14:48   #3  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Цитата:
Сообщение от George Nordic Посмотреть сообщение
А QueryRun как себя ведет? Через него не пробовали?

А вообще, было что-то такое, но с RecId. Поэтому в ВР как раз и рекомендоалось ставить условие. Хотя странно, конечно.

С Уважением,
Георгий
код
X++:
    Query                   query = new Query();
    QueryRun                queryRun;
    QueryBuildDataSource    qbds;
    TestTable               testTable;
;
    qbds = query.addDataSource(tableNum(TestTable));
    qbds.addRange(fieldNum(TestTable,StringField)).value(SysQuery::valueNotEmptyString());
    queryRun = new QueryRun(query);

    while (queryRun.next())
    {
        testTable = queryRun.get(tableNum(TestTable));
        info(testTable.stringField);
    }
возвращает полную выборку.
Старый 25.08.2010, 14:50   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
А с литералами как себя ведет ?
Старый 25.08.2010, 14:53   #5  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Есть ощущение что там проблема со сравнением символов в БД.
Условие
X++:
where testTable.stringField != ""
уходит на БД как !=

а условие
X++:
where testTable.stringField
уходит как stringField > параметр

Где параметр - некая константа, которую аксапта подставит. Для Оракла это chr(2), для SQL не проверял. Есть ощущение что сравнение как-то влияет.
За это сообщение автора поблагодарили: lev (2).
Старый 25.08.2010, 15:03   #6  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Цитата:
Сообщение от Logger Посмотреть сообщение
А с литералами как себя ведет ?
тоже самое
Старый 25.08.2010, 15:15   #7  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Logger правильно говорит про разницу формируемого запроса к базе.
создайте два запроса с литералами, с != и просто с полем.
отловите эти запросы в Журнале трассировки операторов SQL, и посмотрите в каком виде они едут в базу. Думаю сравнив два запроса, вы поймете причину такого поведения системы.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 25.08.2010, 15:22   #8  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Подозреваю, что, возможно, с какого-то KR этот баг исправлен - так что же, по другому запрос к базе данных отправляется?
Старый 25.08.2010, 15:42   #9  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
попробовал у себя (Ах 3.0 SP3, Oracle)

X++ код:
X++:
select forceliterals ItemId from inventTable
        where inventTable.ItemId;
формирует запрос:
Цитата:
SELECT A.ITEMID,A.RECID FROM INVENTTABLE A WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER('Х')) AND (SUBSTR(NLS_LOWER(ITEMID),1,20)>''))
X++ код:
X++:
select forceliterals ItemId from inventTable
        where inventTable.ItemId != "";
формирует запрос:
Цитата:
SELECT A.ITEMID,A.RECID FROM INVENTTABLE A WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER('Х')) AND (SUBSTR(NLS_LOWER(ITEMID),1,20)<>''))
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем

Последний раз редактировалось lev; 25.08.2010 в 15:45.
Теги
sql server, сортировка, сравнение

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
gatesasbait: Dynamics AX 2009 SSRS and SSAS Integration Tips Blog bot DAX Blogs 3 09.07.2009 13:07
Dynamics AX: Managing Your Supply Chain Using Microsoft Dynamics AX 2009 - Book Review Blog bot DAX Blogs 0 31.03.2009 23:06
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47

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

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

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