Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.13;
Скачать: CL | DM;

Вниз

Дерево БД   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.03 c
15-1176460796
pasha_golub
2007-04-13 14:39
2007.05.13
Розыч. С Днюхой мы тебя чичас поздравлять будем :)


2-1176977001
Electro
2007-04-19 14:03
2007.05.13
Необходимо получить данные из компонента чужой программы.


3-1172343764
DmitrichJ
2007-02-24 22:02
2007.05.13
InterBase-Generator-Trigger. Как узнать сгенерированный номер?


15-1176097410
Девушка
2007-04-09 09:43
2007.05.13
Итеративный ЖЦ разработки


15-1176147431
palva
2007-04-09 23:37
2007.05.13
Газета Уошингтон пост интересно прикололась