11.04.2012, 11:56 | #1 |
Участник
|
Ошибка расширенного диапазона запроса: Ожидается правая круглая скобка рядом с 0.
Хай. Требуется такой запрос: select field1 from table1 where ((field1 = var1) or (field2 = var2))
Получился такой код: query query = new query(); queryBuildDatasource qbds; ; qbds = query.addDataSource(tablenum(table1)); qbds.addRange(fieldNum(Table1, Field1)).value(strfmt("((%1 == %2) || (%3 == %4))", fieldNum(Table1, Field1), var1, fieldNum(Table1, Field2), var2)) ; qbds в инфологе выглядит так: SELECT FIRSTFAST * FROM table1 WHERE ((((30001 == var1) || (30002 == var)))) . Проблема : если в var1, var2 использовать число, все работает. Но у таблицы поля стринг и условие должно быть строка. А вот если var1, var2 строка, например 'f', выдается ошибка расширенного диапазона запроса. Что еще заметил: без скобок ошибок нет, но без скобок мне не нужно. Т.е. когда запрос в инфологе получается только с 2 скобками, ошибки нет. Так, если записать qbds.addRange(fieldNum(Table1, Field1)).value(strfmt("%1 == %2 || %3 == %4", fieldNum(Table1, Field1), var1, fieldNum(Table1, Field2), var2)) ; В инфологе будет SELECT FIRSTFAST * FROM table1 WHERE ((30001 == var1) || (30002 == var)) без ошибки. Пробовал strfmt("(%1 == N'%2') || (%3 == N'%4')", ... Пробовал менять местами кавычки '' и "". Ошибка - Неправильные типы аргументов операции сравнения. Что за беда. Мож знает кто. Последний раз редактировалось uskutus; 11.04.2012 в 12:08. |
|
11.04.2012, 12:15 | #2 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: uskutus (1). |
11.04.2012, 12:24 | #3 |
Участник
|
...
anytype value; ; switch (typeof(_value)) { case Types::Enum : value = any2int(_value); break; case Types::String : value = strfmt('"%1"', _value); break; default : value = _value; break; } ... Обрати внимание на кавычки. |
|
|
За это сообщение автора поблагодарили: uskutus (1). |
11.04.2012, 13:11 | #4 |
Участник
|
Цитата:
Цитата:
Что-то другое имелось ввиду? |
|
11.04.2012, 13:26 | #5 |
Участник
|
Проверьте все ещё раз. Должно работать. Вот работающий пример:
X++: static void JobTestStrInRange(Args _args) { CustTable CustTable; Query Query; QueryRun queryRun; ; Query = new Query(); Query. addDataSource(tableNum(CustTable)). addRange(fieldNum(CustTable, TableId)). value(strfmt('((%1 == "%2") || (%3 == "%4"))', fieldstr(CustTable, AccountNum), "aaa", fieldstr(CustTable, Name), "bbb")); queryRun = new QueryRun(Query); while (queryRun.next()) { info("!"); } } Последний раз редактировалось S.Kuskov; 11.04.2012 в 13:30. |
|
11.04.2012, 13:48 | #6 |
Участник
|
|
|