|
|
|
обход дерева в ADO
|
|||
|---|---|---|---|
|
#18+
По ряду причин вынужден использовать компонент ADO QUERY. А есть необходимость использовать обход дерева. Данные в таблице хранятся в виде: Имя | Уровень | Головной уровень 1 | 0 | null 2 | 1 | 1 3 | 0 | null 4 | 1 | 3 5 | 2 | 4 в другой таблице хранятся данные числовые связанные с нижними уровнями в дереве... вот как бы нужно собрать суммы из подчиненных в головные и вывести. в качестве входных данных на запрос любая строка ненулевого уровня... мне нужно вывести все подчиненные с суммами, и подчиненные подчиненных, т.е. берется верхушка, а мне нужны веточки =). База под Оракл.. суммы я могу собрать и хранимой процедурой Pl\sql. А вот как дерево построить =(. Простите за излишний треп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2008, 15:38 |
|
||
|
обход дерева в ADO
|
|||
|---|---|---|---|
|
#18+
в принципе есть такой вариант: select * from main_table a where a.1 = 1; затем обрабатываю датасет и строю условие вида (2) переписываю запрос из кода select * from main_table a where a.1 = 1 union select * from main_table a where a.1 in (2) и так далее, единственно глубина вложений до 99, долго строится будет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2008, 15:49 |
|
||
|
обход дерева в ADO
|
|||
|---|---|---|---|
|
#18+
обход вложенных структур делается влегкую через CTE, в мсдн даже пример есть как развернуть дерево из таблицы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.04.2008, 19:49 |
|
||
|
обход дерева в ADO
|
|||
|---|---|---|---|
|
#18+
Кто такой СТЕ, я так не понимаю. Мне надо в построитель отчетов выбрать данные... желательно чтобы все было в одном датасете, его обсчитывать так удобнее... ФРС построена на ADO.net. Вот и попросил совета на форуме... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2008, 11:10 |
|
||
|
обход дерева в ADO
|
|||
|---|---|---|---|
|
#18+
Ваш вопрос не понятен людям... Где вы хотите "обходить" ваше деревце? Это вопрос по PL/SQL ? Тогда вам на соотв форум.... Что такое имя? Что таое уровень? Что такое головной уровень? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2008, 11:33 |
|
||
|
обход дерева в ADO
|
|||
|---|---|---|---|
|
#18+
а, про базу не прочитал, CTE это для мс скуля. Для pl/sql есть другие методы, не помню название но точно есть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2008, 13:42 |
|
||
|
обход дерева в ADO
|
|||
|---|---|---|---|
|
#18+
buserВаш вопрос не понятен людям... Где вы хотите "обходить" ваше деревце? Это вопрос по PL/SQL ? Тогда вам на соотв форум.... Что такое имя? Что таое уровень? Что такое головной уровень? В запросе, я использую ADO.QUERY - компонент в построителе отчетов, чтобы с базы брать данные. Он автоматически формирует dataset - выбранные запросом строки. Хочу получить набор строк, где будут ВСЕ подчиненные строчки, независимо от их уровня. Имя в данном случае уникальный ключ. Т.е. это имя описываемого объекта, как пример из финансов - название бюджетной статьи. Уровень. Продолжая пример Бюджет разбивается на статьи, подстатьи и т.д. Есть бюджет например завода, он разбивается на бюджеты отделов, они в свою очередь разбиваются на конкретные нужды... иначе говоря получается дерево. Если на заводе древовидная структура отделов... то и бюджет будет древовидным. Отдельные статьи затрат могут разбиваться дополнительно. Уровень здесь - считайте что идентификатор этой самой мелкости. 0 - бюджет завода, 1 - бюджет отдела, 2 - бригады например, 3 - конкретная статья... глубина естественно неизвестна... до 99 включительно. Головной уровень - родитель этой ветки, например у меня есть статьи бюджета, плакатики - 3000р (4 ур), авторучки - 6000р (4 ур), все это включено в статью Рекламная Продукция (3ур) (сумма из подчиненных 9000р), которая включена в статью бюджет отдела маркетинга(2ур) (у которого может быть N подчиненных статей не только Рекламная Продукция), который входит в бюджет завода (0 ур) шаг в единицу не обязателен. главное чтобы уровень подчиненного был меньше головного... в в компоненте я могу использовать хранимые процедуры и функции Оракла, которые пишутся на Pl\sql сумму я могу посчитать для каждой строчки используя Pl. в итоге указав в качестве входного параметра статью бюджет отдела маркетинга я должен получить бюджет отдела маркетинга (сумма) (2ур) рекламная продукция (9000р) (3ур) плакатики (3000р) (4ур) авторучки (6000р) (5ур) (статья) (статья) ... (статья) компонент ADO.QUERY - из FR3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2008, 13:50 |
|
||
|
обход дерева в ADO
|
|||
|---|---|---|---|
|
#18+
здесь пример для MS SQL, но логика похожая должна сработать, конкретно в статье рекурсия, без применения CTE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2008, 10:57 |
|
||
|
обход дерева в ADO
|
|||
|---|---|---|---|
|
#18+
Спасибо. Вопрос решен. =) заработало ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2008, 15:27 |
|
||
|
обход дерева в ADO
|
|||
|---|---|---|---|
|
#18+
Snake_lowСпасибо. Вопрос решен. =) заработало Вообще-то в оракле есть синтаксис select'а, который возвращает выборку согласно заданному ветвлению. См. в сторону select.. connect by.. prior. Например, вот: http://www.ss64.com/ora/connectby.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2008, 15:42 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=35244780&tid=1352180]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 246ms |
| total: | 386ms |

| 0 / 0 |
