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

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

Как лучше считать дерево из таблицы БД в TreeView? [D7, XP]


alll_23 ©   (2007-10-24 16:41:00) 

Здравствуйте это снова я со своим вопрос по TreeVew недавно Сергей М. дал мне ссылочку на вот этот документ

Как лучше считать дерево из таблицы БД в TreeView?

Говорят есть удобный компонент dbtreeview,
но я не смог достать нормально работающий и
потом их так много в разных библиотеках : polaris, rxlib, ralib и т.п.
Где лучше. Взял вроде из polaris, но там только pas файл и он просит
модуль Тooledit.dcu , который я найти не смог.
--------------
Можно не искать компоненты а самому считать дерево из таблицы вида :
Поля : id уникальный индекс, firstid ссылка на родителя, name название.
Затем пишешь процедуру :

procedure readtree( intrn : integer; treenodetemp: ttreenode; ttree : ttreeview );
var
qenode: tquery;
bflag: boolean;
begin
qenode := tquery.create( nil );
qenode.databasename := -- как там у тебя
qenode.close;
qenode.sql.clear;
bflag := false;
if intrn = -1 then
begin
qenode.sql.add('select id, firstid, name');
qenode.sql.add('from " work.db" ');
qenode.open;
qenode.first;
intrn := qenode.fieldbyname('id').asinteger;
qenode.close;
qenode.sql.clear;
bflag := true;
end;
qenode.sql.add('select id, firstid, name');
qenode.sql.add('from " work.db" where firstid = '+inttostr(intrn));
qenode.open;
qenode.first;
while not qenode.eof do
begin
if bflag = true then
readtree(qenode.fieldbyname('id').asinteger,
ttree.items.addobject(nil, inttostr(qenode.fieldbyname('id').asinteger)+':'+
inttostr(qenode.fieldbyname('firstid').asinteger)+':'+
qenode.fieldbyname('name').asstring, nil),
ttree)
else
readtree(qenode.fieldbyname('id').asinteger,
ttree.items.addchildobject(treenodetemp,
inttostr(qenode.fieldbyname('id').asinteger)+':'+
inttostr(qenode.fieldbyname('firstid').asinteger)+':'+
qenode.fieldbyname('name').asstring, nil),
ttree); //рекурсия
qenode.next;
end;
qenode.close;
qenode.destroy;
end;

Рекурсивно вызываешь у себя при формировании дерева и все
Вызов следующий :
readtree( -1, nil, {имя объекта treeview} );

Всё сделал так же только помял TQuery  на TIBQuery только я не создаю TIBQuery а он у меня заранее лежит на форме. И не работает у меня ничиге, помогите разобраться приз!


Сергей М.   (2007-10-24 16:52:00) [1]

Ну так пройди пошагово по всей этой процедуре и контролируй, что происходит при выполнении каждого оператора !


alll_23   (2007-10-24 16:50:00) [2]

Ничего не говорит, неправильно строится дерево


Сергей М.   (2007-10-24 16:47:00) [3]


> alll_23   (24.10.07 16:41)


И что толку оттого что ты клянчил "примеры" ?

Ну вот он, пример вожделенный .. И смотришь ты на него как баран на новые ворота)

Примеры даются не для тестирования на "работает - не работает", а для самостоятельного изучения логики!

Ну да ладно... Что говорит отладчик по этому поводу ?


Наверх

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