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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.11.2004, 07:38   #1  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
Запрос с параметрами
Здравствуйте, мне надо чтобы в грид выводилась только незаблокированная номенклатура, т.е.
select * from T join ITM where ItM.ItemId==T.ItemId && ITM.ModuleType==2 && ITm.Blocked==0 ;

Я перекрыла метод DataSource InventTable
public void executeQuery()
{
ds= this.query().addDataSource(TableNum(InventTable));
ds1= ds.addDataSource(TableNum(InventTableModule));
ds.joinMode(SQLBuilderJoinType::Innerjoin);
ds1.addLink(fieldNum(InventTable, ItemId), fieldNum(InventTableModule, Itemid));

range1 = ds1.addRange(fieldNum(InventTableModule, ModuleType));
range2 = ds1.addRange(fieldNum(InventTableModule, Blocked));

range1.value('2');
range2.value('0');

//throw info(ds.toString());

// InventTable T = this.cursor();
// select * from T join ITM where ItM.ItemId==T.ItemId && ITM.ModuleType==2 && Tm.Blocked==0 ;
super();
}

Но, сюдя по всему упустила что-то самое важное, так-как это не работает и выводится весь список.
Старый 23.11.2004, 07:52   #2  
Tays is offline
Tays
Участник
 
165 / 17 (1) ++
Регистрация: 18.07.2003
в какой форме используете данный запрос?
Старый 23.11.2004, 07:54   #3  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
В форме InventClassifierItemSelection
Старый 23.11.2004, 08:27   #4  
Tays is offline
Tays
Участник
 
165 / 17 (1) ++
Регистрация: 18.07.2003
похоже что форма самописная... тогда мне нужно описание датасорса... какие таблицы... какие связи..
Старый 23.11.2004, 08:38   #5  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
форма из ритейла, таблицы InventTable, InventTableModule, InventSum, InventDim, ..
Старый 23.11.2004, 08:50   #6  
Tays is offline
Tays
Участник
 
165 / 17 (1) ++
Регистрация: 18.07.2003
тогда еще проще...
Старый 23.11.2004, 08:54   #7  
Tays is offline
Tays
Участник
 
165 / 17 (1) ++
Регистрация: 18.07.2003
сделай прямо в датасорсе на InventTableModule ограничение по выводу записей
что-то в этом роде
this.query().addDataSource(TableNum(InventTable)).addRange(fieldNum(InventTableModule, Blocked)).value('0')


также можно поступить и с типом... (ModuleType)
Старый 23.11.2004, 09:53   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Re: Запрос с параметрами
Цитата:
Изначально опубликовано PT
Но, сюдя по всему упустила что-то самое важное, так-как это не работает и выводится весь список.
Попробуйте нарисовать query в АОТ.
затем не создавайте query программно, а прицепите его

PHP код:
public void executeQuery()
{
this.query(querystr(MySuperQuery));

range1 ds1.findRange(fieldNum(InventTableModuleModuleType));
range2 ds1.findRange(fieldNum(InventTableModuleBlocked));
range1.value('2');
range2.value('0');

super();

Так у вас будет гораздо меньше возможностей ошибиться.
И потом. Свой query надо создавать после super, насколько я помню (к сожалению, сейчас нет Аксапты под рукой, чтобы проверить)
Старый 23.11.2004, 12:00   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Да. Еще.
Вы ДОБАВЛЯЕТЕ датасорсы в executeQuery.
А запрос надо формировать в init, в executeQuery только редактировать в фильтры.
Старый 23.11.2004, 12:31   #10  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
Спасибо, я все разнесла. дописала строчку InventTAble_ds.query(q); Запрос выполняется, но выдает ошибку на строке super();
в ExecuteQuery - Ошибка времени выполнения. : Неправильный тип аргумента функции.
Старый 23.11.2004, 13:56   #11  
maxsmirnov is offline
maxsmirnov
экс-модератор
 
268 / 25 (1) +++
Регистрация: 08.07.2003
Адрес: Москва
ds.joinMode() берет на вход енум joinMode, а не SQLBuilderJoinType

и вообще, перенесите весь код в инит() датасорса, иначе у вас фигня полная получится когда пользователь будет запускать поиск в этой форме.
Старый 24.11.2004, 08:16   #12  
PT is offline
PT
Участник
Аватар для PT
 
22 / 10 (1) +
Регистрация: 11.08.2004
Адрес: Сибирь
Cool
Я последовала совету Tays, написала в ините DataSurce InventTableModule
super();
this.query().dataSourceName('inventTableModule').addRange(fieldnum(inventTableModule, ModuleType)).value('2');
this.query().dataSourceName('inventTableModule').addRange(fieldnum(inventTableModule, Blocked)).value('0');
а весь свой первый запрос удалила и все красиво заработало.
оказывается это действительно так просто
Спасибо
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
передача параметров в запрос while select tolstjak DAX: Программирование 13 15.02.2009 19:39
Как собрать запрос? moid DAX: Программирование 11 02.07.2007 12:07
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Долго отрабатывает запрос по таблице InventItemLocation AlexeyBP DAX: Администрирование 1 30.05.2007 17:33
Не работает запрос на нескольких компаниях Bega DAX: Программирование 3 16.09.2005 10:21

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

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

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