Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.10.2011, 08:11
whizzkey whizzkey вне форума
Прохожий
 
Регистрация: 16.10.2010
Сообщения: 35
Репутация: 10
По умолчанию TreeView и БД

Всем привет, такой вопрос - имеется некая бд с таблицей типа paradox в которой есть 2 уникальных поля ID и ParentID (ID предка) и есть treeview, как сделать иерархическое отображение данных этой таблицы в treeview?
Ответить с цитированием
  #2  
Старый 28.10.2011, 01:34
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Вообще говоря, мне приходилось ходить по ветвям дерева, хранящегося в иерархической таблице, но это был MS SQL Server (версия, начиная с 5-й). Там для рекурсии можно использовать шаблоны (CTE - common table equation), которые описываются так:
PHP код:
with [recursive] <alias1> [(<список полей>)]
as ( <
Select1> )
<
Select2
В квадратных скобках необязательные параметры, уголки - для описания (их не будет).
В Select2 используется шаблон.
Select1 на самом деле содержит два Select'а, соединённых UNION ALL. Первый содержит отправную точку, второй - условие направления (к предкам или потомкам). Рекурсия заканчивается, когда Select2 возвращает пустой набор.
Например:
Код:
WITH tree(num, parent, someth, path1) AS (
	SELECT     ID, ID_Parent, Data, CAST(ID AS varchar(5))
        FROM   Table1
        WHERE  (ID = 1)
    UNION ALL
    SELECT     V.ID, V.ID_Parent, V.Data, CAST(path1 + '_' + CAST(V.ID AS varchar(5)) AS varchar(5))
        FROM   Table1 AS V INNER JOIN
               tree AS T ON T.num = V.ID_Parent)

SELECT     num, parent, someth, path1
FROM       tree AS tree_1
ORDER BY   path1
Результат:
tree.jpg

Последний раз редактировалось AlexSku, 28.10.2011 в 12:17.
Ответить с цитированием
  #3  
Старый 28.10.2011, 03:53
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не везде это поддерживается. Да и где поддерживается - синтаксис разный.

Варианта 3.
1. Либо честно через рекурсию грузим все дерево сразу.
2. Через ту же рекурсию, только отложенную, грузим дерево по развороту конкретного узла, подгружая следующий уровень.
3. Получаем весь список и по нему строим дерево.
Ответить с цитированием
  #4  
Старый 28.10.2011, 07:15
whizzkey whizzkey вне форума
Прохожий
 
Регистрация: 16.10.2010
Сообщения: 35
Репутация: 10
По умолчанию

я сделал по другому - нашел в интернете пример по созданию бдтривью своими руками:
1.JPG

Немного переделал под себя:
2.JPG


И щас вот думаю как на основе этого примера сделать свой компонент для иерархического отображения БД =(( (Задали же блин

Последний раз редактировалось whizzkey, 28.10.2011 в 07:20.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:17.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter