|
|
#1 |
|
Участник
|
Not Like в Query
Доброго времени суток.
Как написать в query условие Not like? В простом условии по полю можно и так написать: qrbd.addRange(fieldnum(table1,field1)).value("!"+"A*"); Но мне нужно еще по этому же полю добавить условие, поэтому нужно понять как написать запрос. qrbd.addRange(fieldnum(table1,field1)).value(strFmt('((!(%1 LIKE "%2")))', fieldStr(table1, field1), 'A*')); И различные варианты с Not или ! данного выражение не дают результатов. Без отрицания работает правильно. |
|
|
|
|
#2 |
|
Участник
|
А вот так
X++: qrbd.addRange(fieldnum(table1,field1)).value(strFmt("%1,%2", SysQuery::valueNot("1*"),SysQuery::valueNot("2*"))); Последний раз редактировалось maldini; 14.01.2014 в 11:02. |
|
|
|
|
#3 |
|
Участник
|
|
|
|
|
|
#4 |
|
Участник
|
Тогда так
X++: qbds.addRange(fieldnum(table1,field1)).value(strfmt("!1*")); qbds.addRange(fieldnum(table1,field1)).value(strfmt("!2*")); http://www.axaptapedia.com/Expressions_in_query_ranges Последний раз редактировалось maldini; 14.01.2014 в 11:26. |
|
|
|
|
#5 |
|
Участник
|
|
|
|
|
|
#6 |
|
Участник
|
Так можно
X++: qbds.addRange(fieldnum(table1,field1)).value(strfmt("!A*")); qbds.addRange(fieldId2Ext(fieldnum(table1,field1), 1)).value(strfmt("!B*"));
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
| За это сообщение автора поблагодарили: Maxim Gorbunov (1), Stitch_MS (1), IvanS (1), alex55 (1). | |
|
|
#7 |
|
Дмитрий Ерин
|
В случае отрицания перечисление критериев через запятую как раз дает И. Проверьте прямо в гриде через быстрый фильтр (Ctrl-G): !A*, !B
__________________
|
|
|
|
|
#8 |
|
Участник
|
|
|
|
|
|
#9 |
|
Участник
|
|
|
|
|
|
#10 |
|
Дмитрий Ерин
|
Удивительно
Решил тоже проверить. Вот такой джоб дает И:X++: Query q;
QueryRun qr;
QueryBuildDataSource qbds;
QueryBuildRange qbr;
MyTable tab;
;
q = new Query();
qbds = q.addDataSource(tableNum(MyTable));
qbr = qbds.addRange(fieldNum(MyTable, MyField));
qbr.value("!a*, !b");
qr = new QueryRun(q);
while (qr.next())
{
tab = qr.getNo(1);
info(strFmt("%1", tab.MyField));
}
__________________
|
|
|
|
|
#11 |
|
Участник
|
Так работает
Цитата:
X++: qbds.addRange(fieldnum(table1,field1)).value(strfmt("!1*")); qbds.addRange(fieldnum(table1,field1)).value(strfmt("!2*")); Последний раз редактировалось maldini; 14.01.2014 в 12:37. |
|
|
|
|
#12 |
|
Участник
|
Во внутреннем представление кодов полей. В первом случае query считает что поля разные, а условия на разные поля соединяются по 'И'.
Сравните X++: info("%1", fieldnum(table1,field1)); info("%1", fieldId2Ext(fieldnum(table1,field1), 1)); |
|
|
|
|
#13 |
|
Участник
|
Цитата:
Сообщение от S.Kuskov
Во внутреннем представление кодов полей. В первом случае query считает что поля разные, а условия на разные поля соединяются по 'И'.
Сравните X++: info("%1", fieldnum(table1,field1)); info("%1", fieldId2Ext(fieldnum(table1,field1), 1)); X++: addRange(fieldnum(table1,field1)).value(strfmt("!1*,!2*")); X++: queryBuildDataSource = query.addDataSource(tablenum(InventTable)); queryBuildDataSource.addSelectionField(fieldnum(InventTable, ItemId)); queryBuildDataSource.addRange(fieldnum(InventTable, ItemId)).value(strfmt("!1*,!2*")); Код: Оператор SQL: (InventTable) SELECT A.ITEMID,A.RECID FROM INVENTTABLE A WHERE ((DATAAREAID=?) AND ( NOT ((ITEMID LIKE ? ESCAPE '\' )) AND NOT ((ITEMID LIKE ? ESCAPE '\' )))) ORDER BY A.DATAAREAID,A.ITEMID Последний раз редактировалось maldini; 14.01.2014 в 13:57. |
|
|
|
|
#14 |
|
Участник
|
fieldId2Ext не должно быть нужно, должно отрабатывать как И
Возможно вы что-то забыли нам рассказать? Еще какие-то фильтры помимо этих? Версия АХ? |
|
|
|
|
#15 |
|
Участник
|
А это уже по другой причине. Это не расширенный синтаксис, а обыкновенный. И через запятую в нём обычные условия добавляются по ИЛИ, но в случае добавления отрицания - по ИЛИ. Так всегда было
![]() P.S.: См. также Отличия операторов ! и != в фильтрах |
|
|
|
|
#16 |
|
Участник
|
На случай холивара выложу правило из булевой алгебры:
X++: !(a && b) = !a || !b !(a || b) = !a && !b
__________________
// no comments |
|
|
|
| За это сообщение автора поблагодарили: macklakov (1). | |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|