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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.05.2011, 11:19   #1  
timaluhs is offline
timaluhs
newborn in DAX
Аватар для timaluhs
 
102 / 10 (1) +
Регистрация: 16.12.2010
Адрес: Израиль
if exists (select... where ...)
Можно ли сделать методе run что-то подобное

if exists (select... where ...)
{...
}
else
{...
}
если есть данные - одни действия если вернулся null то другие.
как узнать что это null или дата.
Спасибо
Старый 17.05.2011, 11:31   #2  
IvanOFF is offline
IvanOFF
MCTS
MCBMSS
 
65 / 87 (3) ++++
Регистрация: 22.09.2005
Адрес: Москва
Можно так, например:
X++:
static void Job(Args _args)
{
    ;
    if ((select firstonly InventTable
            where InventTable.ItemId == 'itemId').RecId)
    {
        info('yes');
    }
    else
    {
        info('no')
    }
}
Старый 17.05.2011, 11:32   #3  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
Нужно что так:

select InventTable where .... ;
if ( InventTable )
{

}
else
{

}
__________________
В подводной охоте главное вдох ...
Старый 17.05.2011, 11:33   #4  
nix0root is offline
nix0root
Участник
 
67 / 16 (1) ++
Регистрация: 17.03.2009
Адрес: МО
опередил
__________________
В подводной охоте главное вдох ...
Старый 17.05.2011, 11:33   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Можно. Только синтаксис немного иной.
select в аксапте ничего не возвращает. Вместо этого он инициализирует соответствующий табличный курсор. Т.е. делать нужно так

X++:
select MyTable where ... ;
if (MyTable != NULL)
{
...
}
else
{
...
}


Способ, предложенный IvanOFF, основывается на сокращённой форме оператора select. Не все запросы можно привести к такому виду. Но когда это возможно, то получается вполне лаконично.

Последний раз редактировалось S.Kuskov; 17.05.2011 в 11:53.
За это сообщение автора поблагодарили: timaluhs (1).
Старый 17.05.2011, 12:32   #6  
b_nosoff is offline
b_nosoff
Читатель
Аватар для b_nosoff
MCP
MCBMSS
 
197 / 143 (5) +++++
Регистрация: 01.12.2004
Адрес: Msk
Записей в блоге: 13
типа так?
X++:
if ((select firstonly RecId from SalesTable where SalesTable.SalesId == "З00001").RecId)
{
}
else
{
}
UPD: Блин, не увидел, что уже наотвечали тут )))) Зачем по нескольку раз постите, уважаемый?
__________________
Axapta non erubescit

Последний раз редактировалось b_nosoff; 17.05.2011 в 12:36.
Старый 17.05.2011, 12:33   #7  
Greggy is offline
Greggy
Участник
 
90 / 14 (1) ++
Регистрация: 19.10.2004
Адрес: г. Томск
select firstonly table.recId where ...
if (table.RecId != 0)
{...
}
else
{...
}
Старый 17.05.2011, 14:22   #8  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
ээ, вообщето по Best Practices на таблице должно быть два метода это Find() и Exist(), которые как правило выполняют выборку по уникальному индексу.

и для Вашего случая код должен выглядеть так:

X++:
if (MyTable::Exist(codeId))
{
}
откройте любую стандартную таблицу и посмотрите как там сделано (хоть InventTable)
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: pitersky (2), timaluhs (1).
Старый 17.05.2011, 14:39   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
А счего вы взяли, что у автора топика условие where соответствует методу exist? Нет, если всё укладывается в банальный поиск по ключевому полю, то использования метода exist будет самым верным решением. Но вообще говоря, запрос может быть сколь угодно сложным, поэтому не стоит вводить автора в заблуждение
За это сообщение автора поблагодарили: driller (2).
Старый 17.05.2011, 15:35   #10  
lev is offline
lev
Ищущий знания...
Аватар для lev
Oracle
MCBMSS
Axapta Retail User
 
1,723 / 491 (20) +++++++
Регистрация: 18.01.2005
Адрес: Москва
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А счего вы взяли, что у автора топика условие where соответствует методу exist? Нет, если всё укладывается в банальный поиск по ключевому полю, то использования метода exist будет самым верным решением. Но вообще говоря, запрос может быть сколь угодно сложным, поэтому не стоит вводить автора в заблуждение
взял с того, что изначально в сообщение не говориться конкретно про какой то запрос.
судя по коду который был приведен, я додумался что скорее всего автору нужно именно это

если вдруг это какой то специфически накрученный запрос, то конечно будет писаться запрос, и выполняться проверка на то, что значение RecId не равно нулю
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с)
С Уважением,
Елизаров Артем
За это сообщение автора поблагодарили: driller (0).
Старый 18.05.2011, 15:06   #11  
pitersky is offline
pitersky
северный Будда
Аватар для pitersky
Ex AND Project
Соотечественники
 
1,510 / 435 (18) +++++++
Регистрация: 26.09.2007
Адрес: Солнечная система
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
А счего вы взяли, что у автора топика условие where соответствует методу exist? Нет, если всё укладывается в банальный поиск по ключевому полю, то использования метода exist будет самым верным решением. Но вообще говоря, запрос может быть сколь угодно сложным, поэтому не стоит вводить автора в заблуждение
Я извиняюсь, но с чего вы решили, что exist на таблице должен быть только один и только по ключевому полю? Если в нескольких местах проверяется наличие записи в таблице по сложному, но одинаковому селекту, то как раз и разумно написать existRecord на таблице и вызывать его в нужных местах с параметрами, а не плодить код, который потом ещё и искать чёрт-те где придётся, если вдруг селект изменится.

Т.е. предложенная автором тему конструкция рабочая, но малочитабельная и негибкая. Я бы так писать точно не стал
__________________
С уважением,
Вячеслав
За это сообщение автора поблагодарили: S.Kuskov (2), kpoxa (0).
Теги
if exists, run, select

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
select в X++ и список значений в условии where Prophetic DAX: Программирование 20 17.08.2010 18:43
QueryBuildRange в select.. where propeller DAX: Программирование 11 30.09.2008 13:35
Разница NotInTTS и Found Logger DAX: База знаний и проекты 6 18.09.2008 12:35
Вопрос про Demand Planner slava09 DAX: Функционал 4 25.09.2006 11:43
Почему не работает not exists в конструкции while select Владимир Максимов DAX: Программирование 2 03.02.2004 12:17
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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