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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.05.2009, 19:29   #1  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
LIKE и OR в Query как-то можно объединить ?
Подозреваю что нет, интересно каким образом реализуете такую задачу:

X++:
phoneQBR.value(strFmt('((%1 like "%3") || (%2 like "%3"))',
fieldStr(smmBusRelTable, Phone),
fieldStr(smmBusRelTable, CellularPhone), 
filterAnyPhoneStr)));
phoneQBR соотвественно по RecId ..

Обрамлять звездочками с "==" тоже не работает ..

Это один из нескольких поисковых фильтров по этой таблице/форме
__________________
_databaseTransDelete ... bl@$ !
Старый 12.05.2009, 21:27   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от DTD Посмотреть сообщение
Подозреваю что нет, интересно каким образом реализуете такую задачу:

X++:
phoneQBR.value(strFmt('((%1 like "%3") || (%2 like "%3"))',
fieldStr(smmBusRelTable, Phone),
fieldStr(smmBusRelTable, CellularPhone), 
filterAnyPhoneStr)));
phoneQBR соотвественно по RecId ..

Обрамлять звездочками с "==" тоже не работает ..

Это один из нескольких поисковых фильтров по этой таблице/форме
Использование "like" при работе с классом "QueryBuildRange"
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: mazzy (2).
Старый 13.05.2009, 11:36   #3  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Можно ещё вот это Запрос по таблице параметров. и ещё кучу подобных... В частности внизу в похожих темах...

Основная суть - используйте поиск.
__________________
Zhirenkov Vitaly
Старый 13.05.2009, 13:11   #4  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от ZVV Посмотреть сообщение
Можно ещё вот это Запрос по таблице параметров. и ещё кучу подобных... В частности внизу в похожих темах...

Основная суть - используйте поиск.
Забыл упомянуть что SQL, AX4 SP2 ... ваши ссылки на "похожие темы" лишь подтверждают, что да, не работает такая комбинация на SQL.
Запрос по таблице параметров.

Вопрос был как вы обходите такое ограничение ?

Пока не придумал ничего красивее чем в update обновлять специальное новое поле комбинацией значений полей по которым требуется OR, а потом его фильтровать обычным образом.
__________________
_databaseTransDelete ... bl@$ !
Старый 13.05.2009, 14:33   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от DTD Посмотреть сообщение
Забыл упомянуть что SQL, AX4 SP2 ... ваши ссылки на "похожие темы" лишь подтверждают, что да, не работает такая комбинация на SQL.
Запрос по таблице параметров.

Вопрос был как вы обходите такое ограничение ?

Пока не придумал ничего красивее чем в update обновлять специальное новое поле комбинацией значений полей по которым требуется OR, а потом его фильтровать обычным образом.
Я уже писал в одной из этих тем, что у меня такая конструкция работает. На Оракле. На сиквеле у людей не работает....

