Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как можно связать TTreeView с базой?


Автор: Chuck 11.11.2004, 21:38
Добрый день!

Вот решил написать электронный учебник!
Выглядеть он будет так!
Слева TreeView, справа компонент TWebBrowser (это очень скупой описание, на самом деле там будет админовская часть для редактирования разделов и статей) !

Все статьи будут храниться в базе MS Access, но, изучив (возможно, не полностью) TTreeView, я столкнулся с проблемой
редактирования, удаления разделов! Проще скажу - не могу связать TTreeView с базой, точнее таблицей разделов!
Немного о базе, точнее о её структуре!
Я решил не описывать все таблицы, и все поля, опишу лишь те, что представляют важность для данного вопроса!
И так:
Код

TABLE parts
part_id - индекс раздела (уникальный)
part_name - название раздела
parent_id - тут содержится индекс родительского раздела!

TABLE articles
article_id - индекс статьи (уникальный)
article_text - сама статья
article_part - индекс раздела, к которому относится данная статья!


Вот вроде все с базой!

Теперь вопрос! Как мне можно связать TTreeView с базой?
Есть два моих варианта!
1. Созадть запись типа
Код

Notes = record;
name :String;  
id : Integer;
end;


Тут будет при выборе раздела в TreeView производится поиск по записи с таким же именем, и по нему узнаваться id, раздела!

2.Индексировать разделы не по уникальному id, а по имени, но, IMHO, глупо!

Кто что посоветует!???

Vit, если не сложно, посоветуйте что-нибудь, Вы ведь работаете с факом, а там тот же принцип!

Автор: p0s0l 11.11.2004, 23:11
У каждого нода (элемента) TreeView есть свойство Data - в нём и храни id...
там можешь хранить всю необходимую инфу для идентификации раздела/темы...
Добавляй в TreeView например так:
Код
TreeView1.Items.AddNode(nil, Node1, 'Раздел1', Pointer(TopicId), ...)

Или у уже добавленного нода присваивай:
Код
Node.Data := Pointer(TopicId);

Потом, чтобы узнать Id выбранной темы:
Код
TopicId := Integer(TreeView1.Selected.Data);


PS: (добавлено позднее, после Вита)
похоже, что я неправильно понял суть вопроса smile

Автор: Vit 11.11.2004, 23:58
Древовидные базы данных из реляционных делаются добавлением поля - ссылки на родительский узел. Например дерево:

Код

Европа
+Украина  
++Киев
++Харьков
+Россия
++Москва
++Питер
Америка
+США
++Вашингтон


Кодируется в таблице:
Код

id parent value
1  0  Европа
2  1  Украина  
3  2  Киев
4  2  Харьков
5  1  Россия
6  5  Москва
7  5  Питер
8  0  Америка
9  8  США
10 9  Вашингтон

Автор: Chuck 12.11.2004, 12:15
2p0s0l
Спасибо, именно это мне и нужно было!!!

2Vit, спасибо, я так и предполагал хранить, проблема была в хранение индекса у TreeView, только, может, я не правильно описал, я как раз не знал, можно ли отдельному ноду, или поддереву задавать как-то id?
Спасибо p0s0l-у!!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)