16.04.2003, 12:48 | #1 |
Участник
|
Связывание источников данных в запросах
Прошу знающих людей объяснить, как происходит связывание источников данных в отчетах, то есть в чем различие между связыванием одного источника к одному источнику и одного к нескольким на последующем уровне - не работает так как нужно . Вообще какие есть ограничения при построении дерева источников данных - Ахсапта компилирует и запускает практически любую комбинацию но выбирает данные не верно. Чем управляет "таинственное" свойство источников данных FetchMode (так и не понял ни из документации ни из предыдущих сообщений в форум). Заране большое спасибо!
|
|
17.04.2003, 11:26 | #2 |
Участник
|
А в ответ тишина...
Ладно, сам разберусь! |
|
17.04.2003, 11:45 | #3 |
----------------
|
Когда разберешься, расскажи всем о своих результатах, pls.
|
|
17.04.2003, 15:47 | #4 |
Юзовские
|
Влрос хороший. Сам часто сталкивался. Но времени основательно разбираться не было. Если query не работал, я смотрел какой ахарта генерирует запрос к базе данных (например, системной трассировкой). Она просто не join'ит таблицы если, ей что-то не нравится в запросе. В этом случае, я комбинировал значение свойства FetchMode на источниках и этим добивался, что оно в конце концов начинало работать как надо.
Что конкретно означает свойство FetchMode я так и не понял. Выяснил только, что почти всегда его нужно устанавливать в 1:1, 1:n необходим при OutherJoin и, возможно, в некоторых других случаях. Поделитесь опытом, у кого есть... |
|
31.05.2010, 11:19 | #5 |
Участник
|
Может за 7 лет кто-нибудь выяснил в подробностях, какой именно "физический" смысл имеет FetchMode? Где его нужно и не нужно ставить (вид джойна, узел или лист в иерархии датасорсов)?
|
|
31.05.2010, 12:11 | #6 |
Участник
|
Все зависит от того, какой вам нужно получить запрос в результате?
Если вам нужен запрос с join, как вы бы написали в SQL, то ВСЕГДА используйте FetchMode равный One2One. Если же вам нужно другое поведение, когда данные из связанных таблиц выбираются отдельно, и у вас есть код, который завязан на смену записи в конкретных таблицах, то используйте 1ToN Мой общий совет - всегда используйте 1-To-1 |
|
|
За это сообщение автора поблагодарили: alex55 (1). |
31.05.2010, 15:02 | #7 |
Мрачный тип
|
Если на узел вешаете несколько листов (например запрос по InventTrans c при-join'ными InventTable и InventDim) - листам надо указывать. В противном случае, система, не зная, какие отношения между таблицами существуют, при попытке добавить второй лист сбросит первый - что прекрасно видно в дебаггере при трассировке.
__________________
Мы летаем, кружимся, нагоняем ужасы ... |
|
31.05.2010, 15:18 | #8 |
Участник
|
Цитата:
Сообщение от TasmanianDevil
Если на узел вешаете несколько листов (например запрос по InventTrans c при-join'ными InventTable и InventDim) - листам надо указывать. В противном случае, система, не зная, какие отношения между таблицами существуют, при попытке добавить второй лист сбросит первый - что прекрасно видно в дебаггере при трассировке.
Система, ессно, знает, какие отношения существуют между таблицами, и может по ним построить правильный запрос. Просто значение по умолчанию для FetchMode = Один ко Многим. Поэтому вместо одного запроса выполняется несколько независимых: Один - InventTrans->InventTable Второй - InventTrans->InventDim а потом все 3 курсора заполняются соответствующими данными. Поэтому в дебаггере видно, как будно один источник "отпал". Если же посмотреть, какие запросы при этом выполнит SQL, то должны увидеть оба запроса. Я все собираюсь написать блог пост tutorial с примерами, но не хватает времени. |
|
|
За это сообщение автора поблагодарили: mazzy (2), Pustik (10), Logger (2), TasmanianDevil (2), konopello (2), S.Kuskov (3), vanokh (1), Cardagant (2). |
01.06.2010, 03:47 | #9 |
Участник
|
Ага, многое прояснилось.
Про смену записи в конкретных датасорсах я догадался Еще вопрос - допустим у нас есть запрос с несколькими Exists Join'ами. В этом случае для основного источника все они вернут по одной записи. На практике я столкнулся с тем, что основной запрос с учетом фильтра по джойнам выбирает одну запись, а next() в Query проходит аж 30 раз (Exists Join'ов присоединено 6-7 штук). Спасает One2One или контроль changed() на основном запросе. Но так и осталось загадкой почему все-таки 30 раз... |
|
17.04.2013, 18:34 | #10 |
Участник
|
2 kashperuk: Эта статья про FetchMode на axaptapedia находится(не нахожу там) или в каком-то другом блоге?
|
|
17.04.2013, 22:45 | #11 |
Участник
|
К сожалению, так и не написана, в виде разных маленьких заметок у меня на диске.
|
|