Главная страница
    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.04 c
3-1115280907
juice
2005-05-05 12:15
2005.06.14
Declared cursor already exists


14-1116781286
raidan
2005-05-22 21:01
2005.06.14
Вести в 20.00 от 22 мая


6-1111926594
X-Disa
2005-03-27 16:29
2005.06.14
TIdHttp - подвисает


14-1116841043
Polevi
2005-05-23 13:37
2005.06.14
Нас облучают !


1-1117506251
Gern
2005-05-31 06:24
2005.06.14
Проверка поля EdIt





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский