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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.09.2008, 12:09   #1  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
QueryBuildRange в select.. where
Имеется:
qbr = qbd.addRange(fieldNum(LedgerJournalTrans, TransDate));

как в select добавить условие из range:
while select AvLedgerJournalTrans
where AvLedgerJournalTrans.TransDate == qbr ??

возможно ли такое?
Старый 30.09.2008, 12:13   #2  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
X++:
while select AvLedgerJournalTrans
where AvLedgerJournalTrans.TransDate == qbr.value();
только этот range в начале заполниться должен гдето (или пользователем или в коде).
чтобы найти этот range в запросе нужно использовать метод findRange() у QueryBuildDataSource.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.09.2008, 12:16   #3  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
пробовал так, при компиляции " типы операнда не совместимы с оператором" .
да, заполняется пользователем.
у меня 2.5 Акс. может она что-то не понимает)
Старый 30.09.2008, 12:20   #4  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
вот написал джоб естественно типы сравниваемых полей должны совпадать!
X++:
static void test(Args _args)
{
    Query                   query = new Query();
    QueryBuildDataSource    qbds;
    QueryBuildRange         qbr;
    InventTable             inventTable;
    ;
    // создаем запрос
    qbds = query.addDataSource(tableNum(InventTable));
    qbds.addRange(fieldNum(InventTable, ItemId)).value('Номенклатура');

    // ищем в запросе range
    qbr = qbds.findRange(fieldNum(InventTable, ItemId));

    // используем в запросе
    select InventTable
        where inventTable.ItemId == qbr.value();
}
всё нармально отрабатывает без всяких ругательств
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.09.2008, 12:22   #5  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
чтобы быть уверенным в том что сходятся типы полей, можно сделать через переменную:
X++:
static void test(Args _args)
{
    Query                   query = new Query();
    QueryBuildDataSource    qbds;
    QueryBuildRange         qbr;
    InventTable             inventTable;
    ItemId                  itemId;
    ;
    // создаем запрос
    qbds = query.addDataSource(tableNum(InventTable));
    qbds.addRange(fieldNum(InventTable, ItemId)).value('Номенклатура');

    // ищем в запросе range
    qbr     = qbds.findRange(fieldNum(InventTable, ItemId));
    itemId  = qbr.value();// используем переменную

    // используем в запросе
    select InventTable
        where inventTable.ItemId == itemId;
}
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.09.2008, 12:42   #6  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
Цитата:
Сообщение от lev Посмотреть сообщение
X++:
while select AvLedgerJournalTrans
where AvLedgerJournalTrans.TransDate == qbr.value();
Хочется напомнить, что метод value класса QueryBuildRange имеет тип String, так что если такой "финт" и получится сделать, то исключительно с текстовыми полями. Поэтому автор вопроса сходу получил ошибку:

Цитата:
Сообщение от propeller Посмотреть сообщение
пробовал так, при компиляции " типы операнда не совместимы с оператором" .
В любом случае, ИМХО, подход кривой, propeller, Вы бы рассказали зачем Вам это понадобилось?
За это сообщение автора поблагодарили: lev (1).
Старый 30.09.2008, 12:42   #7  
Bishop is offline
Bishop
Участник
 
89 / 60 (3) ++++
Регистрация: 12.08.2004
Адрес: Москва
Все это будет работать только в случае точного указания искомого значения в range.
В общем случае (range.value("A, B, C..D, !E, F*, *G, *H*")) проблема с добавлением в select условий из Query неразрешима.
Старый 30.09.2008, 12:52   #8  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от Lemming Посмотреть сообщение
Хочется напомнить, что метод value класса QueryBuildRange имеет тип String, так что если такой "финт" и получится сделать, то исключительно с текстовыми полями.
Точно, никогда не обращал внимания Спасибо Lemming.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
Старый 30.09.2008, 13:12   #9  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от Lemming Посмотреть сообщение
В любом случае, ИМХО, подход кривой, propeller, Вы бы рассказали зачем Вам это понадобилось?
наверняка хотим что-то такое сделать:
X++:
qr = new QueryRun(..._ds.queryRun().query());
while(qr.next())
{
    // что-то делаем с каждой записью из отфильтрованного пользователем набора
}
Старый 30.09.2008, 13:27   #10  
propeller is offline
propeller
Участник
Аватар для propeller
 
359 / 29 (1) +++
Регистрация: 25.07.2007
в квери у меня один запрос по 2 таблицам с группорвками,
селектом нужно было сделать подобный запрос но еще +2 таблицы джоином, а потом уже группировки.
Хорошо если нельзя селектом, сделал второй query,
написал в нем:
qbr2.value(qbr1.value()) - не работает
написал qbr2 = qbr1 тоже не работает, ну я думаю так и не должно.
как правильно тогда передать из одного query1 рендж в другой query2?
Старый 30.09.2008, 13:28   #11  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Цитата:
как правильно тогда передать из одного query1 рендж в другой query2?
Попробуйте поджойнить ваши квери
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 30.09.2008, 13:35   #12  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Что то типа такого:
X++:
static void test(Args _args)
{
    Query                   query = new Query();
    QueryRun                queryRun;
    QueryBuildDataSource    qbds, qbds1, qbdsJoin;
    ;
    // первый запрос
    qbds = query.addDataSource(tableNum(InventTable));
    qbds.addRange(fieldNum(InventTable, ItemId)).value('Номенклатура');

    queryRun = new QueryRun(query);
    // джойним ещё таблицу
    qbds1 = queryRun.query().dataSourceTable(tableNum(InventTable));

    qbdsJoin = qbds1.addDataSource(tablenum(InventItemGroup));
    qbdsJoin.relations(true);
    qbdsJoin.addRange(fieldNum(InventItemGroup, ItemGroupId)).value(QueryValue('Группа'));
}
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем

Последний раз редактировалось lev; 30.09.2008 в 13:37. Причина: исправил relation на relationS
Теги
join, query

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
Ошибка при старте АОСа zZ_TOP_Zz DAX: Администрирование 4 11.09.2008 16:08
gatesasbait: Reverse keyword on Select Statements Blog bot DAX Blogs 0 08.02.2008 00:10
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
select * where ... Perc DAX: Программирование 10 06.07.2005 12:31

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

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

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