|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() addDataSource добавляет ещё один подчинённый датасорс. Так что, если все необходимые датасурсы у вас итак заранее вынесены на форму и связанны друг с другом (прописаны свойства JoinSouce и LinkType), то необходимости в нём нет.
addLink - позволяет указать поля по которым система будет соединять связанные датасурсы. Метод addLink нужно вызывать у подчинённого датасурса. Датасурс на этот момент должен быть инициализирован. Т.е. делать это не раньше чем отработает super() в методе init() соответствующего датасурса. Если я правильно понял, требуется вызвать метод SetCursor, как то я неправильно его вызываю. |
|
![]() |
#2 |
Участник
|
в каком месте проявляется эта ошибка?
Цитата:
Связи должны работать (не выдавать ошибок) и на пустых таблицах. |
|
![]() |
#3 |
Участник
|
findOrCreateRange_W(qbds, fieldnum(myTable, key), SysQuery::valueEmptyString());
Это код в executequery, созданный уже до меня, выполняется до моего кода, с моей временной таблицей никак не связан. Похоже что x++ видит связь в свойствах, пытается ее приджойнить, а она пустая. Если программно, то вот я писал: qbds = qbds.addDataSource(tablenum(myTable)); если предыдущую строчку убрать, то здесь: qbds.addLink(fieldnum(myTable, key), fieldnum(myTmpTable, key)); |
|
![]() |
#4 |
Участник
|
Цитата:
При добавлении новых датасурсов нумерацию изменяется. Если дело в этом, то просто замените dataSourceNo, на dataSourceTable или dataSourceName. |
|
|
За это сообщение автора поблагодарили: uskutus (1). |
![]() |
#5 |
Участник
|
Тут может быть еще проблема в том, что inner join я прописывал на основной таблице, потому что если прописать на временной, будет ошибка - "временные таблицы не должны быть вложенными."
QueryBuildDataSource qbds = this.query().dataSourceTable(tablenum(myTable)); Последний раз редактировалось uskutus; 02.05.2012 в 14:49. |
|
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Участник
|
Цитата:
public void executeQuery() { QueryBuildDataSource qbds = this.query().dataSourceTable(tablenum(myTable)); ; if (radioCharGroup.text() == '<Пусто>') { findOrCreateRange_W(qbds, fieldnum(myTable, key), SysQuery::valueEmptyString()); } else findOrCreateRange_W(qbds, fieldnum(myTable, key), radioCharGroup.text()); super(); this.filltmptable(); } filltmptable(); и до и после super() ставил. Результат одинаковый. в filltmptable() пытаюсь соединить их. P.S. Похоже что действительно что-то не то с кодом, написанным до меня. Эти старые фильтры как то не хотять жить с моей временной таблицей. Поразбираюсь. Последний раз редактировалось uskutus; 02.05.2012 в 15:51. |
|
![]() |
#8 |
Участник
|
Закомментировал старые фильтры. Декларативный join с временной таблицей работает нормально. Если включить эти фильтры, то без всякого моего кода будет ошибка времени выполнения "QueryBuildRange - объект не инизиализирован." еще на этапе init.
Если убрать все фильтры, декларативный join и попробовать программно: qbds = this.query().dataSourceTable(tablenum(mytmptable)); qbds = qbds.addDataSource(tablenum(myTable)); - "QueryBuildDataSource, объект не инициализирован." qbds.addLink(fieldnum(myTable, key), fieldnum(myTmpTable, key)); qbds.joinMode(JoinMode::InnerJoin); Видимо явления одного порядка. Еще вот так попробовал: qbds = this.query().dataSourceTable(tablenum(mytmptable)); qbds = this.query().addDataSource(tablenum(myTable)); Ошибка - "Источник данных не входит в состав родительского источника данных." Эта ошибка уже возникает в Classes\info\View. Последний раз редактировалось uskutus; 02.05.2012 в 17:37. |
|
![]() |
#9 |
Участник
|
Цитата:
findOrCreateRange_W(qbds, fieldnum(myTable, key), SysQuery::valueEmptyString()); ? А на какой строчке в методе init() выдаётся ошибка? |
|
Теги |
ax2.5 |
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|