Попробуйте этот джоб: у меня работают оба варианта - у вас вероятно будет только 2-ой..
X++:
static void Job12(Args _args)
{
    Query                q;
    QueryRun             qr;
    QueryBuildDataSource qbds;
    QueryBuildRange      qbr1;
    QueryBuildRange      qbr2;
    InventTable          InventTable;
    ;
//1
    q = New Query();

    qbds = q.addDataSource(tableNum(InventTable));

    qbr1 = qbds.addRange(fieldNum(InventTable, RecId));

    qbr1.value(strFmt('((%4.%1 like "%3") || (%4.%2 like "%3"))',
                        fieldStr(InventTable, ItemName),
                        fieldStr(InventTable, NameAlias),
                        "трусы*",
                        qbds.name()));

    info(qbds.toString());

    qr = New QueryRun(q);
    qr.next();
    InventTable = qr.get(tableNum(InventTable));
    info(InventTable.itemName);

//2
    q = New Query();

    qbds = q.addDataSource(tableNum(InventTable));

    qbr1 = qbds.addRange(fieldNum(InventTable, RecId));
    qbr2 = qbds.addRange(fieldNum(InventTable, RecId));

    qbr1.value(strFmt('(%1.%2 like "%3")',
                        qbds.name(),
                        fieldStr(InventTable, ItemName),
                        "трусы*"));
    qbr2.value(strFmt('(%1.%2 like "%3")',
                        qbds.name(),
                        fieldStr(InventTable, NameAlias),
                        "трусы*"));
    info(qbds.toString());

    qr = New QueryRun(q);
    qr.next();
    InventTable = qr.get(tableNum(InventTable));
    info(InventTable.itemName);
}
Результат (с трассировкой):
X++:
SELECT * FROM InventTable WHERE ((((InventTable_1.ItemName like "трусы*") || (InventTable_1.NameAlias like "трусы*"))))
SELECT ..... FROM INVENTTABLE A WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER(:in1)/*'mil'*/) AND ((SUBSTR(NLS_LOWER(ITEMNAME),1,100) LIKE NLS_LOWER(:in2)/*'трусы*'*/ ESCAPE '\' ) OR (SUBSTR(NLS_LOWER(NAMEALIAS),1,50) LIKE NLS_LOWER(:in3)/*'*'*/ ESCAPE '\' ))) ORDER BY SUBSTR(NLS_LOWER(A.DATAAREAID),1,3),SUBSTR(NLS_LOWER(A.ITEMID),1,20)

SELECT * FROM InventTable WHERE (((InventTable_1.ItemName like "трусы*")) OR ((InventTable_1.NameAlias like "трусы*")))
SELECT ..... FROM INVENTTABLE A WHERE ((SUBSTR(NLS_LOWER(DATAAREAID),1,3)=NLS_LOWER(:in1)/*'mil'*/) AND ((SUBSTR(NLS_LOWER(ITEMNAME),1,100) LIKE NLS_LOWER(:in2)/*'трусы*'*/ ESCAPE '\' ) OR (SUBSTR(NLS_LOWER(NAMEALIAS),1,50) LIKE NLS_LOWER(:in3)/*'*'*/ ESCAPE '\' ))) ORDER BY SUBSTR(NLS_LOWER(A.DATAAREAID),1,3),SUBSTR(NLS_LOWER(A.ITEMID),1,20)
__________________
Zhirenkov Vitaly
Старый 13.05.2009, 15:00   #6  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от ZVV Посмотреть сообщение
Я уже писал в одной из этих тем, что у меня такая конструкция работает. На Оракле. На сиквеле у людей не работает....

Попробуйте этот джоб: у меня работают оба варианта - у вас вероятно будет только 2-ой..
Ни один не работает, скобку требует.

Вопрос в принципе не на какой БД работает, с этим уже давно определились в предыдущих темах, а как народ обходит это.
__________________
_databaseTransDelete ... bl@$ !
Старый 13.05.2009, 15:24   #7  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Жаль... я надеялся, хоть второй заработает...

Ну как обходят... переходят на "while select" или на 2009...
__________________
Zhirenkov Vitaly
Старый 13.05.2009, 16:03   #8  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от ZVV Посмотреть сообщение
Ну как обходят... переходят на "while select" или на 2009...
мда, оставлю тогда как есть, дополнительное "техническое" поле в стандартной таблице конечно немного грех, но имхо кошерней чем while select ..)
__________________
_databaseTransDelete ... bl@$ !
Теги
like, запрос (query), критерии

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 04.05.2009 14:05
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
palleagermark: Shortcut to the query object of a form data source Blog bot DAX Blogs 1 07.01.2009 18:33
Какие материалы можно почитать по Query... Shakr DAX: Программирование 3 30.11.2006 16:17
Можно вывести в lookup пересечение двух query? Hidden DAX: Программирование 14 14.07.2006 10:02

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

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

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