получается, дерево строится, но только если имена в базе упорядочены, начиная с корня, сверху-вниз, вот так
имя | начальник
зам.директор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 до количества записей в БД... примерно прикинул - доолго!!
мой метод в лоб и нубский, какие еще алгоритмы существуют?