Показать сообщение отдельно
  #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 до количества записей в БД... примерно прикинул - доолго!!
мой метод в лоб и нубский, какие еще алгоритмы существуют?
__________________
Я за здоровый экстрим!
Спасибо за "спасибо")