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