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