AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.04.2012, 11:56   #1  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Ошибка расширенного диапазона запроса: Ожидается правая круглая скобка рядом с 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  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
qbds в инфологе выглядит так:

SELECT FIRSTFAST * FROM table1 WHERE ((((30001 == var1) || (30002 == var))))
И вас это устраивает? Может стоит использовать fieldstr вместо fieldnum?
За это сообщение автора поблагодарили: uskutus (1).
Старый 11.04.2012, 12:24   #3  
rINT is offline
rINT
Участник
 
31 / 21 (1) +++
Регистрация: 16.11.2004
...
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  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
И вас это устраивает? Может стоит использовать fieldstr вместо fieldnum?
Возможно. Я по примерам делал, с аксаптой недавно начал работать. Если прописать поле строкой таже самая байда.

Цитата:
Сообщение от rINT Посмотреть сообщение
...
anytype value;
;

switch (typeof(_value))
{
case Types::Enum :
value = any2int(_value);
break;

case Types::String :
value = strfmt('"%1"', _value);
break;

default :
value = _value;
break;
}
...
Обрати внимание на кавычки.
Про кавычки я писал : strfmt("(%1 == N'%2') || (%3 == N'%4')"....
Что-то другое имелось ввиду?
Старый 11.04.2012, 13:26   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,429 / 1772 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
Если прописать поле строкой таже самая байда.
Проверьте все ещё раз. Должно работать. Вот работающий пример:
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("!");
    }
}
P.S.: http://www.axaptapedia.com/index.php...n_query_ranges

Последний раз редактировалось S.Kuskov; 11.04.2012 в 13:30.
Старый 11.04.2012, 13:48   #6  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Проверьте все ещё раз. Должно работать. Вот работающий пример:
Действительно работает. Видимо сразу несколько ошибок наложилось и запутался. Спасибо.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Ошибка расширенного диапазона запроса: stTable2.ItemId не является корректной парой datasource.field рядом с 24. uchenik DAX: Программирование 14 05.05.2011 08:47
Ошибка при определении запроса в RLS mass DAX: Программирование 3 03.03.2009 12:51
Ошибка в интерпретации запроса Mike2005 DAX: Программирование 4 02.11.2007 06:31
Ошибка расширенного диапазона Yugene DAX: Программирование 1 21.04.2006 10:36
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:17.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.