Delphi World - БД-дерево взаимоотношений
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
БД-дерево взаимоотношений

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

По-моему, ошибок нет.

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования