|
18.11.2008, 18:28 | #1 |
Участник
|
При замене OuterJoin на InnerJoin ничего не изменилось, кроме количества выводимых строк(что понятно) - но addressState.name по-прежнему пусто
Цитата:
Добавьте SortField по этому полю.
X++: qbds.addSortField(fieldnum(AddressState,Name)); X++: qbdsJoin.addSortField(fieldnum(AddressState,Name)); |
|
18.11.2008, 18:46 | #2 |
MCITP
|
Цитата:
Сообщение от Peppi
При замене OuterJoin на InnerJoin ничего не изменилось, кроме количества выводимых строк(что понятно) - но addressState.name по-прежнему пусто
Добавила строку : X++: qbds.addSortField(fieldnum(AddressState,Name)); X++: qbdsJoin.addSortField(fieldnum(AddressState,Name)); 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 |
MCITP
|
А если придираться до конца, то явно должно быть начало вот такое
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 |
Участник
|
Спасибо, я подумала, что одно упоминание group by делает весь запрос групбай и соответственно не указывала явно это. Как только добавила группировку, все получилось, спасибо большое за объяснение!
|
|
19.11.2008, 16:49 | #5 |
Участник
|
Еще возник теперь такой вопрос, как строку запроса(часть where)
X++: Table1.Field1!= Value1 && Table1.Field1!= Value2 && Table1.Field1!= Value3 && Код вида : 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 |
|
19.11.2008, 17:03 | #6 |
MCITP
|
Пишу "на глаз", возможны синтаксические ошибки:
1. X++: qbr.value(strFmt('( (%1.%2 != %3) && (%1.%2 != %4) )' ,qbds.name() ,FieldId2Name(tableNum(MyTable), fieldNum(MyTable, MayField)) ,value1 // если строка, нужно взять в двойные кавычки, если енум - то в виде числа (int) ,value2); X++: qbr.value(strFmt('<%1', queryValue(SomeDate)));
__________________
Zhirenkov Vitaly |
|
|
|