Форум: "Базы";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
ВнизДерево БД Найти похожие ветки
← →
Itonix © (2007-02-19 16:03) [0]Предположим есть три связаных таблицы *Интербейз):
Parent:
id,Name
Middle
id; id_parent; name;
Child:
id; id_midle; name;
не могу придумать алгоритм отображения этой связи в виде дерева , если учесть вариант того, что пользователь моежт просматривать дерево в двух режимах:
1) когда видно связь Parent->Middle->Child
2) Parent->child
что-то я совсем не соображаю :((((
подскажите плиз.
данніе будут строиться из одного запроса вида
select parent.name, middle.name,child.name from parent,childe,middle
where ... (тут их соединяем)
← →
Itonix © (2007-02-19 16:04) [1]дополнение- я использую компонент ElTree
← →
Sergey13 © (2007-02-19 16:15) [2]> [0] Itonix © (19.02.07 16:03)
Мое ИМХО - при ограниченной вложенности использование дерева - только дополнительные тормоза.
← →
Itonix © (2007-02-19 16:17) [3]надо так сделать. (задача так требует). что б видно біло двух или трех уровневое дерево
← →
Sergey13 © (2007-02-19 16:21) [4]Три грида - нагляднее некуда, ИМХО конечно. С ElTree не работал, так что не помогу.
← →
Itonix © (2007-02-19 16:26) [5]да я б и сам не против. да вот надо именно так сделать. два или три уровня дерева строить из одного запроса
← →
Сергей М. © (2007-02-19 17:17) [6]
> два или три уровня дерева строить из одного запроса
Храни все уровни одного и того же дерева в одной и той же таблице, тогда и вопрос сам по себе отпадет.
Твоя "трехтабличная" структурная схема ничем не оправдана, либо у тебя не древовидная, а сетевая структура.
← →
Val © (2007-02-19 17:26) [7]При невозможности перестроить схему бд - напишите 2 соотв. "деревянных"(ну нет в классическом дереве понятия middle - ибо определить его нельзя, узлы соотносятся только как parent-child) обзора и их уж вяжите к компоненту при выборе структуры отображения пользователем.
← →
Empleado © (2007-02-19 17:31) [8]1)
> Храни все уровни одного и того же дерева в одной и той же
> таблице
2) либо объединяй три таблицы в одну с форматом id, id_parent, name
3) либо, не вижу проблемы представить дерево из трех таблиц, любым методом: например, как вариант, пробегая по первой таблице - создаешь первый уровень, затем по второй - второй уровень, затем третий; либо же делаешь мастер-детэйл и строишь уровни дерева.
ПС. Что такое ElTree - не знаю, возможно там все сложнее.
← →
Itonix © (2007-02-19 18:09) [9]вот решение проблемы для ЕлТри дерева. три таблицы Компания - ТМ - Продукт (вкус+вес). Выбираеться одним запросом
результ запроса лежит в Квери Sales
var i:Smallint;
tm,comp:string;
trItem2,trItem, ParentItem:TElTreeItem;
begin
comp:="";tm:="";
trBrands.Items.Clear;
i:=0;
ibSales.First;
comp:="";tm:="";
//------------------
while not ibSales.Eof do
begin
if ibSAles.FieldByName("Name_comp").Asstring<>comp then
begin
comp:=ibSAles.FieldByName("Name_comp").Asstring;
ParentItem:=trBrands.Items.AddItem(nil);
ParentItem.Text:=comp;
ParentItem.Tag:=ibSAles.FieldByName("KOD_COMP").AsInteger;
end
else
begin
if tm<>ibSales.FieldByName("NAME_TM").AsString then
begin
trItem:=trBrands.Items.AddChild(ParentItem,ibSAles.FieldByName("NAME_TM").AsStri ng);
trItem.Tag:=ibSAles.FieldByName("KOD_TM").AsInteger;
end;
if ibSAles.FieldByName("Name_tm").Asstring<>tm then
begin
tm:=ibSAles.FieldByName("Name_tm").Asstring;
trItem2:=trBrands.Items.AddChild(trItem,ibSAles.FieldByName("NAME_FLV").AsString );
trITem2.Text:=ibSAles.FieldByName("NAME_FLV").AsString+" [ "+ibSAles.FieldByName("Ves").AsString+" ]";
trItem2.Tag:=ibSAles.FieldByName("KOD_VES").AsInteger;
end
else
begin
trItem2:=trBrands.Items.AddChild(trItem,ibSAles.FieldByName("NAME_FLV").AsString );
trITem2.Text:=ibSAles.FieldByName("NAME_FLV").AsString+" [ "+ibSAles.FieldByName("ves").AsString+" ]";
trItem2.Tag:=ibSAles.FieldByName("KOD_VES").AsInteger;
end;
end;
ibSales.Next;
end;
ibSales.First;
наконецто заработало
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.05.13;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.052 c