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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.05.2012, 14:17   #1  
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   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
выдается ошибка что датасоурс не проинициализирован
в каком месте проявляется эта ошибка?

Цитата:
Сообщение от uskutus Посмотреть сообщение
Если я правильно понял, требуется вызвать метод SetCursor, как то я неправильно его вызываю.
Методы SetCursor и SetTmpData лишь меняют содержимое таблицы, но не создают её.
Связи должны работать (не выдавать ошибок) и на пустых таблицах.
Старый 02.05.2012, 14:31   #3  
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   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 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   #5  
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   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
Это код в executequery, созданный уже до меня, выполняется до моего кода, с моей временной таблицей никак не связан...
Насторожило, что код этот выполняется до вашего. А в чьём executequery (т.е. в методе какого датасурса) он находится?
Старый 02.05.2012, 15:02   #7  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Насторожило, что код этот выполняется до вашего. А в чьём executequery (т.е. в методе какого датасурса) он находится?
my table.
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.
Старый 02.05.2012, 17:22   #8  
uskutus is offline
uskutus
Участник
 
28 / 10 (1) +
Регистрация: 04.04.2012
Закомментировал старые фильтры. Декларативный 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.
Старый 03.05.2012, 08:11   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,449 / 1792 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uskutus Посмотреть сообщение
Закомментировал старые фильтры. Декларативный join с временной таблицей работает нормально. Если включить эти фильтры, то без всякого моего кода будет ошибка времени выполнения "QueryBuildRange - объект не инизиализирован." еще на этапе init.
Т.е. это ещё до той ошибки в executeQuery на строке
findOrCreateRange_W(qbds, fieldnum(myTable, key), SysQuery::valueEmptyString());
?

А на какой строчке в методе init() выдаётся ошибка?
Теги
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, время: 00:21.