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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.09.2005, 12:53   #21  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
на Х++
PHP код:
static void VVL_Job24(Args _args)
{
    
TmpTable    tmpTable;
    
TmpTable2   tmpTable2;
    
TmpTable3   tmpTable3;
    ;
    while 
select tmpTable
        exists join tmpTable2
        exists join tmpTable3 where 
(tmpTable3.ItemId == tmpTable.ItemId || tmpTable2.ItemId == tmpTable.ItemId)
    {
        
info(tmpTable.ItemId);
    }

к БД (у меня MS SQL) идет что-то вроде
SELECT A.ITEMID,A.BOMLEVEL,A.RECID
FROM TMPTABLE A WHERE (A.DATAAREAID=?)
AND EXISTS (SELECT 'x' FROM TMPTABLE2 B
WHERE (B.DATAAREAID=?) AND EXISTS (SELECT 'x' FROM TMPTABLE3 C
WHERE ((C.DATAAREAID=?) AND ((C.ITEMID=A.ITEMID) OR (B.ITEMID=A.ITEMID))))) OPTION(FAST 100)

ну и с помощью Query:
PHP код:
static void VVL_Job25(Args _args)
{
    
TmpTable    tmpTable;
    
Query       query;
    
QueryBuildDataSource    qbds;
    
QueryBuildDataSource    qbds2;
    
QueryBuildDataSource    qbds3;
    
QueryRun    queryRun;
    ;
    
query = new Query();
    
qbds query.addDataSource(tablenum(TmpTable));
    
qbds.clearSortIndex();
    
qbds2 qbds.addDataSource(tablenum(TmpTable2));
    
qbds2.relations(false);
    
qbds2.joinMode(joinMode::ExistsJoin);
    
qbds3 qbds2.addDataSource(tablenum(TmpTable3));
    
qbds3.relations(false);
    
qbds3.joinMode(joinMode::ExistsJoin);
    
qbds3.addRange(fieldnum(TmpTable3ItemId)).value(strfmt(
        
"((%3.%6 == %1.%4) || (%2.%5 == %1.%4))",
        
qbds.name(),
        
qbds2.name(),
        
qbds3.name(),
        
fieldstr(TmpTableItemId),
        
fieldstr(TmpTable2ItemId),
        
fieldstr(TmpTable3ItemId)
        ));
    
queryRun = new QueryRun(query);
    while (
queryRun.next())
    {
        
tmpTable queryRun.getNo(1);
        
info(tmpTable.ItemId);
    }

к БД:
SELECT A.ITEMID,A.BOMLEVEL,A.RECID
FROM TMPTABLE A WHERE (A.DATAAREAID=?)
AND EXISTS (SELECT 'x' FROM TMPTABLE2 B
WHERE (B.DATAAREAID=?) AND EXISTS (SELECT 'x' FROM TMPTABLE3 C
WHERE ((C.DATAAREAID=?) AND ((C.ITEMID=A.ITEMID) OR (B.ITEMID=A.ITEMID))))) ORDER BY A.DATAAREAID,A.RECID OPTION(FAST 100)

Вроде работает... но есть вопрос (хотя и не по теме):
Кто-нибудь знает, как избавиться от "ORDER BY" при использовании Query?
Старый 09.09.2005, 13:23   #22  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Семен-семеныч, сам же написал вариант с view, а расширять на Query не стал.

По поводу order by - судя по всему у вас нет индексов на таблице, по-этому Axapta автоматом создает индекс с RecId, его-то она и подставляет в Query.
__________________
Axapta v.3.0 sp5 kr2
Старый 09.09.2005, 13:36   #23  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Изначально опубликовано AndyD
Семен-семеныч, сам же написал вариант с view, а расширять на Query не стал.
На сколько я понял в пердложенном view используется декартово произведение. (или уже нет? ) А без вьюхи - его не будет.
Цитата:
Изначально опубликовано AndyD
По поводу order by - судя по всему у вас нет индексов на таблице, по-этому Axapta автоматом создает индекс с RecId, его-то она и подставляет в Query.
Это понятно, что автоматом создает... Если бы был создан уникальный индекс, она бы его поля подставила в сортировку. А вот как вообще убрать сортировку в Query?

И поправте меня, если я в чем-то не прав...
Старый 09.09.2005, 13:50   #24  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Да правильно, конечно. Я имел в виду сам принцип связывания таблиц
__________________
Axapta v.3.0 sp5 kr2
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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 lev DAX: Программирование 2 19.06.2006 10:29
Проблема с составлением Query axaLearner DAX: Программирование 10 01.12.2005 15:00
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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