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

Вниз

Построение дерева из базы данных   Найти похожие ветки 

 
Mr.F   (2005-05-05 10:09) [0]

Здарово всем.
Моя проблема заключается в составлении алгоритма построение 7 уровнего дерева из таблицы в базе данных в компоненте TABLE, кот. Описана ниже:
Я разработал  алгоритм но в нем глюки прошу помощи

                                                                        Структура таблицы.
     ID                    Счётчик
     Department     Строка
     GroupGoods    Строка
     SubGrouop1    Строка
     SubGrouop2    Строка
     SubGrouop3    Строка
     SubGrouop4    Строка
     FullName   Строка  Имя товара который относится к группам.

                                                                        Как будет видеть пользователь .

Department GroupGoods SubGrouop1 SubGrouop2 bGrouop3SubGrouop4   FullName          
Продажа    Автоиобили     Б/У              
Nexia
Продажа    Автоиобили     Б/У  BMV  
BMV 535
Покупки    Автоиобили     Б/У                  
Nexia 2
Покупки    Канцтовары     Карандаши                
HB 2

Прчём как видно из данных в таблице могут быть и пустые значения в группах, их не надо выводить в дерево.

Вид дерева на основании выше указанных данных в раскрытом виде

Если в переди стоит значок * , то он является элементом а не группой

Продажа
    Автомоболи
          Б/У
              BMV
     *BMV 535
   *Nexia
Покупки
    Автомоболи
          Б/У
*Nexia 2
    Канцтовары
          Карандаши                
*HB 2

Конечно чучуть не поместилось но надеюсь на понимания
Зарание спасибо.


 
stud ©   (2005-05-05 10:13) [1]

достаточно всего двух полей для построения дерева
id ключ
parent ссылка на родителя
fullname наименование


 
Rule ©   (2005-05-05 10:14) [2]

координально неправильный подход к решению проблеммы (ИМХО) ...
читай тут
http://ibase.ru/devinfo/treedb.htm
http://ibase.ru/devinfo/treedb2.htm
http://sdm.viptop.ru/articles/sqltrees.html


 
Johnmen ©   (2005-05-05 10:17) [3]

Тебе нужно соединить таблицу саму с собой (LEFT JOIN) столько раз, сколько у тебя сущностных групп.


 
Mr.F   (2005-05-05 10:21) [4]

STUD Но уменя именно такая таблица
А насчёт твоего ответа я знаю.
Надо решить именно с этой таблицей


 
Johnmen ©   (2005-05-05 10:38) [5]

http://delphimaster.net/view/1-1115274265/


 
Mr.F   (2005-05-05 14:19) [6]

Rule ==>
Спасибо дока крутая, и подход левый, но мне надо именно с этой таблицой разобратся.


 
Sergey13 ©   (2005-05-05 14:30) [7]

2[6] Mr.F   (05.05.05 14:19)
Почему именно с этой таблицей и что значит построить дерево (просто показать деревом?)?


 
Mr.F   (2005-05-05 14:42) [8]

Sergey13 ==>
Да


 
stud ©   (2005-05-05 14:46) [9]

так приведи его к класической структуре и отобрази стандартным компонентом


 
Sergey13 ©   (2005-05-05 14:48) [10]

Что да? Просто показать? Тогда наверное можно будет просто отсортировать и последовательно заполнять ТриВьюху реагируя на смену полей. Можно перегнать по тому же принципу в другую таблицу с указанной в [1] структурой и показать готовым ТриВьюером.


 
Soft ©   (2005-05-05 23:07) [11]

Структура таблицы
CREATE TABLE FOLDERS (
   ID                INTEGER NOT NULL,
   FOLDERNAME        VARCHAR(255),
   FOLDERDEPENDENCE  INTEGER DEFAULT null,
   FOLDERFIXING      INTEGER DEFAULT 0
);


Код построения дерева(тормозит, но работает).
Procedure LoadFoldersToList(var LoadFolderQuery:TSDQuery;var LoadFolderTree:TTreeView);
var Node: TTreeNode;
var index:integer;
begin

 LoadFolderTree.Items.Clear;
 LoadFolderQuery.Active:=False;
 LoadFolderQuery.SQL.Clear;
 LoadFolderQuery.SQL.Add("select * from folders order by folderdependence,id;");
 LoadFolderQuery.Active:=True;
 //создаем основной корень
 if (LoadFolderQuery.Locate("folderfixing",3,[loCaseInsensitive])) then
   begin
   Node:=LoadFolderTree.Items.Insert(nil,LoadFolderQuery.FieldByName("foldername").AsString);
   Node.ImageIndex:=LoadFolderQuery.FieldByName("folderfixing").AsInteger;
   Node.StateIndex:=LoadFolderQuery.FieldByName("id").AsInteger;
   Node.SelectedIndex:=LoadFolderQuery.FieldByName("folderfixing").AsInteger;
   end;
 LoadFolderQuery.Delete;

 if (LoadFolderTree.Items.Count>0) then
   begin
   LoadFolderQuery.First;
   while not LoadFolderQuery.Eof do
     begin
     index:=0;
     while ((index<LoadFolderTree.Items.Count) and (LoadFolderQuery.FieldByName("folderdependence").AsInteger<>LoadFolderTree.Items[index].StateIndex)) do inc(index);
     Node:=LoadFolderTree.Items.AddChild(LoadFolderTree.Items[index],LoadFolderQuery.FieldByName("foldername").AsString);
     Node.ImageIndex:=LoadFolderQuery.FieldByName("folderfixing").AsInteger;
     Node.StateIndex:=LoadFolderQuery.FieldByName("id").AsInteger;
     Node.SelectedIndex:=LoadFolderQuery.FieldByName("folderfixing").AsInteger;
     LoadFolderQuery.Delete;
     end;
   end;
 LoadFolderQuery.Active:=False;

end;



Страницы: 1 вся ветка

Текущий архив: 2005.06.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.084 c
4-1113549382
KarpUha1
2005-04-15 11:16
2005.06.14
Wav в модем


14-1117158958
Просто Джо
2005-05-27 05:55
2005.06.14
Автомодератор озверел :)


3-1115363296
dmitry501
2005-05-06 11:08
2005.06.14
Запрос к MSSQL через ADOQuery c параметрами


1-1117235832
Dark123us
2005-05-28 03:17
2005.06.14
ошибка при попытке выгрузки Dll


14-1117126429
Uncle Archi
2005-05-26 20:53
2005.06.14
Глюк в МФ 1.2