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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.12.2002, 12:51   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Вопрос знатокам QBE и Query в AXAPTA
Снова я со своими Query'ями.

В общем, проблема такая. Есть у меня три таблицы: A, B и C. Таблицы B и C содержат данные для фильтрации A.

Например, в таблице A есть два поля: fB и fC. Нужно создать запрос, который бы выбирал из A записи, у которых значение fB содержится в B, а значение fC - в С. Как бы мне это реализовать с помощью Query? Что куда внедрять?

Я делаю
A
I---B (B.fA = A.fB)
I---C (C.fA = A.fC)
но тогда выполняется OR, то есть выбираются все записи A, удовлетворяющие хотя бы одному фильтру. А мне надо именно AND.

Что-то мне кажется, что это не очень сложно, а у меня просто уже предновогодний ступор наступил. Помогите, а?
__________________
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.2002, 14:29   #2  
ta_and is offline
ta_and
Участник
 
226 / 122 (5) +++++
Регистрация: 26.02.2002
Адрес: СПб
Может быть я тоже чего-то не знаю...

Мне не удалось сделать такую выборку. (долго пытался)

Пришел к выводу:
Query в Аксапте можно построить только ЛИНЕЙНЫЕ.
т.е. (из предыдущего примера)
B
I---A (B.fA = A.fB)
......I---C (C.fA = A.fC)

(точки - для выравнивания)
Старый 26.12.2002, 14:41   #3  
Pavel is offline
Pavel
SAP
SAP
 
2,760 / 239 (13) ++++++
Регистрация: 14.12.2001
Адрес: Moscow
Привет,

Цитата:
Изначально опубликовано ta_and
Query в Аксапте можно построить только ЛИНЕЙНЫЕ.
Если действовать через дизайнер запросов, то, действительно, зависимость между таблица «линейная» (т.е. нельзя одну таблицу связать сразу с двумя).

Цитата:
Изначально опубликовано Maxim Gorbunov
Что-то мне кажется, что это не очень сложно, а у меня просто уже предновогодний ступор наступил.
По самой задачке встречный вопрос: «А почему просто нельзя составить запрос по таблице A, выбрав в качестве критериев поля B и C?»
При запуске запроса по таблице А пользователь устанавливает критерии по полям В и С через списки из соответствующих таблиц (т.е. именно, то что необходимо).

С уважением.
Старый 26.12.2002, 17:02   #4  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Re: Вопрос знатокам QBE и Query в AXAPTA
Цитата:
Изначально опубликовано Maxim Gorbunov
Снова я со своими Query'ями.

Я делаю
A
I---B (B.fA = A.fB)
I---C (C.fA = A.fC)
но тогда выполняется OR, то есть выбираются все записи A, удовлетворяющие хотя бы одному фильтру. А мне надо именно AND.

Что-то мне кажется, что это не очень сложно, а у меня просто уже предновогодний ступор наступил. Помогите, а?
У меня получилось сделать требуемое из кода и, создав вручную запрос в AOT. Не знаю, это ли требовалось, так как абревиатура QBE - осталась для меня загадкой(кстати, а что это такое? ) )
И в том и в другом случае, надо у внедренных источников данных установить fetchMode == "1:1", ну и, естетественно, указать связи между источниками данных.

С уважением, программист группы компаний "Счастливый Кроха".
Старый 27.12.2002, 11:43   #5  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано Pavel
По самой задачке встречный вопрос: «А почему просто нельзя составить запрос по таблице A, выбрав в качестве критериев поля B и C?»
При запуске запроса по таблице А пользователь устанавливает критерии по полям В и С через списки из соответствующих таблиц (т.е. именно, то что необходимо).
Вообще-то должно все работать без участия пользователя. В таблице B есть куча записей со ссылками на A. На B устанавливается Range. И из A выбираются соответствующие записи. Та же самая история с С (тоже range и тоже соответствующие записи из A). Проблема в том, что если я строю запрос так, как я написал, из A выбираются все записи, которые соответствуют либо B, либо C. А мне нужно, что соответствовали и B, и C.

Цитата:
Изначально опубликовано rumpleteazer
У меня получилось сделать требуемое из кода и, создав вручную запрос в AOT.
Поподробнее, пожалуйста. Как вы это делали? Из вашего сообщения совершенно не понятно, "где собака порылась". fetchMode 1:1 решил все проблемы? Сейчас попробую, конечно, но... хм, очень сомневаюсь.

Цитата:
Изначально опубликовано rumpleteazer
абревиатура QBE - осталась для меня загадкой(кстати, а что это такое? )
QBE - Query By Example. Иногда его называют языком запросов к БД. Я бы все-таки сказал, что это еще один способ осуществления запросов к БД (наряду с SQL, например). SQL в AXAPTA присутствует непосредственно в синтаксисе X++. Query в AXAPTA представляют собой запросы на QBE.
__________________
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.2002, 13:00   #6  
rumpleteazer is offline
rumpleteazer
Участник
 
127 / 28 (1) +++
Регистрация: 02.09.2002
Цитата:
Изначально опубликовано Maxim Gorbunov


Поподробнее, пожалуйста. Как вы это делали? Из вашего сообщения совершенно не понятно, "где собака порылась". fetchMode 1:1 решил все проблемы? Сейчас попробую, конечно, но... хм, очень сомневаюсь.

Код:
X++:
void test()
{
    Test1 t1;
    Test2 t2;
    Test3 t3;
    QueryRun qr;
    Query  q = new Query();
    QueryBuildDataSource qbd;
    QueryBuildDataSource qbd1;


   qbd = q.addDataSource(tablenum(Test1));
   qbd1 = qbd.addDataSource(tablenum(Test2));
   qbd1.addLink(fieldnum(Test1,ID),fieldnum(Test2,ID));
   qbd1.joinMode(JoinMode::EXISTSJOIN);
   qbd1.fetchMode(0);

   qbd1 = qbd.addDataSource(tablenum(Test3));
   qbd1.addLink(fieldnum(Test1,ID),fieldnum(Test3,ID));
   qbd1.joinMode(JoinMode::EXISTSJOIN);
   qbd1.fetchMode(0);

   qr =new QueryRun(q);
    while(qr.next())
    {
        t1 = qr.getNo(1);
        t2 = qr.getNo(2);
        t3 = qr.getNo(3);
        print t1.ID," , ",t1.B," | ", t2.ID," , ",t2.B," | ", t3.ID," , ",t3.B;
    }

}
Тест пример:

Стурутура таблиц и данные
Test1(ID, B)
1 a
2 b
3 c
4 d
Test2(ID,B)
1 c
1 d
2 e
3 g
5 f
Test3(ID, B)
2 a
2 b
3 b

Результат:
2 , b | 0 , | 0 ,
3 , c | 0 , | 0 ,

Имхо, то что нужно
С уважением, программист группы компаний "Счастливый Кроха".
Старый 27.12.2002, 13:19   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
По моему тоже. Большое спасибо.
Осталось теперь только разобраться, что же это за спасительный fetchMode (попробовал его менять - действительно работает не так).
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Теги
fetchmode, one2one

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
C# and AX Development: Using the COM Business Connector in C#, the easy way (AX/Axapta) Blog bot DAX Blogs 0 15.12.2007 20:35
Dynamics AX Geek: Using query() Blog bot DAX Blogs 0 28.10.2006 16:40
Вопрос по Query tischenko DAX: Программирование 6 15.04.2005 13:09
вопрос по серверу под Axapta VladN DAX: Администрирование 1 23.09.2004 15:42
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

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

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

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