08.07.2011, 15:55 | #1 |
Участник
|
queryRun метод get
DAX3 KR3: Обнаружил интересную особенность работы queryRun.
В документации,в примерах и в коде применяется следующая схема работы с QueryRun: X++: // инициализация QueryRun while (queryRun.next()) { <. > = queryRun.get(...); // обработка значений <таб. переменной> } в джобике продемонстрирован пример работы: X++: static void Job_QRGet_test(Args _args) { query q; queryRun qr; queryBuildDataSource qbds; inventTable it; inventTable it1; ; q = new query(); qbds = q.addDataSource(TableNum(inventTable)); qbds.addSelectionField(fieldNum(inventTable,itemName)); qbds.addRange(fieldNum(inventTable,itemId)).value("*"); qr = new queryRun(q); if (qr.next()) { it = qr.get(tableNum(inventTable)); it1 = qr.get(tableNum(inventTable)); do { info(it.itemName); } while (qr.next()); } }
__________________
--- SHiSHok |
|
|
За это сообщение автора поблагодарили: Oz (1), Logger (3), gl00mie (2), S.Kuskov (3). |
08.07.2011, 16:00 | #2 |
Участник
|
так и есть, в 2009 тоже самое
|
|
08.07.2011, 16:00 | #3 |
Участник
|
Наверное должно работать даже если присвоение сделать до цикла. Нужно попробовать.
В принципе всё логично Common - это же класс, а значит в переменных этого типа хранятся не сами экземпляры, а ссылки. X++: InventTable InventTable1;
InventTable InventTable2;
InventTable2 = InventTable1;
InventTable1.ItemId = "!";
info(InventTable2.ItemId); P.S.: В случае временных таблиц именно из-за этого и появился метод setTmpDate Последний раз редактировалось S.Kuskov; 08.07.2011 в 16:04. |
|
08.07.2011, 16:17 | #4 |
Участник
|
искал в доках - внятного описания так и не нашел
пробовал - не получается. видимо первый next() выделяет память и определяет место хранения записи.
__________________
--- SHiSHok |
|
08.07.2011, 16:20 | #5 |
Участник
|
|
|
08.07.2011, 16:34 | #6 |
Участник
|
А если до вызова next() вызвать что то типа
qr.setRecord(it) или qr.setCurrent(it) ( не помню уже какой из них есть у QueryRun-а ) |
|
|
За это сообщение автора поблагодарили: Oz (1), S.Kuskov (2). |
08.07.2011, 16:46 | #7 |
Участник
|
Цитата:
Работает X++: qr = new queryRun(q); qr.setRecord(it); if (qr.next()) { info(it.itemName); } |
|
Теги |
get, query, queryrun |
|
|