|
|
|
|
#1 |
|
Участник
|
Сколько датасурсов у вас на форме и как они связаны? Зачем программно меняете структуру query (зачем добавляете ещё датасурс командой addDataSource)?
|
|
|
|
|
#2 |
|
Участник
|
Цитата:
Запрос для временной таблицы такого вида: 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. |
|
|
|
|
#3 |
|
Участник
|
Цитата:
addLink - позволяет указать поля по которым система будет соединять связанные датасурсы. Метод addLink нужно вызывать у подчинённого датасурса. Датасурс на этот момент должен быть инициализирован. Т.е. делать это не раньше чем отработает super() в методе init() соответствующего датасурса. |
|
|
|
|
#4 |
|
Участник
|
Цитата:
Сообщение от S.Kuskov
addDataSource добавляет ещё один подчинённый датасорс. Так что, если все необходимые датасурсы у вас итак заранее вынесены на форму и связанны друг с другом (прописаны свойства JoinSouce и LinkType), то необходимости в нём нет.
addLink - позволяет указать поля по которым система будет соединять связанные датасурсы. Метод addLink нужно вызывать у подчинённого датасурса. Датасурс на этот момент должен быть инициализирован. Т.е. делать это не раньше чем отработает super() в методе init() соответствующего датасурса. Если я правильно понял, требуется вызвать метод SetCursor, как то я неправильно его вызываю. |
|
|
|
|
#5 |
|
Участник
|
в каком месте проявляется эта ошибка?
Цитата:
Связи должны работать (не выдавать ошибок) и на пустых таблицах. |
|
|
|
|
#6 |
|
Участник
|
findOrCreateRange_W(qbds, fieldnum(myTable, key), SysQuery::valueEmptyString());
Это код в executequery, созданный уже до меня, выполняется до моего кода, с моей временной таблицей никак не связан. Похоже что x++ видит связь в свойствах, пытается ее приджойнить, а она пустая. Если программно, то вот я писал: qbds = qbds.addDataSource(tablenum(myTable)); если предыдущую строчку убрать, то здесь: qbds.addLink(fieldnum(myTable, key), fieldnum(myTmpTable, key)); |
|
|
|
|
#7 |
|
Участник
|
Цитата:
При добавлении новых датасурсов нумерацию изменяется. Если дело в этом, то просто замените dataSourceNo, на dataSourceTable или dataSourceName. |
|
|
|
| За это сообщение автора поблагодарили: uskutus (1). | |
|
|
#8 |
|
Участник
|
Тут может быть еще проблема в том, что inner join я прописывал на основной таблице, потому что если прописать на временной, будет ошибка - "временные таблицы не должны быть вложенными."
QueryBuildDataSource qbds = this.query().dataSourceTable(tablenum(myTable)); Последний раз редактировалось uskutus; 02.05.2012 в 14:49. |
|
|
|
|
#9 |
|
Участник
|
|
|
|
| Теги |
| ax2.5 |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|