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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.08.2009, 13:02   #1  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Like по строке с одним или больше пробелами
Как реализовать? Если, скажем, у меня в базе куча кастомеров с именами, начинающимися с, например, "Lease" Как мне допустим посредством лайка найти всех кастомеров, чьи имена начинаются с "Lease Plan"?

Ну, то есть идея есть, и она следующая: разделять Строку на слова и получать что-то типа СustTable.Name like word1 +'*' && СustTable.Name like "*"+word2+"*".
Ну, учитывая, что я использую квери, а не запрос, то и при неопределнном зарание количестве слов в поисковой строке, можно построить рэндж.

Но мне все-равно кажется, что должен быть способ гораздо проще.
__________________
Axapta has seduced me deadly!

Последний раз редактировалось HorrR; 06.08.2009 в 13:05.
Старый 06.08.2009, 13:06   #2  
egorych is offline
egorych
Участник
Самостоятельные клиенты AX
Oracle
 
761 / 154 (7) ++++++
Регистрация: 09.11.2006
Адрес: Краснодарский край
Не понял, а шаблоны поиска - "Lease Plan*" уже отменили ?
Старый 06.08.2009, 13:26   #3  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Пробовал вот так: "*Lease Plan*" - ничего не находит.
__________________
Axapta has seduced me deadly!
Старый 06.08.2009, 13:37   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от HorrR Посмотреть сообщение
Ну, учитывая, что я использую квери, а не запрос ...
Проверьте, правильно ли вы сконструировали ваш Query. Текст запроса при использовании Query можно увидеть таким способом
X++:
info(query.dataSourceNo(1).toString());
Старый 06.08.2009, 13:57   #5  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А отдельно "*Lease*" и отдельно "*Plan*" пробовали? Находит хоть что-нибудь?
Старый 06.08.2009, 13:59   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5788 (200) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от HorrR Посмотреть сообщение
Как мне допустим посредством лайка найти всех кастомеров, чьи имена начинаются с "Lease Plan"?
я использую квери, а не запрос
Цитата:
Сообщение от HorrR Посмотреть сообщение
Пробовал вот так: "*Lease Plan*" - ничего не находит.
Вы, случаем, используя query, для шаблона поиска не применяете ли queryValue()? Если применяете, но не стоит этого делать - queryValue() эскейпит ваши звездочки, в результате вместо like получается поиск по строго заданной строке, содержащей символы '*'.
Старый 06.08.2009, 15:52   #7  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Вы, случаем, используя query, для шаблона поиска не применяете ли queryValue()? Если применяете, но не стоит этого делать - queryValue() эскейпит ваши звездочки, в результате вместо like получается поиск по строго заданной строке, содержащей символы '*'.
Неа, просто value использую. Например, по такому значению рэнджа "Lease*" вполне себе находит. А вот уже "Lease Plan*" - нет.
__________________
Axapta has seduced me deadly!
Старый 06.08.2009, 15:53   #8  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от Gustav Посмотреть сообщение
А отдельно "*Lease*" и отдельно "*Plan*" пробовали? Находит хоть что-нибудь?
Да, разумеется. Иначе бы не задавал бы этот вопрос))
__________________
Axapta has seduced me deadly!
Старый 06.08.2009, 15:59   #9  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Кстати, стал дебажить код.
X++:
NameValue      = #WildCard + NameValue +#WildCard;
Где NameValue - значение, пришедшее из диалога.

