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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.07.2003, 13:50   #1  
VIS is offline
VIS
Участник
 
37 / 10 (1) +
Регистрация: 13.05.2003
? Как же все-таки организованиы Query и QueryRun?
У меня след. вопрос: я создаю запрос из кода, и в него добавляю два источника данных. Добавленные источники данных лежат на одном уровне, и связываются по полю MainId:

{
Query q = New Query();

q.addDatasource(tablenum(MainTable));
q.addDatasource(tablenum(LineTable));

q.dataSourceTable(LineTable).addRange(fieldnum(LineTable,MainId)).value("MainTable.MainId");

}

Если данный запрос я присоединяю к источнику данных на форме, отображающей главную и подчиненную форму - то все работает прекрасно.

Вопрос: Как я могу обратиться к записям таблиц(главной и подчиненной) через Query, QueryRun, в случае, если Query построен вышеописанным способом? Следующий метод возвращает пустую запись в LineTable:

{
QueryRun qr = New QueryRun(q);
MainTable MainTable;
LineTable LineTable;

while (qr.next())
{
MainTable = qr.get(MainTable);
SalesTable = qr.get(LineTable); //пустая запись
}
}
Также не помогло создавать для подчиненной таблицы свой QueryRun на основе Query с уже подставленным Range - возвращает произвольный набор строк из подчиненной таблицы
Старый 03.07.2003, 13:01   #2  
metal is offline
metal
Юзовские
Дети Юза
 
92 / 10 (1) +
Регистрация: 06.08.2002
Адрес: Украина
Помести один datasource внутрь другого, например так:
PHP код:
{
Query q = New Query();
QueryBuildDataSource qbds;

qbds q.addDatasource(tablenum(MainTable));
qbds.addDatasource(tablenum(LineTable));

q.dataSourceTable(LineTable).addRange(fieldnum(LineTable,MainId)).value("MainTable.MainId");


или так:
PHP код:
Query q = New Query();

q.addDatasource(tablenum(MainTable)).addDatasource(tablenum(LineTable));

q.dataSourceTable(LineTable).addRange(fieldnum(LineTable,MainId)).value("MainTable.MainId");


Возможно еще понадобится добавить связь методом addLink
Старый 03.07.2003, 15:10   #3  
VIS is offline
VIS
Участник
 
37 / 10 (1) +
Регистрация: 13.05.2003
Допустим у меня в MainTable и LineTable след. записи:
Заказ1
СтрокаLine1
СтрокаLine2
Заказ2
СтрокаLine3

Проблема в том, что если я так сделаю(свяжу источники данных, как главная и подчиненная, как addLink работает), то связь между таблицами MainTable и LineTable будет только InnerJoin (OuterJoin и т.д.) и после прикрепления этого запроса к источнику данных на форме данные будут отражаться след. образом:

Заказ1
СтрокаLine1
СтрокаLine2
Заказ1
СтрокаLine1
СтрокаLine2
Заказ2
СтрокаLine3

А нужно, чтобы в query был независимый источник данных по MainTable(1-ый) и независимый источник данных по LineTable(2-ой), записи по которому отбираются по значению MainId в 1-м источнике данных.
Непонятно, почему если я такой запрос присоединяю к источнику данных формы - все работает правильно, а когда делаю:

MainTable MainTable;
LineTable LineTable;
QueryRun qr_main = New QueryRun(q);//q - исходный запрос
QueryRun qr_desc;

while (qr.next())
{
MainTable = qr.get(tblenum(MainTable));
q.datasource(2).findrange(fieldnum(LineTable,MainId)).value(MainTable.MainId);

qr_desc = New QueryRun(q);
while (qr_desc.next())//СРАБОТАЕТ СТОЛЬКО РАЗ, СКОЛЬКО ЗАПИСЕЙ
//В MAINTABLE + ОТОБРАННЫЕ ЗАПИСИ В LINETABLE????!!!!!!
{
.....отберет почему-то больше записей
}
}
Старый 03.07.2003, 15:21   #4  
metal is offline
metal
Юзовские
Дети Юза
 
92 / 10 (1) +
Регистрация: 06.08.2002
Адрес: Украина
Если тебе все это надо для того чтобы сделать форму (похожую на заказы), то это можно сделать без программирования. На свойствах datasours'a формы есть свойства JoinSource и LinkType.
Старый 03.07.2003, 15:22   #5  
VIS is offline
VIS
Участник
 
37 / 10 (1) +
Регистрация: 13.05.2003
Черт побери Вообще-то, это логично, что queryrun выполняется по всем строкам всех входящих источников данных в Query!!!
В таком случае, надо формировать два query - для главной и подчиненной таблицы.

На формах, кстати, автоматически так и делается - переменные MainTable_Q и LineTable_Q.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как подставить вычисляемое значение в Range у query Poleax DAX: Программирование 16 17.06.2008 18:52
Установка условия ИЛИ (OR) в Query Zeratul DAX: Программирование 3 22.06.2006 14:28
Проблема с составлением Query axaLearner DAX: Программирование 10 01.12.2005 15:00
queryRun в рамках RunBaseBatch Smith DAX: Программирование 6 26.04.2005 11:03
Еще раз о Query Андре DAX: Программирование 7 24.01.2002 17:21

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

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

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