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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.03.2004, 12:18   #1  
Bukovka is offline
Bukovka
Участник
 
8 / 10 (1) +
Регистрация: 19.01.2004
? Как построить Query?
Есть проблема с Query в lookup-е.
Есть таблицы:
Table1 с полями Field1ID, Field4ID
Table2 с полями Field2ID, Field3ID
Table3 с полями Field1ID, Field2ID
Table4 с полями Field2ID, Field3ID, Field4ID

Как через Query записать SQL запрос:

select Table1.* , Table2. Field3ID
from Table1, Table3, Table2
where Table3. Field1ID = Table1. Field1ID
and Table3. Field2ID = Table2. Field2ID
and trim(Table2. Field3ID) = '06' //какое-то значение
and not exists (select 1
from Table4
where Table4. Field4ID = Table1. Field4ID
and Table4. Field2ID = Table3. Field2ID
and Table4. Field3ID = trim(Table2. Field3ID))
Старый 25.03.2004, 13:10   #2  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
:)
как не пиши запрос, а Lookup форма принимает только 1 источник данных. И подумай о нагрузке на сервер при выполнении такого запроса!
Старый 25.03.2004, 13:23   #3  
Bukovka is offline
Bukovka
Участник
 
8 / 10 (1) +
Регистрация: 19.01.2004
я пишу так:
public void lookup(FormControl _formControl, str _filterStr)
{
SysTableLookup sysTableLookup =
SysTableLookup::newParameters(tableNum(Table1), _formControl);
Query q = new Query();
QueryBuildDataSource qbds ;
QueryBuildRange qbr;
;
qbds = q.addDataSource(tableNum(Table1));
qbds = qbds.addDataSource(tablenum(Table2));
qbds.addLink(fieldNum(Table1, Field1ID),fieldNum(Table3, Field1ID));
qbds.joinMode(JoinMode::InnerJoin);

qbds = qbds.addDataSource(tablenum(Table2));
qbds.addLink(fieldNum(Table3, Field2ID),fieldNum(Table2, Field2ID));
qbds.joinMode(JoinMode::InnerJoin);

qbr = qbds.addRange(fieldNum(Table2, Field2ID));
qbr.value(‘06’); // условие


qbds = qbds.addDataSource(tablenum(Table4));
qbds.addLink(fieldNum(Table4, Field4ID), fieldNum(Table1, Field4ID));
qbds.addLink(fieldNum(Table4, Field2ID),fieldNum(Table3, Field2ID));
qbds.addLink(fieldNum(Table1, Field3ID), fieldNum(Table4, Field3ID));
qbds.joinMode(JoinMode::NoExistsJoin);

sysTableLookup.parmQuery(q);
sysTableLookup.performFormLookup();
}

но выдается сообщение "Недопустимая комбинация поля / поля ссылки". Подозреваю, что аксапте не нравиться блок с NoExistsJoin. Как по-другому сделать не знаю.
Старый 25.03.2004, 13:37   #4  
Berty Wooster is offline
Berty Wooster
Участник
Аватар для Berty Wooster
 
82 / 16 (1) ++
Регистрация: 15.12.2002
Цитата:
Изначально опубликовано Bukovka
...

qbds.addLink(fieldNum(Table4, Field4ID), fieldNum(Table1, Field4ID));

qbds.addLink(fieldNum(Table1, Field3ID), fieldNum(Table4, Field3ID));
....
В последнем addLink поменять местами поля. Первым должно идти поле таблице из qbds.
Старый 25.03.2004, 13:45   #5  
Bukovka is offline
Bukovka
Участник
 
8 / 10 (1) +
Регистрация: 19.01.2004
Цитата:
Изначально опубликовано Berty Wooster


В последнем addLink поменять местами поля. Первым должно идти поле таблице из qbds.
Ничего не изменилось, сообщение тоже самое выдается.
Старый 25.03.2004, 14:05   #6  
Berty Wooster is offline
Berty Wooster
Участник
Аватар для Berty Wooster
 
82 / 16 (1) ++
Регистрация: 15.12.2002
Возможно в Table4 он не видит Table1.
И в приведенном коде не видно, где присоединяется Table3.

qbds.addLink(fieldNum(Table3, Field2ID),fieldNum(Table2, Field2ID));

Тут тоже надо поменять местами fieldnum'ы.
Старый 25.03.2004, 14:44   #7  
Bukovka is offline
Bukovka
Участник
 
8 / 10 (1) +
Регистрация: 19.01.2004
Исправленный вариант, но все равно не рабочий ....

Table1: Field1, Field3
Table2: Field1, Field2
Table3: Field2, Field4
Table4:Field2, Field3, Field4

SysTableLookup sysTableLookup = SysTableLookup::newParameters(tableNum(Table1), _formControl);
Query q = new Query();
QueryBuildDataSource beds
QueryBuildRange qbr;
;
qbds = q.addDataSource(tableNum(Table1));

qbds = qbds.addDataSource(tablenum(Table2));
qbds.addLink(fieldNum(Table2,Field1),fieldNum(Table1, Field1));
qbds.joinMode(JoinMode::InnerJoin);

qbds = qbds.addDataSource(tablenum(Table3));
qbds.addLink(fieldNum(Table3,Field2),fieldNum(Table2, Field2));
qbds.joinMode(JoinMode::InnerJoin);

qbds = qbds.addDataSource(tablenum(Table4));
qbds.addLink(fieldNum(Table4,Field2), fieldNum(Table3, Field2));
qbds.addLink(fieldNum(Table4,Field4),fieldNum(Table3, Field4));
qbds.addLink(fieldNum(Table4, Field3), fieldNum(Table1, Field3));
qbds.joinMode(JoinMode::NoExistsJoin);

qbr = qbds.addRange(fieldNum(Field3, Field4));
qbr.value(‘06’);

sysTableLookup.parmQuery(q);
sysTableLookup.performFormLookup();
Старый 26.03.2004, 12:49   #8  
Bukovka is offline
Bukovka
Участник
 
8 / 10 (1) +
Регистрация: 19.01.2004
Можно ли реализовать такой запрос в Query в АОТ? Можно ли задать два DataSource на одном уровне, например так?

1уровень:Table1
2уровень: Table2 по InnerJoin с Relation Table1.Field1 == Table2.Field1
3уровень: Tabel3 по InnerJoin с Relation Table2.Field2 == Table3.Field2
2уровень: Table4 по NotExistJoin с Relation Table1.Field3 == Table4.Field3
3уровень: Table3 по InnerJoin с Relation Table4.Field1 == Table2.Field1
с Relation Table4.Field2 == Table2.Field2

Как посмотреть полученный результат (можно через Job)?
Старый 26.03.2004, 16:20   #9  
blokva is offline
blokva
Пенсионер
Аватар для blokva
SAP
NavAx Club
 
743 / 167 (7) ++++++
Регистрация: 04.06.2003
Адрес: Беларусь
...
qbr = qbds.addRange(fieldNum(Field3, Field4));
...
А что сие значит?
Т.е. почему 2 Fild?
__________________
Законы природы еще никто не отменял!
А еще у меня растет 2 внучки!!! Кому интересно подробности тут:
http://www.baby-shine.com/
Старый 26.03.2004, 16:35   #10  
Bukovka is offline
Bukovka
Участник
 
8 / 10 (1) +
Регистрация: 19.01.2004
Это опечатка. Надо
qbr = qbds.addRange(fieldNum(Table3, Field4));
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX: QueryRun and Query Objects - Binding operation failed to allocate buffer space Blog bot DAX Blogs 0 03.04.2009 08:05
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
Проблема с составлением Query axaLearner DAX: Программирование 10 01.12.2005 15:00
Как правильно построить Query Bukovka DAX: Программирование 0 25.03.2004 11:55
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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