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)); |
|