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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.11.2008, 18:28   #1  
Peppi is offline
Peppi
Участник
 
31 / 11 (1) +
Регистрация: 22.10.2008
При замене OuterJoin на InnerJoin ничего не изменилось, кроме количества выводимых строк(что понятно) - но addressState.name по-прежнему пусто
Цитата:
Добавьте SortField по этому полю.
Добавила строку :
X++:
 qbds.addSortField(fieldnum(AddressState,Name));
- Эффект тот же.
X++:
 qbdsJoin.addSortField(fieldnum(AddressState,Name));
дает ошибку "Невозможно выбрать запись в Клиенты (CustTable). Счет клиента: , .База данных SQL обнаружила ошибку."
Старый 18.11.2008, 18:46   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Peppi Посмотреть сообщение
При замене OuterJoin на InnerJoin ничего не изменилось, кроме количества выводимых строк(что понятно) - но addressState.name по-прежнему пусто

Добавила строку :
X++:
 qbds.addSortField(fieldnum(AddressState,Name));
- Эффект тот же.
X++:
 qbdsJoin.addSortField(fieldnum(AddressState,Name));
дает ошибку "Невозможно выбрать запись в Клиенты (CustTable). Счет клиента: , .База данных SQL обнаружила ошибку."
для того чтобы заработало
X++:
 qbdsJoin.addSortField(fieldnum(AddressState,Name));
нужно поменять
X++:
qbdsJoin.orderMode(OrderMode::GroupBy);
я об этом уже упоминал.
И можно посмотреть SQL который вывалился в ошибку, чтоб увидеть какая в нём проблема.

Ещё есть такая очень полезная функция
X++:
info(qbds.toString());
И вы сразу увидите что с вашей кверёй не так.
__________________
Zhirenkov Vitaly
За это сообщение автора поблагодарили: Peppi (1).
Старый 18.11.2008, 18:51   #3  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
А если придираться до конца, то явно должно быть начало вот такое

X++:
    qbds.orderMode(OrderMode::GroupBy);
    qbds.addSortField(fieldnum(CustTable,CashDisc));
    qbds.addSortField(fieldnum(CustTable,CountryRegionId));
    qbds.addSortField(fieldnum(CustTable,State));
    qbds.addSelectionField(fieldnum(CustTable,CashDisc)); // !!! т.к. вы его потом вычитываете в переменной
    qbds.addSelectionField(fieldnum(CustTable,RecId),SelectionField::Count);
__________________
Zhirenkov Vitaly
Старый 19.11.2008, 09:22   #4  
Peppi is offline
Peppi
Участник
 
31 / 11 (1) +
Регистрация: 22.10.2008
Спасибо, я подумала, что одно упоминание group by делает весь запрос групбай и соответственно не указывала явно это. Как только добавила группировку, все получилось, спасибо большое за объяснение!
Старый 19.11.2008, 16:49   #5  
Peppi is offline
Peppi
Участник
 
31 / 11 (1) +
Регистрация: 22.10.2008
Еще возник теперь такой вопрос, как строку запроса(часть where)
X++:
                  Table1.Field1!= Value1               &&
                  Table1.Field1!= Value2         &&
                  Table1.Field1!= Value3        &&
Записать с помощью addRange?
Код вида :
X++:
        qbds.addRange(fieldnum(Table1,Field1)).value(SysQuery::valueNot(Value1));
        qbds.addRange(fieldnum(Table1,Field1)).value(SysQuery::valueNot(Value2));
        qbds.addRange(fieldnum(Table1,Field1)).value(SysQuery::valueNot(Value3));
преобразуется в
((NOT (Field1= Value1)) OR (NOT (Field1= Value2)) OR (NOT (Field1= Value3))

И как правильнее записать строку вида
X++:
Table1.Field4< SomeDate
так же с помощью addRange?
Старый 19.11.2008, 17:03   #6  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Пишу "на глаз", возможны синтаксические ошибки:

1.
X++:
    qbr.value(strFmt('( (%1.%2 != %3)  && (%1.%2 != %4) )'
                    ,qbds.name()
                    ,FieldId2Name(tableNum(MyTable), fieldNum(MyTable, MayField))
                    ,value1 // если строка, нужно взять в двойные кавычки, если енум - то в виде числа (int)
                    ,value2);
2.
X++:
qbr.value(strFmt('<%1', queryValue(SomeDate)));
__________________
Zhirenkov Vitaly
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
Простой QueryRun не работает miklenew DAX: Программирование 13 20.01.2009 14:17
OZKA's DAX Journal: Join между временной и постоянной таблицей через QueryRun. Blog bot DAX Blogs 12 14.01.2009 17:34
queryRun в рамках RunBaseBatch Smith DAX: Программирование 6 26.04.2005 11:03
Проблема: подстановка значений по дефолту в диалог QueryRun cyrus DAX: Программирование 4 21.03.2003 09:39

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:21.