Все это я делал раньше. Я не могу вам все это показать на развернутом
примере, но я дам вам идею как сделать это. Вы должны иметь таблицу,
осуществляющую взаимоотношение между людьми. Если на 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; |
По-моему, ошибок нет. |