Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

База данных и TreeView [D6, Paradox]


V l a d i m i r ©   (2004-05-21 17:52:00) 

Уважаемые мастера, третий день ломаю голову над следующей проблемой: необходимо, чтобы информация, содержащаяся в таблице БД, отображалась в виде древовидной струкутры. В качестве исходной информации берутся статьи доходов и расходов предприятия, которые содержатся в соответствующих таблицах. Как отобразить исходную информацию в виде дерева я знаю, но проблема состоит в том, что пользователь, находясь на определенной ветви дерева, может добавить/удалить определенный пункт в этой ветви (статью доходов/расходов), а может создать новую ветвь (раздел статей)…
Как внести эти изменения в таблицу БД (тк первые 19 записей таблицы– это пункты 1 ветви, следующие 4 – 2 ветвь и т.д.)?


V l a d i m i r   (2004-05-21 18:59:00) [1]

> Соловьев ©
> Vlad ©
ОГРОМНОЕ СПАСИБО! Уже послал на печать...


Vlad   (2004-05-21 18:54:00) [2]


> V l a d i m i r   (21.05.04 18:46) [6]

Нет, никаких ADD('Петя') ручками делать не надо.

Значит так. Поскольку глубина иерархии заранее неизвестна, ведь в таблице она теоретически может быть любая, то для построения дерева тебе нужно писать рекурсивную процедуру, которая будет делать запрос к базе, получать по ID_PARENT всех подчиненных, и сама прописывать их в TreeView, и далее вызывать сама себя снова.

Впринципе, механизм достаточно несложный.
Можешь еще почитать местный FAQ

http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988622717&n=14


Соловьев   (2004-05-21 18:50:00) [3]

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=488


V l a d i m i r   (2004-05-21 18:46:00) [4]

Так, понятно. Ну предположим, что таким образом я забил все это в таблицу...
TreeView.Add(nil,'Петя');
 TreeView.AddChild(TreeView.Items.Item[0],'Коля');
   TreeView.AddChild(TreeView.Items.Item[1],'Саша');
   TreeView.AddChild(TreeView.Items.Item[1],'Юра');

и т.д.. По-моему, так должно быть... (Delphi рядом нету, проверить не могу..).
А как использовать поля ID и ID_PARENT, чтобы взяв их из таблицы, отобразить NAME в TreeView?


Vlad   (2004-05-21 18:34:00) [5]


> V l a d i m i r   (21.05.04 18:21) [3]

Представь что это - таблица начальников и подчиненных на предприятии - типичная иерархическая структура

ID  ID_PARENT   NAME
--------------------------
1 -   Петя
2 1   Коля
3 2   Саша
4 2   Юра
5 4   Женя


Петя - самый главный, у него нет начальников
У Коли - начальник Петя (ID_PARENT = 1)
У Сашы и Юры - начальник Коля (ID_PARENT = 2)
У Жени начальник Юра (ID_PARENT = 4)

p.s. Только бы табличка не съехала


Vlad   (2004-05-21 18:34:00) [6]

Съехала все-таки :(
Ну ничего, разберешься думаю


V l a d i m i r   (2004-05-21 18:21:00) [7]

Дело в том, что первоначально информацию предполагалось выводить в StringGкid'e, но оказалось, что нужно использовать TreeView и плюс к этому необходимо предусмотреть добавление и удаление записей. Если не трудно, можно поподробнее про ID_PARENT, т.е как определить ветку и добавить запись в таблицу таким образом, чтобы было понятно, что это новая запись данной ветки.
С иерархическими базами столкнулся впервые, поэтому надеюсь на понимание и буду благодарен за помощь...


Vlad   (2004-05-21 18:07:00) [8]

Сорри, везде под словом "базы" подразумевал "таблицы" конечно же


Vlad   (2004-05-21 18:05:00) [9]


> тк первые 19 записей таблицы– это пункты 1 ветви, следующие
> 4 – 2 ветвь и т.д

Что за ерунда ?
Стандартно, иерархические базы проектируются так:
ID, ID_PARENT, NAME.....
где ID - уникальный идентификатор записи
ID_PARENT - внешний ключ на ID этой же базы, тоесть на запись-родителя
....
итд.


Наверх

Титульная страница Поиск, карта сайта Написать письмо