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

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

Дерево БД


Itonix ©   (2007-02-19 16:03:00) 

Предположим есть три связаных таблицы *Интербейз):
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 18:09:00) [1]

вот решение проблемы для ЕлТри дерева. три таблицы Компания - ТМ - Продукт (вкус+вес). Выбираеться одним запросом
результ запроса лежит в Квери 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;

наконецто заработало


Empleado   (2007-02-19 17:31:00) [2]

1)
> Храни все уровни одного и того же дерева в одной и той же
> таблице

2) либо объединяй три таблицы в одну с форматом id, id_parent, name
3) либо, не вижу проблемы представить дерево из трех таблиц, любым методом: например, как вариант, пробегая по первой таблице - создаешь первый уровень, затем по второй - второй уровень, затем третий; либо же делаешь мастер-детэйл и строишь уровни дерева.

ПС. Что такое ElTree - не знаю, возможно там все сложнее.


Val   (2007-02-19 17:26:00) [3]

При невозможности перестроить схему бд - напишите 2 соотв. "деревянных"(ну нет в классическом дереве понятия middle - ибо определить его нельзя, узлы соотносятся только как parent-child) обзора и их уж вяжите к компоненту при выборе структуры отображения пользователем.


Сергей М.   (2007-02-19 17:17:00) [4]


> два или три уровня дерева строить из одного запроса


Храни все уровни одного и того же дерева в одной и той же таблице, тогда и вопрос сам по себе отпадет.

Твоя "трехтабличная" структурная схема ничем не оправдана, либо у тебя не древовидная, а сетевая структура.


Itonix   (2007-02-19 16:26:00) [5]

да я б и сам не против. да вот надо именно так сделать. два или три уровня дерева строить из одного запроса


Sergey13   (2007-02-19 16:21:00) [6]

Три грида - нагляднее некуда, ИМХО конечно. С ElTree не работал, так что не помогу.


Itonix   (2007-02-19 16:17:00) [7]

надо так сделать. (задача так требует). что б видно біло двух или трех уровневое дерево


Sergey13   (2007-02-19 16:15:00) [8]

> [0] Itonix ©   (19.02.07 16:03)

Мое ИМХО - при ограниченной вложенности использование дерева - только дополнительные тормоза.


Itonix   (2007-02-19 16:04:00) [9]

дополнение- я использую компонент ElTree


Наверх

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