AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.05.2012, 13:01   #1  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,450 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
...
Делаю. В ExequteQuery датасоурса постоянной таблицы myTable.
...
mytmptable1 имя datasource с временной таблицей.
...
Сколько датасурсов у вас на форме и как они связаны? Зачем программно меняете структуру query (зачем добавляете ещё датасурс командой addDataSource)?
Старый 02.05.2012, 13:23   #2  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Сколько датасурсов у вас на форме и как они связаны? Зачем программно меняете структуру query (зачем добавляете ещё датасурс командой addDataSource)?
Датасоурсов 6 штук. Меня интересуют только 2 - постоянная и временная таблица. Между ними связь по ключам key.

Запрос для временной таблицы такого вида:

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.
Старый 02.05.2012, 14:08   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,450 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
Я подумал, что QueryBuildDataSource qbds; для формирования связи требует такого синтаксиса.
addDataSource добавляет ещё один подчинённый датасорс. Так что, если все необходимые датасурсы у вас итак заранее вынесены на форму и связанны друг с другом (прописаны свойства JoinSouce и LinkType), то необходимости в нём нет.

addLink - позволяет указать поля по которым система будет соединять связанные датасурсы.
Метод addLink нужно вызывать у подчинённого датасурса. Датасурс на этот момент должен быть инициализирован. Т.е. делать это не раньше чем отработает super() в методе init() соответствующего датасурса.
Старый 02.05.2012, 14:17   #4  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
addDataSource добавляет ещё один подчинённый датасорс. Так что, если все необходимые датасурсы у вас итак заранее вынесены на форму и связанны друг с другом (прописаны свойства JoinSouce и LinkType), то необходимости в нём нет.

addLink - позволяет указать поля по которым система будет соединять связанные датасурсы.
Метод addLink нужно вызывать у подчинённого датасурса. Датасурс на этот момент должен быть инициализирован. Т.е. делать это не раньше чем отработает super() в методе init() соответствующего датасурса.
свойства JoinSouce и LinkType для временной таблицы не прописаны, так как выдается ошибка что датасоурс не проинициализирован. Собственно, я создаю временную таблицу в методе executequery главной таблицы, поэтому на момент Init временной, ее еще нет. Поэтому я делаю связь программно после создания временной, и опять получаю ошибку, что датасоурс не проинициализирован.

Если я правильно понял, требуется вызвать метод SetCursor, как то я неправильно его вызываю.
Старый 02.05.2012, 14:23   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,450 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
выдается ошибка что датасоурс не проинициализирован
в каком месте проявляется эта ошибка?

Цитата:
Сообщение от uskutus Посмотреть сообщение
Если я правильно понял, требуется вызвать метод SetCursor, как то я неправильно его вызываю.
Методы SetCursor и SetTmpData лишь меняют содержимое таблицы, но не создают её.
Связи должны работать (не выдавать ошибок) и на пустых таблицах.
Старый 02.05.2012, 14:31   #6  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
в каком месте проявляется эта ошибка?
findOrCreateRange_W(qbds, fieldnum(myTable, key), SysQuery::valueEmptyString());

Это код в executequery, созданный уже до меня, выполняется до моего кода, с моей временной таблицей никак не связан. Похоже что x++ видит связь в свойствах, пытается ее приджойнить, а она пустая.

Если программно, то вот я писал:

qbds = qbds.addDataSource(tablenum(myTable));

если предыдущую строчку убрать, то здесь:
qbds.addLink(fieldnum(myTable, key), fieldnum(myTmpTable, key));
Старый 02.05.2012, 14:44   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,450 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
findOrCreateRange_W(qbds, fieldnum(myTable, key), SysQuery::valueEmptyString());
переменная qbds как инициализируется? через dataSourceNo?
При добавлении новых датасурсов нумерацию изменяется. Если дело в этом, то просто замените dataSourceNo, на dataSourceTable или dataSourceName.
За это сообщение автора поблагодарили: uskutus (1).
Старый 02.05.2012, 14:46   #8  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Тут может быть еще проблема в том, что inner join я прописывал на основной таблице, потому что если прописать на временной, будет ошибка - "временные таблицы не должны быть вложенными."

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
переменная qbds как инициализируется? через dataSourceNo?
QueryBuildDataSource qbds = this.query().dataSourceTable(tablenum(myTable));

Последний раз редактировалось uskutus; 02.05.2012 в 14:49.
Старый 02.05.2012, 14:54   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,450 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
Это код в executequery, созданный уже до меня, выполняется до моего кода, с моей временной таблицей никак не связан...
Насторожило, что код этот выполняется до вашего. А в чьём executequery (т.е. в методе какого датасурса) он находится?
Теги
ax2.5

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Передать временную таблицу из формы в класс Eldar9x DAX: Программирование 26 20.06.2008 19:09
Как join'ить временную таблицу и query на форме IvanS DAX: Программирование 1 07.05.2008 09:49
Два DataSource на одну временную таблицу mou DAX: Программирование 4 22.03.2008 11:00
импорт текст.файла во временную таблицу fialka DAX: Программирование 5 07.02.2007 15:42
Как передать временную таблицу Aslan DAX: Программирование 15 23.05.2006 17:34
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:01.