Вот, что получается: *LeaseþOptions* вместо желаемых *Lease Options*, NameValue - значение пришедшее из диалога. Звездочки не причем. Просто диалог какого-то фига возвращает мне "LeaseþOptions" вместо "Lease Options"
__________________
Axapta has seduced me deadly!
Старый 06.08.2009, 16:08   #10  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
Кто-то тут не прав:
X++:
static void Job22(Args _args)
{
    CustTable   custTable;

    Query       q = new Query();
    QueryRun    qr;
    ;

    info("1:");
    while select custTable
        where custTable.Name like "РУП ЦИС*"
    {
        info(custTable.Name);
    }

    q.addDataSource(tableNum(CustTable)).addRange(fieldNum(CustTable, Name)).value("РУП ЦИС*");

    info("2:");
    info(q.dataSourceNo(1).toString());

    qr = new QueryRun(q);

    while (qr.next())
    {
        custTable = qr.getNo(1);

        info(custTable.Name);
    }
}
Цитата:
Сообщение (15:08:07)
1:
РУП ЦИС ТООТ
2:
SELECT * FROM CustTable WHERE (((Name LIKE 'РУП ЦИС%')))
РУП ЦИС ТООТ
__________________
Zhirenkov Vitaly
Старый 06.08.2009, 16:11   #11  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Все, тема закрыта. Причина смешная. Начал копаться в классе, который вызывает диалог(писал уволившийся коллега). И вот что я нашел там: код, который перед тем, как записать выбранные значения в темповую таблицу замечащет в них пробел на этот интересный символ. В общем, колега жжет, видимо, он хотел сделать замещение пробелов на звездочки, судя по всему num2char(254) в какой-то кодировке и дает звездочку, но блин, проверять же нужно....
В общем, простите за беспокойство всему виной мое нежелание копнуть глубже и веселый коллега. А like по строке с пробелам работает вполне себе.
__________________
Axapta has seduced me deadly!
Старый 06.08.2009, 16:13   #12  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от HorrR Посмотреть сообщение
Кстати, стал дебажить код.
X++:
NameValue      = #WildCard + NameValue +#WildCard;
Где NameValue - значение, пришедшее из диалога.

Вот, что получается: *LeaseþOptions* вместо желаемых *Lease Options*, NameValue - значение пришедшее из диалога. Звездочки не причем. Просто диалог какого-то фига возвращает мне "LeaseþOptions" вместо "Lease Options"
Ну вот видите, даже элементарно продебагить не попробовали, а панику уже развели на всез форум...
__________________
Zhirenkov Vitaly
Старый 06.08.2009, 16:13   #13  
HorrR is offline
HorrR
Участник
 
340 / 30 (2) +++
Регистрация: 18.02.2008
Адрес: Киев
Цитата:
Сообщение от ZVV Посмотреть сообщение
Кто-то тут не прав:
Смотрите на пост выше)
__________________
Axapta has seduced me deadly!
Старый 06.08.2009, 16:58   #14  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,200 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Вы, случаем, используя query, для шаблона поиска не применяете ли queryValue()? Если применяете, но не стоит этого делать - queryValue() эскейпит ваши звездочки, в результате вместо like получается поиск по строго заданной строке, содержащей символы '*'.
Еще про queryValue(). Столкнулся со следующим при попытке организовать рендж по диапазону целочисленных значений:
queryValue( strfmt("%1..%2",intFrom,intTo) ) - не работает, на выходе получается только первое значение без точек диапазона и без второго значения
queryValue( int2str(intFrom) + ".." + int2str(intTo) ) - работает

Возможно, дело и не в queryValue(), а в чем-то другом, но разумного объяснения не нашел, и искать причины не стал - устроило что добился результата. Но всё же интересно. Может кто-то сталкивался. У меня Ах 4.0 sp2.
Старый 06.08.2009, 17:29   #15  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Для диапазона есть отдельная ф-ция:
X++:
SysQuery::range(anytype _from, anytype _to)

на практике использую так:
X++:
if (_from || _to)
 ... SysQuery::range(anytype _from, anytype _to)
- если нет проверки if и _from, _to оба пусты, то ф-я накладывает кривой критерий, а по логике в таком случае критерий накладывать не нужно вообще.
За это сообщение автора поблагодарили: Zabr (1).
Старый 06.08.2009, 18:25   #16  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Zabr Посмотреть сообщение
queryValue( int2str(intFrom) + ".." + int2str(intTo) ) - работает
шота не верицца...
__________________
Zhirenkov Vitaly
Теги
like, поиск, регулярные выражения

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Fred Shen: 'Not Like' in Dynamics AX Blog bot DAX Blogs 0 28.10.2006 16:40
как правильно использовать not like polygris DAX: Программирование 1 06.05.2006 16:59
like запрос с использованием query Vadik Shiryakoff DAX: Программирование 7 13.03.2006 12:05
Возможность использования Like в QueryBuildRange Koriolis DAX: Программирование 5 14.02.2005 17:43
Скидка по строке и многострочная скидка efim DAX: Функционал 0 18.06.2003 16:32

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

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

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