13.10.2010, 14:09 | #1 |
Участник
|
Связь Outer Join и фильтры по полям привязанной таблицы
Здравствуйте!
Имеется форма с гридом, в гриде отображаются поля двух таблиц, связанных через outer join. Столкнулся с тем, что не работают фильтры по полям источника данных, привязанному посредством outer join к родительскому датасоурсу через свойства источника. Каким образом можно организовать подобную фильтрацию?
__________________
С уважением, Александр. |
|
13.10.2010, 14:47 | #2 |
Участник
|
попробуйте сделать view
|
|
13.10.2010, 14:49 | #3 |
Участник
|
Дело в том, что необходимо редактировать данные в главной таблице.
__________________
С уважением, Александр. |
|
13.10.2010, 14:54 | #4 |
Участник
|
Тогда можно сделать view в которой будет аутер джоин и проиннерджоинить этот вью с главной таблицей. Проблема в том, что сейчас нет способа разделить те ренджи, которые являются частью where clause от тех которые внутри on clause - и они все идут в on clause.
|
|
|
За это сообщение автора поблагодарили: samolalex (1). |
13.10.2010, 15:25 | #5 |
Участник
|
видел, что в некоторых темах упомянуто свойство QueryFetchMode::One2One, каким образом оно относится к связи outerjoin с точки зрения поставленной задачи?
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 13.10.2010 в 15:28. |
|
13.10.2010, 16:04 | #6 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: samolalex (1). |
14.10.2010, 09:02 | #7 |
Участник
|
Спасибо за полезную ссылку. Но все же не могу понять является ли создание программных связей с применением fetchMode::One2One решением задачи, а именно возможностью создания фильтрации по полям привязанного путем outer join датасоурса. Пробовал реализовать связь программно в методе init родительского датасоурса, результат не получил (код приведен ниже). Может что-то делаю неверно?
X++: qbds = this.query().dataSourceTable(tableNum(Table1)); qbds.addDataSource(tableNum(Table2)); qbds.addLink(fieldNum(Table1, Field1), fieldNum(Table2, Field1)); qbds.joinMode(joinMode::OuterJoin); qbds.fetchMode(QueryFetchMode::One2One);
__________________
С уважением, Александр. |
|
14.10.2010, 09:28 | #8 |
Участник
|
не поможет - посмотрите в сгенеренный SQL - все условия помещаются после ON - то есть фильтр идет не поверх джоина, а просто отберутся все записи основной таблицы, но в тех из них, где условия по подчиенной не соблюдаются, эта подчиненная просто не покажется.
Делайте view |
|
14.10.2010, 10:03 | #9 |
Участник
|
|
|
14.10.2010, 10:09 | #10 |
Участник
|
сделать можно, но это выходит за пределы стандартных возможностей Ax, поэтому от этого варианта я отказался.
Вот здесь поднимался этот вопрос, но до конца раскрыт не был.
__________________
С уважением, Александр. Последний раз редактировалось samolalex; 14.10.2010 в 10:13. |
|
|
За это сообщение автора поблагодарили: tricky (1). |
14.10.2010, 10:14 | #11 |
Участник
|
|
|
14.10.2010, 10:31 | #12 |
Moderator
|
Помнится, как-то применял следующий подход: на executeQuery() перед супером проверял наличие рейнджей на приджойненном по outer датасорсу, и если установлен фильтр - менял джойн на inner (и обратно на outer при отутствии).
__________________
Андрей. |
|
|
За это сообщение автора поблагодарили: tricky (2). |
14.10.2010, 10:46 | #13 |
Участник
|
Да, предполагается "перекраивание" запроса на уровне СУБД)
__________________
С уважением, Александр. |
|
14.10.2010, 10:57 | #14 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: tricky (2), leva (1), IvanOFF (2). |
14.10.2010, 10:58 | #15 |
Участник
|
Если у вас "простенький" случай: т.е. на форме нужно отобразить записи "дочерней" таблицы, которая является неким справочником, ссылка на который из "родительской" таблицы может отсутствовать, то можно попробовать создать в "справочнике" пустую запись с пустым ключевым полем. В таком случае таблицы можно будет соединять по InnerJoin со всеми вытекающими из этого вкусностями. Конечно не совсем красиво: потребуется все время следить, чтобы эта пустая запись присутствовала - но это минимум программирования.
|
|
|
За это сообщение автора поблагодарили: samolalex (1). |
Теги |
outer join, query, view, фильтр |
|
Похожие темы | ||||
Тема | Ответов | |||
Несколько outer join в запросе | 2 | |||
Данные в Grid из таблиц, связанных по Outer Join | 2 | |||
2 и более OUTER JOIN к одному паренту | 21 | |||
Outer Join | 3 | |||
outer join для трех таблиц | 4 |
|