|  13.10.2006, 09:47 | #1 | 
| Участник | Вопрос по SysQueryRun 
			
			Первый раз решил поработать с запросами, возникли вопросики, подскажите плиз: 1. После объявления всех DataSource, как их связать? 2. Где можно обработать результаты выполнения запроса? | 
|  | 
|  13.10.2006, 10:03 | #2 | 
| Участник | 
			
			Попробуйте поискать код а Аксапте, который оперирует классами Query, QueryRun. Вопросы отпадают сами с собой (иногда, правда, вместе с челюстью)  С уважением, itfs. | 
|  | |
| За это сообщение автора поблагодарили: zemlyn (1). | |
|  13.10.2006, 10:08 | #3 | 
| Участник | 
			
			Я думаю что таблицы должны связываться в initQuery, только как    | 
|  | 
|  13.10.2006, 10:09 | #4 | 
| Участник | 
			
			1.)  Смотрите методы  joinDatasource  AddLink и т.д. 2.) В своём коде, конечно. Код: while (qr.next())
{
   table = qr.getNo(1);
} | 
|  | 
|  13.10.2006, 10:13 | #5 | 
| Участник | 
			
			1. Связываются объекты QueryBuildDataSource (у дочернего источника) с помощью метода relations с передачей в него параметра true, если существует связь между таблицами в модели данных, или же с использованием метода addLink с указанием поля, по которорму будет связь. addDynaLink - это для форм. 2. В каком смысле где? У класса есть методы next() для получения следующей записи и метод get() для получения конкретного курсора. | 
|  | 
|  13.10.2006, 10:19 | #6 | 
| Участник | |
|  | 
|  13.10.2006, 10:23 | #7 | 
| Участник | 
			
			Что-то типа этого? queryDataSource1 = query.addDataSource( tablenum( inventTable )); queryDataSource2 = query.addDataSource( tablenum( inventSum )); queryDataSource2.relations(true); | 
|  | 
|  13.10.2006, 10:41 | #8 | 
| Участник | Цитата: Альтернативный же вариант такой: X++: queryDataSource2.addLink(fieldNum(InventTable, ItemId), fieldNum(InventSum, ItemId)); | 
|  | 
|  13.10.2006, 10:48 | #9 | 
| Участник | 
			
			Сенкс, щас будем пробовать
		 | 
|  | 
|  13.10.2006, 10:49 | #10 | 
| Участник | 
			
			Еще вопрос в догонку, где перечислять поля, выводимые запросом?
		 | 
|  | 
|  13.10.2006, 10:59 | #11 | 
| Участник | |
|  | 
|  13.10.2006, 11:01 | #12 | 
| Участник | 
			
			А можно потом из этого Query делать еще выборку простым select'ом
		 | 
|  | 
|  13.10.2006, 11:05 | #13 | 
| Участник | 
			
			Нет. простым не получится. Но всегда можно пройти по выбранным строкам: X++: QueryRun qr = new QueryRun(yourQuery); ; while (qr.next()) { iSum = qr.get(tableNum(InventSum)); info(iSum.itemId); } | 
|  | 
|  13.10.2006, 11:36 | #14 | 
| Участник | 
			
			1.) Имхо, AX-300-DVG-002-v01.00-ENUS.chm, там всё написано + примеры. 2.) Я лично очень часто исползую поиск по АОТ для поиска примеров, введите ключевое слово и бы найдёте кучу примеров!! | 
|  | 
|  13.10.2006, 13:00 | #15 | 
| Участник | 
			
			Всем премного благодарен!    | 
|  | 
|  17.10.2006, 07:48 | #16 | 
| Участник | 
			
			Еще такой вопросик возник: Возможно ли создать запрос, чтобы он работал как вот такой select: select a, sum (b) from table group by a | 
|  | 
|  17.10.2006, 09:35 | #17 | 
| NavAx | Цитата: Код:     Query                                    query = new Query(); 
    QueryBuildDataSource            qbds1; 
    ; 
    qbds1 = query.AddDataSource(tablenum(Table)); 
    qbds1.ordermode(ordermode::groupby); 
    qbds1.addSortField(fieldnum(Table, a)); 
    qbds1.addSelectionField(fieldnum(Table, b), selectionField::Sum); 
    info(query.dataSourceNo(1).toString()); | 
|  | 
|  17.10.2006, 09:49 | #18 | 
| Участник | 
			
			А если я потом буду обращаться к этому полю queryDataSource2.addSelectionField(fieldnum( inventSum, postedQty ), selectionField::Sum); iSum = queryrun.get(tableNum(InventSum)); info(iSum.PostedQty) Мне выдаст уже просуммированное значение? | 
|  | 
|  17.10.2006, 09:58 | #19 | 
| Участник | 
			
			Помогите, а то вообще замучался, что я не так написал, прикрепляю проект. Мне надо собрать запрос по трем таблицам, с группировкой по двух полям. В цикле while (queryrun.next()) { Выдает всего одно значение | 
|  | 
|  17.10.2006, 10:01 | #20 | 
| Участник | Цитата: Создайте запрос мышкой в AOT. Назовите его myAOTSuperQuery. в коде напишите одну строчку X++: Query q = new Query(querystr(myAOTSuperQuery)); | 
|  |