01.10.2010, 11:24 | #1 |
Участник
|
Работа с DataSource в executeQuery()
Здравия всем.
Создал форму, в методе executeQuery() одного из DataSource установил фильтры (addRange). Подскажите, пожалуйста, как оптимально пройтись по всем записями этого DataSource (нужно для вставки записей в другую таблицу на основе полей текущей). |
|
01.10.2010, 11:28 | #2 |
Ищущий знания...
|
Цитата:
вот пример кода: X++: for (table1 = (Table_DS.getFirst(1, 1) ? Table_DS.getFirst(1, 1) : Table ); table1 ; table1 = Table_DS.getNext())
{
...
}
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: Prophetic (1). |
01.10.2010, 11:30 | #3 |
----------------
|
Лучше взять из DS квери, сделать QueryRun и уже из него брать записи.
|
|
|
За это сообщение автора поблагодарили: Prophetic (1). |
01.10.2010, 11:30 | #4 |
Участник
|
Самый оптимальный способ - это написать запрос с теми же таблицами, что и DS и теми же Range'ми - и пройтись по записям
|
|
|
За это сообщение автора поблагодарили: Prophetic (1). |
01.10.2010, 11:34 | #5 |
Ищущий знания...
|
Ну это смотря что нужно.
Мне показалось, что топикстартеру надо обработать именно те записи, которые выбраны на форме, т.е. которые выделены курсором. З.Ы. конечно если нужны записи, которые выбираются по фильтру указанному в форме, то полностью с вами согласен.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
01.10.2010, 11:38 | #6 |
Участник
|
Правильно там, где ЗЫ.
|
|
01.10.2010, 11:39 | #7 |
Участник
|
|
|
01.10.2010, 11:52 | #8 |
Ищущий знания...
|
если проинициализируете новые query и queryRun на основании Table_ds.query(), то ничего не случиться
пример для наглядности: X++: Query query; QueryRun queryRun; ; query = new Query(Table_ds.queryRun().query().pack()); queryRun = new QueryRun(query); info(query.dataSourceNo(1).toString());
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 01.10.2010 в 12:49. Причина: изменил пример кода |
|
01.10.2010, 11:55 | #9 |
MCTS
|
Тут нужно только помнить, что query датасорса не всегда содержит фильтр, наложенный на форму ). Сам недавно с этим столкнулся.
__________________
I could tell you, but then I would have to bill you. |
|
01.10.2010, 11:57 | #10 |
Участник
|
|
|
01.10.2010, 11:59 | #11 |
Ищущий знания...
|
Цитата:
Просто интересно как тогда данные фильтруются, что бы правильно на форме отобразиться... Проясните пожалуйста
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
01.10.2010, 12:00 | #12 |
Участник
|
Цитата:
X++: loqQuery = qqq_ds.queryRun() ? qqq_ds.queryRun().query() : qqq_ds.query(); |
|
01.10.2010, 12:03 | #13 |
Участник
|
Если я не ошибаюсь, QueryRun есть всегда, правда после выполнения super() executeQuery датасоурса.
|
|
01.10.2010, 12:43 | #14 |
Участник
|
В query() хранится DS который был сформирован в момент инициализации датасорса. Потом этот query копируется в queryRun и форма работает уже с ним. Получается что на форме есть два запроса: 1. Сформированный в момент инициализации. 2. Текущий запрос формы из queryRun. После того как форма запустилась нужно работать с запросом из queryRun. При сбросе всех фильтров и сортировок на форме запрос из query() копируется в queryRun().query().
|
|
|
За это сообщение автора поблагодарили: lev (3), tricky (1), Prophetic (1). |
01.10.2010, 13:16 | #15 |
Участник
|
Надо еще дайналинки учесть. Если есть дайналинки то запрос просто так не скопируешь. Игнорировать их нельзя.
|
|
|
За это сообщение автора поблагодарили: tricky (2), Prophetic (1). |
01.10.2010, 13:44 | #16 |
----------------
|
|
|
|
За это сообщение автора поблагодарили: Prophetic (1). |
|
|