Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.039 c
3-1115612624
Lex_!
2005-05-09 08:23
2005.06.14
Сохранение изображения в базе Access


1-1117185097
electric
2005-05-27 13:11
2005.06.14
Прокрутка в TWebBrowser


4-1114429361
tradakad
2005-04-25 15:42
2005.06.14
ES_PASSWORD ?


14-1116917122
Layner
2005-05-24 10:45
2005.06.14
Яндекс.Деньги ворует деньги


14-1116843504
Mr.F
2005-05-23 14:18
2005.06.14
Кто сможет?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский