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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.11.2007, 18:33   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Проверка предельного количества Range в Query

X++:
static void Job_QueryRangeLimit(Args _args)
{
    Query       query;
    QueryRun    queryRun;

    QueryBuildDataSource    qbds;
    QueryBuildRange         qbr;

    int         nextI;
    ;

    query = new Query();
    qbds = query.addDataSource(tablenum(InventTable));

    for (nextI = 1; nextI <= 476 ; nextI++)
    {
        qbr = qbds.addRange(fieldNum(InventTable, ItemId));
        qbr.value(queryValue('1'));
    }

    queryRun = new QueryRun(query);
    queryRun.next();
}
Axapta 2.5 SP3.

476 условий - берет, а 477 - ошибка "Некоторая часть инструкции SQL имеет слишком глубокую вложенность. Перепишите запрос или разбейте его на запросы меньшего размера."

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

Использование временной таблице в запросе по любому физически означает вложенный цикл. Просто, при включении таблицы в запрос этот цикл выполняется не явно.
Старый 03.11.2007, 11:31   #2  
kitty is offline
kitty
Участник
 
383 / 30 (2) +++
Регистрация: 24.05.2005
в одном месте обошлась циклами, а вот другом уже не получается, как сделать такое:
открывается форма и если при открытии отмечена галка, то должны открываться только те записи, ключи которых есть в заданном контейнере вида [[Значение1Поля1, Значение1Поля2], [Значение2Поля1, Значение2Поля2], ....]. те это пары составных ключей. Галку эту можно снимать и ставить после открытия формы, поэтому все это добро должно лежать в ExecuteQuery.
Если делать expression in query ranges и собирать значение типа ((Field11 and Field12) or (Field21 and Field22) ...), то как выше писала, можно , вроде, наткнуться на ограничение длины такого сборного range.
А если инициализировать временную таблицу, то возвращаемся к баранам join-а с ними. Как быть? Делать очищаемую постоянную таблицу, совать туда эти пары значений и потом с нею уже join-ить в ExQuery?
Теги
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, время: 08:15.