Конференция "Базы" » Визуализация Иерархической структуры [IB6.x]
 
  • Дима (29.04.08 14:14) [0]
    Подскажите пожалуйста, как реализовать следующее:
        есть таблица в БД (IB6.x), в ней такие поля
    - id - идентификатор уникальный
    - name - название подразделения
    - link_to - идентификатор родителя
     Т.е. простая иерархическая структура Подразделений.
    Необходимо на Дельфи визуализировать в виде дерева, при чём полностью раскрытого, т.е. показать все листья дерева, при этом не использую рекурсии.
    Как это сделать не меняя структуры таблицы?
  • Ega23 © (29.04.08 14:25) [1]
    1. Взять TTreeView, проанализировать набор данных, добавить в дерево нужные узлы.
    2. Написать (скачать из сети) какой-нибудь TDBTreeView. (Могу поделиться своим, но он у меня на специальные задачи заточен; комментариев и пояснений давать не буду, только голый исходник).
  • Sergey13 © (29.04.08 14:32) [2]
    > [0] Дима   (29.04.08 14:14)
    > при этом не использую рекурсии.

    Почему такое ограничение?
  • Ega23 © (29.04.08 14:34) [3]

    > Почему такое ограничение?


    Рекурсия в DataSet - бессмысленная штука.
    А вот пройти один раз, построить список и вычислить корневые элементы, а дальше с этим списком рекурсивно работать - вот это уже другое дело.
  • Reindeer Moss Eater © (29.04.08 14:34) [4]
    Наверное потому, что элементов дерева может быть слишком много и грузить его сразу целиком нет смысла.
  • Reindeer Moss Eater © (29.04.08 14:37) [5]
    Есть готовая библиотека VirtualControls. В том числе для DB.
  • Ega23 © (29.04.08 14:48) [6]

    > Наверное потому, что элементов дерева может быть слишком
    > много и грузить его сразу целиком нет смысла.


    Он же разом всё дерево раскрыть хочет?
  • 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]

    > но пользоваться рекурсией запрещено


    религией ?
  • Павел Калугин © (30.04.08 01:33) [16]
    > [15] Игорь Шевченко ©   (30.04.08 00:44)

    да какая религия. я в МС наступал на ограничения вложенности вызовов пытаясь рекурсивно построить вожможные комбинации из 3-х бмажек. из 3-х еще строило а из 4-х уже все. столько раз сама себя хранимка вызвать не могеть
  • Reindeer Moss Eater © (30.04.08 01:49) [17]
    А затем уже по нажатии на определённый элемент - сканировать только данное поддерево.

    У него вложенность - два уровня.
  • Ega23 © (30.04.08 07:54) [18]

    > да какая религия. я в МС наступал на ограничения вложенности
    > вызовов пытаясь рекурсивно построить вожможные комбинации
    > из 3-х бмажек. из 3-х еще строило а из 4-х уже все. столько
    > раз сама себя хранимка вызвать не могеть
    >


    Павель, не гони, ограничение на 32 вызова в глубину.
  • Павел Калугин © (30.04.08 09:10) [19]
    > [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 уже стабильно за ограничение.
 
Конференция "Базы" » Визуализация Иерархической структуры [IB6.x]
Есть новые Нет новых   [134432   +19][b:0][p:0.001]