Все это я делал раньше. Я не могу вам все это показать на развернутом примере, но я дам вам идею как сделать это. Вы должны иметь таблицу, осуществляющую взаимоотношение между людьми. Если на Peter работают Jane и Simon, вы должны иметь таблицу (RELATION) с этими двумя записями. Master Slave ------- имена полей Peter Jane Peter Simon Если George и Elisa работают на Jane, то таблица становится такой: Master Slave ------- имена полей Peter Jane Peter Simon Jane George Jane Elisa и так далее.
Если в таблице RELATION необходимо создать дерево, начинающееся на Peter, то нужно добавить к дереву главный узел (запись), где Master = Peter. Затем каждая дочерняя запись располагается ниже записи Master = Peter. После добавления дочерней записи вы сразу увидите, если ребенок имеет собственного ребенка. Ребенок становится теперь, вероятно, отцом, поэтому вы должны позиционировать таблицу RELATION к первой записи, где Master = child, и так далее, рекурсивно. Такой способ гарантирует построение правильного дерева.
Пример:
AddFather('Peter') AddChild('Peter',1) Procedure AddFather(Name: String) Begin Tree.Add(Name); End; Procedure AddChildr(Name: String, Index:Integer) Begin Relation.FindKey([Name]) while RelationMaster.AsString = Name do Begin Tree.AddChild(Index,RelationSlave.AsString); AddChild(RelationSlave.AsString,Tree.ItemsCount); Relation.Next; End; End; |
По-моему, ошибок нет. [001241]