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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.11.2009, 11:36   #1  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Никак.
Используйте while select.
Он быстрее чем QueryRun.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 19.11.2009, 11:40   #2  
Vitali_i is offline
Vitali_i
Участник
 
13 / 10 (1) +
Регистрация: 15.07.2004
Адрес: Москва
Спасибо, за оперативный ответ.

Жаль, что нет такого функционала.
Старый 19.11.2009, 11:58   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
НЗ.
Можно через ODBC, ADO, но представлете что будет если в аксе начать заменять while select на доступ к базе миную аксу. Бардак будет.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 19.11.2009, 14:24   #4  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от miklenew Посмотреть сообщение
Используйте while select.
Он быстрее чем QueryRun.
А можно поподробнее?
Старый 20.11.2009, 07:53   #5  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от _scorp_ Посмотреть сообщение
А можно поподробнее?
Можно
X++:
    xRefNames xRefNames;
    int       start;
    int       end;
;
    start = timenow();
    while select xRefNames
    {

    }
    end = timenow();
    info("while " + time2str(end-start,1,1));
и
X++:
    xRefNames xRefNames;
    int       start;
    int       end;
    QueryRun  queryRun;
    query     query;
;
    start = timenow();
    query = new Query();
    query.addDataSource(tablenum(xRefNames));

    queryRun = new QueryRun(query);

    while (queryRun.next())
    {
        xRefNames = queryRun.get(TableNum(xRefNames));
    }
    end = timenow();
    info("queryRun " + time2str(end-start,1,1));
У меня получилось 28 и 46 секунд соответственно.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
За это сообщение автора поблагодарили: _scorp_ (3).
Старый 20.11.2009, 09:36   #6  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
Цитата:
Сообщение от miklenew Посмотреть сообщение
У меня получилось 28 и 46 секунд соответственно.
Тестировал в AX 2009. Запускал job 2 раза. У меня получился примерно тот же порядок - while select быстрее queryRun на 50%...
X++:
static void JobQR(Args _args)
{
    LedgerTrans ledgerTrans;
    AccountNum  accountNum;
    int         start;
    int         end;
    
    void queryWhileSelect()
    {
        while select ledgerTrans
        {
            accountNum = ledgerTrans.AccountNum;
        }
    }
    
    void queryQueryRun()
    {
        Query       q;
        QueryRun    qr;
        LedgerTrans ledgerTransLocal;
        ;
        q = new Query();
        q.addDataSource(tablenum(LedgerTrans));
        qr = new QueryRun(q);
        while (qr.next())
        {
            ledgerTransLocal = qr.get(tablenum(LedgerTrans));
            accountNum = ledgerTransLocal.AccountNum;
        }
    }
    ;
    
    start = timenow();
    queryWhileSelect();
    end = timenow();
    info("while " + time2str(end-start,1,1));
    
    start = timenow();
    queryQueryRun();
    end = timenow();
    info("queryRun " + time2str(end-start,1,1));
}

Последний раз редактировалось _scorp_; 20.11.2009 в 09:38.
Старый 20.11.2009, 09:40   #7  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,444 / 1781 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
A сравнивали с
X++:
while select * from Table {}
или
X++:
while select Table {}
?

Ага увидел. Попробуйте со звёздочкой для, чистоты эксперимента.
Старый 20.11.2009, 10:36   #8  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
A сравнивали с
X++:
while select * from Table {}
или
X++:
while select Table {}
?

Ага увидел. Попробуйте со звёздочкой для, чистоты эксперимента.
У меня разницы нет. Хотя звёздочку в таких случаях никогда не пишу.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 20.11.2009, 10:55   #9  
tricky is offline
tricky
Участник
 
140 / 64 (3) ++++
Регистрация: 03.05.2005
Адрес: Гуково
Сдаётся мне, что пробовать нужно на одних и тех же таблицах. Попробовал на LedgerTrans - разница появилась существенная.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 04.05.2009 14: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 6apcyk DAX: Программирование 23 09.09.2005 13:50
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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