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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.12.2003, 17:20   #1  
Vasilenko Alexsandr is offline
Vasilenko Alexsandr
Участник
Дети Юза
 
90 / 16 (1) ++
Регистрация: 05.09.2002
Адрес: Одесса
:( Сложный запрос в DataSource формы
PHP код:
public void executeQuery()  
{      
CustTable             _custTable// Тип - таблица на которой основан DataSource
     
QueryBuildDataSource  qbds;
      ;     
      
_custTable this.cursor();
      
select _custTable 
             where  _custTable
.AccountNum like "1*" &&
                        
_custTable.AccountNum like "*2";    

Как тоже самое можно сделать используя Query. Дело в том, что если не отрабатывает super executeQuery(), то затем не фозможно делать поиск по полю или наложить стандартный фильтр средствами Аксапты.
Пытался строить следующую конструкцию:
PHP код:
public void executeQuery()  
{      
QueryBuildDataSource  qbds;
      ;
      
qbds this.query().dataSourceTable(tablenum(CustTable));
      
qbds.addRange(fieldnum(CustTableAccountNum)).value(strfmt("(%1.%2 like %3) && (%1.%2 like %4)",
                                                                  
qbds.name(),
                                                                  
fieldstr(CustTableAccountNum),
                                                                  
"\"1*\"",
                                                                  
"\"*2\""));
      
super();

qbds имеет значение:
new SELECT * FROM CustTable USING INDEX AccountIdx WHERE (((CustTable.AccountNum like "1*") && (CustTable.AccountNum like "*2")))
но в super() ошибка.
Кто может помогите!! Заранее благодарю!!
Старый 25.12.2003, 17:45   #2  
Berty Wooster is offline
Berty Wooster
Участник
Аватар для Berty Wooster
 
82 / 16 (1) ++
Регистрация: 15.12.2002
Может быть так?
PHP код:
public void executeQuery()  
{      
QueryBuildDataSource  qbds;
      ;
      
qbds this.query().dataSourceTable(tablenum(CustTable));
      
qbds.addRange(fieldnum(CustTableAccountNum)).value("1*2");
      
super();

Старый 25.12.2003, 17:51   #3  
Vasilenko Alexsandr is offline
Vasilenko Alexsandr
Участник
Дети Юза
 
90 / 16 (1) ++
Регистрация: 05.09.2002
Адрес: Одесса
Здесь стоит вопрос больше о том как использовать like и связку "и". Согласен пример немного не удачен, был создан на скорую руку.
Старый 25.12.2003, 18:00   #4  
dn is offline
dn
Участник
Самостоятельные клиенты AX
 
486 / 159 (6) ++++++
Регистрация: 26.03.2003
Адрес: Москва
like в расширенной фильтрации в range не работает.
как сделать like и связку "и" для разных полей, вы наверно знаете.
Старый 25.12.2003, 18:40   #5  
Vasilenko Alexsandr is offline
Vasilenko Alexsandr
Участник
Дети Юза
 
90 / 16 (1) ++
Регистрация: 05.09.2002
Адрес: Одесса
Жаль конечно, что не работает!!!
А то можно было бы таких вещей натворить (шутка).
Спасибо за помощь!!!
Старый 25.12.2003, 21:18   #6  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Почему же, это сделать как раз можно.

Добавьте еще один DataSource с Table = CustTable, JoinSource = CustTable (или как там у вас первый DataSource называется) и LinkType = ExistJoin. Далее, на первый DataSource наложите фильтр "1*", а на второй - "*2". Получится как раз то, что вы хотели.

Другое дело, что смысла в этом особо, ИМХО, нет. Если нужен LIKE и AND для разных полей, это эквивалентно добавлению range на эти поля. Если для одного поля, стоит задуматься об объединении их в один LIKE (что-то не могу придумать пример, где это не удастся сделать; может подскажете?).
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 26.12.2003, 11:58   #7  
Sanya is offline
Sanya
Участник
 
172 / 11 (1) +
Регистрация: 24.04.2003
Адрес: Киев
Цитата:
Другое дело, что смысла в этом особо, ИМХО, нет. Если нужен LIKE и AND для разных полей, это эквивалентно добавлению range на эти поля. Если для одного поля, стоит задуматься об объединении их в один LIKE (что-то не могу придумать пример, где это не удастся сделать; может подскажете?).
Возникла следующая задача:
Необходимо было отображать в LookUp записи которые удовлетворяют условиям:
1. Ключ должен удовлетворять условию, которое в поле задал пользователь - например: кл*, т.е. все запсиси начинающиеся на "кл".
2. Ключ не должен содержать символа ".".
Задачу пытались решить через:
PHP код:
qBds.addRange(fieldNum(Table_TrnstrType)).
     
value(strFmt('(strType like "%1") && !(strType Like "*.*")'_filterStr)); 
_filterStr - условие пользователя(кл*)
Но наткнулись на проблему
Цитата:
like в расширенной фильтрации в range не работает.
Как такую задачу решить через объединение условий в один Like - я не знаю.
А вы?
Старый 26.12.2003, 12:04   #8  
Sanya is offline
Sanya
Участник
 
172 / 11 (1) +
Регистрация: 24.04.2003
Адрес: Киев
задачу решили как
Цитата:
PHP код:
public void executeQuery()  
{      
CustTable             _custTable// Тип - таблица на которой основан DataSource
     
QueryBuildDataSource  qbds;
      ;     
      
_custTable this.cursor();
      
select _custTable 
             where  _custTable
.AccountNum like "1*" &&
                        
_custTable.AccountNum like "*2";    

Старый 27.12.2003, 09:36   #9  
Vasilenko Alexsandr is offline
Vasilenko Alexsandr
Участник
Дети Юза
 
90 / 16 (1) ++
Регистрация: 05.09.2002
Адрес: Одесса
Sanya, очень рад, что смог вам помочь!!)))
Старый 27.12.2003, 13:59   #10  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
2Sanya
Ваше решение совершенно не учитывает фильтрации и сортировки пользователя в форме. Я вам все-таки рекомендую воспользоваться стандартным Query, тем более, что я уже написал, как это делается. Соедините DataSource'ы по NotExistJoin. Отфильтруйте вложенный DataSource с rangeValue = "*.*", а основной с rangeValue = "кл*". Все Range установите в Init DataSource'ов и присвойте им статус Hidden или Locked.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 27.12.2003, 14:41   #11  
Vasilenko Alexsandr is offline
Vasilenko Alexsandr
Участник
Дети Юза
 
90 / 16 (1) ++
Регистрация: 05.09.2002
Адрес: Одесса
Цитата:
Ваше решение совершенно не учитывает фильтрации и сортировки пользователя в форме
Об этом было сказано еще в самом первом сообщении. Но если в сложившейся ситуации эти фунуции не играют важной роли, то я думаю что ними можно пожертвовать.

И вот еще встречный вопрос, а что если критерии будут наращиваться, то прийдется и DataSource'ы наращивать!!???
Старый 27.12.2003, 14:54   #12  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано Vasilenko Alexsandr
Об этом было сказано еще в самом первом сообщении. Но если в сложившейся ситуации эти фунуции не играют важной роли, то я думаю что ними можно пожертвовать.
Если можно сделать по-человечески, зачем напильником-то работать?
Цитата:
Изначально опубликовано Vasilenko Alexsandr
И вот еще встречный вопрос, а что если критерии будут наращиваться, то прийдется и DataSource'ы наращивать!!???
Условия LIKE можно объединять.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Почему на форме "Пользовательские настройки", когда я перехожу в нее из формы, отсутствует закладка "Запрос"? Hans DAX: Администрирование 0 05.07.2007 13:52
Подставлять "ранее использованный запрос" при открытии формы Plushy DAX: Функционал 4 16.01.2006 16:23
Ещё один "сложный" запрос Atani DAX: Программирование 5 30.12.2003 11:48
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38
Как наложить на запрос сложный фильтр? glibs DAX: Программирование 10 04.02.2003 12:50

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

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

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