|
![]() |
#1 |
Участник
|
Хм... А что мешает сделать join с временной таблицей? Извените, конечно, если что - то не понял? Как вариант :
queryRun.setCursor(common); Передаём туда временную таблицу (естественно изменив перед этим Query) и... Вуаля - должно работать ![]() |
|
![]() |
#2 |
Участник
|
Не получается сделать join.
Делаю. В ExequteQuery датасоурса постоянной таблицы myTable. mytmptable mytmp; ; *** mytmptable1.setTmpData(mytmp); //mytmptable1 имя datasource с временной таблицей. qbds = this.query().dataSourceTable(tablenum(mytmptable)); qbds = qbds.addDataSource(tablenum(myTable)); - на этой строчке компилятор ругается "QueryBuildDataSource, объект не инициализирован." qbds.addLink(fieldnum(myTable, key), fieldnum(myTmpTable, key)); qbds.joinMode(JoinMode::InnerJoin); Под инициализацией это имелось ввиду? Цитата:
Попробовал вставить this.queryRun().setCursor(mytmp); В этой строке выдается ошибка - "неправильный аргумент типа функции." Причем почему-то уже на этапе выполнения. Последний раз редактировалось uskutus; 02.05.2012 в 12:40. |
|
![]() |
#3 |
Участник
|
Сколько датасурсов у вас на форме и как они связаны? Зачем программно меняете структуру query (зачем добавляете ещё датасурс командой addDataSource)?
|
|
![]() |
#4 |
Участник
|
Цитата:
Запрос для временной таблицы такого вида: while select mytable { select firstfast firstonly mytmptable order by f1 desc, f2 desc where mytmptable.key2 == table2.key2 && mytmptable.key == mytable.key; *** } Мне для формирования нужна только 1 выделенная запись из table2, поэтому весь набор проходить вроде как ни к чему. Программно меняю, потому что при соединении декларативно при выполнении аксапта ругается на то, что datasourse не инициализирован в местах, где совершенно не понятно, что ей не нравится. addDataSource сделал, разбираясь в примерах, может быть и не надо было. Я подумал, что QueryBuildDataSource qbds; для формирования связи требует такого синтаксиса. если убрать строчку qbds = qbds.addDataSource(tablenum(myTable)); Ошибка возникает на строке qbds.addLink(fieldnum(myTable, key), fieldnum(myTmpTable, key)); Да, и еще. Требуется реализовать фильтр в зависимости от состояния элемента управления, поэтому также query приходится менять программно. Последний раз редактировалось uskutus; 02.05.2012 в 14:08. |
|
![]() |
#5 |
Участник
|
Цитата:
addLink - позволяет указать поля по которым система будет соединять связанные датасурсы. Метод addLink нужно вызывать у подчинённого датасурса. Датасурс на этот момент должен быть инициализирован. Т.е. делать это не раньше чем отработает super() в методе init() соответствующего датасурса. |
|
![]() |
#6 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() addDataSource добавляет ещё один подчинённый датасорс. Так что, если все необходимые датасурсы у вас итак заранее вынесены на форму и связанны друг с другом (прописаны свойства JoinSouce и LinkType), то необходимости в нём нет.
addLink - позволяет указать поля по которым система будет соединять связанные датасурсы. Метод addLink нужно вызывать у подчинённого датасурса. Датасурс на этот момент должен быть инициализирован. Т.е. делать это не раньше чем отработает super() в методе init() соответствующего датасурса. Если я правильно понял, требуется вызвать метод SetCursor, как то я неправильно его вызываю. |
|
![]() |
#7 |
Участник
|
в каком месте проявляется эта ошибка?
Цитата:
Связи должны работать (не выдавать ошибок) и на пустых таблицах. |
|