-
Дима (29.04.08 14:14) [0]Подскажите пожалуйста, как реализовать следующее:
есть таблица в БД (IB6.x), в ней такие поля
- id - идентификатор уникальный
- name - название подразделения
- link_to - идентификатор родителя
Т.е. простая иерархическая структура Подразделений.
Необходимо на Дельфи визуализировать в виде дерева, при чём полностью раскрытого, т.е. показать все листья дерева, при этом не использую рекурсии.
Как это сделать не меняя структуры таблицы? -
1. Взять TTreeView, проанализировать набор данных, добавить в дерево нужные узлы.
2. Написать (скачать из сети) какой-нибудь TDBTreeView. (Могу поделиться своим, но он у меня на специальные задачи заточен; комментариев и пояснений давать не буду, только голый исходник). -
> [0] Дима (29.04.08 14:14)
> при этом не использую рекурсии.
Почему такое ограничение? -
> Почему такое ограничение?
Рекурсия в DataSet - бессмысленная штука.
А вот пройти один раз, построить список и вычислить корневые элементы, а дальше с этим списком рекурсивно работать - вот это уже другое дело. -
Reindeer Moss Eater © (29.04.08 14:34) [4]Наверное потому, что элементов дерева может быть слишком много и грузить его сразу целиком нет смысла.
-
Reindeer Moss Eater © (29.04.08 14:37) [5]Есть готовая библиотека VirtualControls. В том числе для DB.
-
> Наверное потому, что элементов дерева может быть слишком
> много и грузить его сразу целиком нет смысла.
Он же разом всё дерево раскрыть хочет? -
Reindeer Moss Eater © (29.04.08 14:52) [7]Ну тады VirtualControls.
Все что ему надо - два ключа в датасете. -
Дима (29.04.08 14:56) [8]При запуске программы должно отобразиться полностью открытое дерево с показом всех листьев. Как просканировать всю базу и подобавлять в Дерево не использую рекурсии (т.к. элементов много и вложенность большая).
А затем уже по нажатии на определённый элемент - сканировать только данное поддерево. -
Reindeer Moss Eater © (29.04.08 15:05) [9]Чот ты по ходу темы меняешь исходные данные вопроса.
-
Дима (29.04.08 15:08) [10]Почему меняю?
Я просто пояснил, что надо показать полностью открытое дерево! -
Reindeer Moss Eater © (29.04.08 15:14) [11]Полностью открытое? Да неужели?
А затем уже по нажатии на определённый элемент - сканировать только данное поддерево. -
Reindeer Moss Eater © (29.04.08 15:15) [12]А в прочем по барабану.
TVirtualDBTree и все. -
Loginov Dmitry © (29.04.08 19:45) [13]> при этом не использую рекурсии.
рекурсия = рекурсивный SELECT - запрос? Какая же там вложенность, если даже такой запрос не канает? -
Дима (29.04.08 21:57) [14]запрос канает, но пользоваться рекурсией запрещено
-
Игорь Шевченко © (30.04.08 00:44) [15]
> но пользоваться рекурсией запрещено
религией ? -
> [15] Игорь Шевченко © (30.04.08 00:44)
да какая религия. я в МС наступал на ограничения вложенности вызовов пытаясь рекурсивно построить вожможные комбинации из 3-х бмажек. из 3-х еще строило а из 4-х уже все. столько раз сама себя хранимка вызвать не могеть -
Reindeer Moss Eater © (30.04.08 01:49) [17]А затем уже по нажатии на определённый элемент - сканировать только данное поддерево.
У него вложенность - два уровня. -
> да какая религия. я в МС наступал на ограничения вложенности
> вызовов пытаясь рекурсивно построить вожможные комбинации
> из 3-х бмажек. из 3-х еще строило а из 4-х уже все. столько
> раз сама себя хранимка вызвать не могеть
>
Павель, не гони, ограничение на 32 вызова в глубину. -
> [17] Reindeer Moss Eater ©
обратимся к истокам- id - идентификатор уникальный
- name - название подразделения
- link_to - идентификатор родителя
Т.е. простая иерархическая структура Подразделений.
так вот ну не 2 так уж точно а до бесконечности. (ну почти)
0. Холдинг (рога и копыта)
1. предприятие в холдинге (ЧОП Шапокляк)
2. отраслевой филиал (Сыскное Агентство Лриска)
3. региональный филиал (Лариска в Московской Области)
4. районный филиал (Лариска в Красногорском районе)
5. местное отделение (Лариска в Опалихе)
5. управление (Вынюхивание)
6. отдел (запах денег)
7. группа (по нефтебаксам)
Хотя да 32 уровня набрать сложно, но можно. Заказчики они такие. Им только дай расширяемую структуру - моментально за диапазоны разумные вылетят и будут орать что ты им каку подложил за их кровные.
> [18] Ega23 © (30.04.08 07:54)
помоему поболе но на него я и наступил:)
толька задача веселее чем дерево подразделений собрать была... грубо есть список акций А. выбираем любые (самые дорогие) N. построить список всех возможных комбинаций от A[1] до А[N] такой что стоимость комбинации не превышает стоимости 1*A[1]+1*A[2]+...1*A[N]
от тут когда N 4- то через раз работало (от цен в зависимости) а при 5 уже стабильно за ограничение.