![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
База данных и 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 этой же базы, тоесть на запись-родителя
....
итд.