Ошибка расширенного диапазона запроса: Ожидается правая круглая скобка рядом с 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.
|