|
![]() |
#1 |
Участник
|
Цитата:
![]() Классы Query, QueryBuildDataSource, QueryBuildRange реализуют/формируют структуру запроса. Класс QueryRun реализует обход/цикл по сформированному запросу (Query) На форме перебор записей/обход запроса реализуется ядром системы самостоятельно, без вмешательства прораммиста и явного использования QueryRun. Датасурс формы (FormDataSource, котрый лежит на форме в узле DataSource) выполняет одновременно и роль элемента query (QueryBuildDatasource) и табличного курсора (Common), через который осуществляется доступ к активной строке таблицы. На самом деле и при использовании QueryRun неявно создаются подобные табличные курсоры, связанные с каждым QueryBuildDatasource. Именно их возвращает метод queryRun.get(). Метод queryRun.setCursor() позволяет подменить автоматически созданный при инициализации queryRun курсор на свой. Это в частности позволяет подсовывать в QueryRun курсоры от временных таблиц или осуществлять вот такие штуки queryRun метод get При работе с датасурсами формы нет необходимости в использовании setCursor для связи источника с временной таблицей, т.к. имея непосредственный доступ к табличному курсору источника, связь с временными данными можно сделать через setTmpData. Каждый раз при объявлении курсора временной таблицы или при вызове метода common.setTmp (преобразовании постоянного курсора во временный) система создаёт отдельный временный буфер данных. Для каждого курсора даже одного и того же типа, будет создан независимый от других курсоров буфер. Метод setTmpData позволяет несколько табличных курсоров связать с одним временным буфером данных. Не путайте с простым присваиванием одного курсора другому. Курсоры, связанные через setTmpData, могут независимо друг от друга перемещаться по данным (т.е. select одного курсора не изменит позицию и выборку другого). В тоже время setTmpData не выполняет копирования данных (происходит именно назначение курсору ссылки на буфер) - это означает, что изменение данных (вставка/изменение/удаление) через один из курсоров будет непосредственно отражаться на всех остальных курсорах связанных с тем же временным буфером. |
|
|
За это сообщение автора поблагодарили: sukhanchik (2), driller (2), AndyPanda (0). |
![]() |
#2 |
Участник
|
Всем спасибо. С ошибкой в
qbds = this.query().dataSourceTable(tablenum(mytmptable)); qbds = qbds.addDataSource(tablenum(myTable)); - "QueryBuildDataSource, объект не инициализирован." вроде разобрался. Этот код был в executequery mytable. Наоборот было нельзя, т.к. временные таблицы не должны быть вложенными. Поставил в executequery mytmptable, ошибка исчезла. Еще много чего не работает. Будем дальше познавать тайны аксапты) |
|
![]() |
#3 |
Участник
|
Очередная проблема. После джойна с временной таблицей, невозможно выбрать ни одну запись в гриде. Сразу курсор перескакивает на первую запись.
|
|
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
|
|