06.08.2009, 13:02 | #1 |
Участник
|
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 |
Участник
|
Не понял, а шаблоны поиска - "Lease Plan*" уже отменили ?
|
|
06.08.2009, 13:26 | #3 |
Участник
|
Пробовал вот так: "*Lease Plan*" - ничего не находит.
__________________
Axapta has seduced me deadly! |
|
06.08.2009, 13:37 | #4 |
Участник
|
|
|
06.08.2009, 13:57 | #5 |
Moderator
|
А отдельно "*Lease*" и отдельно "*Plan*" пробовали? Находит хоть что-нибудь?
|
|
06.08.2009, 13:59 | #6 |
Участник
|
Цитата:
|
|
06.08.2009, 15:52 | #7 |
Участник
|
Неа, просто value использую. Например, по такому значению рэнджа "Lease*" вполне себе находит. А вот уже "Lease Plan*" - нет.
__________________
Axapta has seduced me deadly! |
|
06.08.2009, 15:53 | #8 |
Участник
|
Да, разумеется. Иначе бы не задавал бы этот вопрос))
__________________
Axapta has seduced me deadly! |
|
06.08.2009, 15:59 | #9 |
Участник
|
Кстати, стал дебажить код.
X++: NameValue = #WildCard + NameValue +#WildCard; Вот, что получается: *LeaseþOptions* вместо желаемых *Lease Options*, NameValue - значение пришедшее из диалога. Звездочки не причем. Просто диалог какого-то фига возвращает мне "LeaseþOptions" вместо "Lease Options"
__________________
Axapta has seduced me deadly! |
|
06.08.2009, 16:08 | #10 |
MCITP
|
Кто-то тут не прав:
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 |
Участник
|
Все, тема закрыта. Причина смешная. Начал копаться в классе, который вызывает диалог(писал уволившийся коллега). И вот что я нашел там: код, который перед тем, как записать выбранные значения в темповую таблицу замечащет в них пробел на этот интересный символ. В общем, колега жжет, видимо, он хотел сделать замещение пробелов на звездочки, судя по всему num2char(254) в какой-то кодировке и дает звездочку, но блин, проверять же нужно....
В общем, простите за беспокойство всему виной мое нежелание копнуть глубже и веселый коллега. А like по строке с пробелам работает вполне себе.
__________________
Axapta has seduced me deadly! |
|
06.08.2009, 16:13 | #12 |
MCITP
|
Цитата:
Сообщение от HorrR
Кстати, стал дебажить код.
X++: NameValue = #WildCard + NameValue +#WildCard; Вот, что получается: *LeaseþOptions* вместо желаемых *Lease Options*, NameValue - значение пришедшее из диалога. Звездочки не причем. Просто диалог какого-то фига возвращает мне "LeaseþOptions" вместо "Lease Options"
__________________
Zhirenkov Vitaly |
|
06.08.2009, 16:13 | #13 |
Участник
|
__________________
Axapta has seduced me deadly! |
|
06.08.2009, 16:58 | #14 |
Участник
|
Цитата:
queryValue( strfmt("%1..%2",intFrom,intTo) ) - не работает, на выходе получается только первое значение без точек диапазона и без второго значения queryValue( int2str(intFrom) + ".." + int2str(intTo) ) - работает Возможно, дело и не в queryValue(), а в чем-то другом, но разумного объяснения не нашел, и искать причины не стал - устроило что добился результата. Но всё же интересно. Может кто-то сталкивался. У меня Ах 4.0 sp2. |
|
06.08.2009, 17:29 | #15 |
Боец
|
Для диапазона есть отдельная ф-ция:
X++: SysQuery::range(anytype _from, anytype _to) на практике использую так: X++: if (_from || _to) ... SysQuery::range(anytype _from, anytype _to) |
|
|
За это сообщение автора поблагодарили: Zabr (1). |
06.08.2009, 18:25 | #16 |
MCITP
|
шота не верицца...
__________________
Zhirenkov Vitaly |
|