Показать сообщение отдельно
Старый 05.06.2008, 18:18   #11  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Цитата:
Сообщение от Elenka Посмотреть сообщение
данная функция возвравращает ссылку на ранее созданый range, но в Value пусто, хотя там должно быть accountNum=Значение1, поскольку первоначально фильтр по этому полю был наложен. Далее как Вы и говорите пишу qbr.Value(SysQuery::value("Значение1")) либо просто qbr.Value("Значение1"). В результате получаю в where запроса (accountNum = значение1 Or accountNum= значение1)
Проблема в том, что первоначально у вас было два ranges: один пустой, а второй - "Значение1" (вы проверяли _query.xml()?). Когда вы делали clearRange, удалялся пустой range, а "Значение1" оставалось. После этого вы добавляли еще один range "Значение1", вот и получали в where запроса "(accountNum = значение1 Or accountNum= значение1)";
Следующий код это иллюстрирует:
X++:
static void JobTest(Args _args)
{
    Query                   q       = new Query();
    QueryBuildDataSource    qbds    = q.addDataSource(tablenum(VendTrans));
    ;

    qbds.addRange(fieldNum(VendTrans,AccountNum));
    qbds.addRange(fieldNum(VendTrans,AccountNum)).value('Test1');
    info(q.xml());
    qbds.clearRange(fieldnum(VendTrans,AccountNum));
    qbds.addRange(fieldNum(VendTrans,AccountNum)).value('Test2');
    info(qbds.toString());
}
Конечный запрос выглядит так:
"SELECT * FROM VendTrans WHERE ((AccountNum = N'Test1') OR (AccountNum = N'Test2'))"

Последний раз редактировалось Hyper; 05.06.2008 в 18:21.