Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.07.2013, 16:08
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию treeView в базу и обратно

Приветствую.
Суть: юзер заходит в прогу, создает или меняет дерево (иерархия сотрудников), сохраняет в базу (mysql), в следующий раз загружает это дерево и опять меняет - создает...
Как дерево сделать в базе??
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
  #2  
Старый 29.07.2013, 16:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Вам структуру БД для формирования дерева? Обычно так: ID, ParentID, Context
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
  #3  
Старый 29.07.2013, 16:33
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

а алгоритм разворачивания из БД?
у меня у дедки может и пра-пра-правнучка(и) быть)

зачем context?
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
  #4  
Старый 29.07.2013, 17:03
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Цитата:
зачем context?
А содержимого у вас не будет? Только индексы узлов? Сами пишете, иерархия сотрудников, значит Context - Сотрудник
Цитата:
а алгоритм разворачивания из БД?

Допустим есть такая иерархия:
Точка - Линия - Многоугольник - Прямоугольник - Квадрат
Точка - Линия - Многоугольник - Трапеция - Ромб
В базу запишется:
ID, ParentID, Context
1, -1, Точка
2, 1, Линия
3, 2, Многоугольник
4, 3, Прямоугольник
5, 4, Квадрат
6, 3, Трапеция
7, 6, Ромб

Иерархию можно продолжать до бесконечности.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 29.07.2013 в 17:07.
  #5  
Старый 29.07.2013, 20:30
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

и вместо обычного treeView использовать DBVirtualTreeView (или подобные)
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
  #6  
Старый 30.07.2013, 17:09
Аватар для Mrak
Mrak Mrak вне форума
Местный
 
Регистрация: 26.01.2013
Адрес: МО
Сообщения: 438
Версия Delphi: XE2
Репутация: 17
По умолчанию

получается, дерево строится, но только если имена в базе упорядочены, начиная с корня, сверху-вниз, вот так

имя | начальник

зам.директор1 | директор
зам.директор2 | директор
зам.директор3 | директор
ст.менеджер | зам.директор1
ст.монтажник | зам.директор2
прораб | зам.директор3
менеджер | ст.менеджер

код:
Код:
TreeView1.Items.Clear;
  TreeView1.Items.AddChild(nil, 'root');
  dm.ADOQuery1.SQL.Text:='select surname, boss from stryktyra';
  dm.ADOQuery1.Open;
  dm.ADOQuery1.First;
  while not dm.ADOQuery1.Eof do
  begin
      for i:=0 to TreeView1.Items.Count-1 do
      begin
        if TreeView1.items[i].Text = dm.ADOQuery1.FieldByName('boss').AsString then
        TreeView1.Items.AddChild(TreeView1.items[i], dm.ADOQuery1.FieldByName('surname').AsString);
      end;
      dm.ADOQuery1.Next;
  end;

а если структура не упорядочена, например

имя | начальник

зам.директор1 | директор
прораб | зам.директор3
зам.директор2 | директор
менеджер | ст.менеджер
зам.директор3 | директор
ст.менеджер | зам.директор1
ст.монтажник | зам.директор2

то это получается нужно делать несколько прогонов с условием, что имени нет в дереве. то есть все это пихать еще в FOR от 1 до количества записей в БД... примерно прикинул - доолго!!
мой метод в лоб и нубский, какие еще алгоритмы существуют?
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:27.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter