Delphi 6. Створення звязків між таблицями та каскадне видалення записів

Submitted by gary on Sat, 03/03/2012 - 01:00
Зараз розглянемо як Delphi, звязувати таблиці Paradox, та організувати каскадне видалення записів.
Для прикладу в нас буде 2 таблиці users та groups з такою структоурою:
users
  • id
  • group_id
  • name

Вторинний індекс x_group_id по полю group_id.

groups

  • id
  • name

Таблиця gruops буде головною таблицею. В таблиці users встановлюємо наступні значення:

  • indexName: x_group_id
  • masterSource: DataSourceGroups
  • MasterFields: id (Обираємо Group_id та Id, та натискаємо Add)

Таким чином ми звязали таблиці. При виборі запису в таблиці groups таблиця users буде фільтруватися.
Щоб організувати каскадне видалення записів необхідно зробити обробник події BeforeDelete  для таблиці groups 
procedure Tdatamod.TableGroupsBeforeDelete(DataSet: TDataSet);
begin
  while not TableUsers.Eof do
            TableUsers.Delete;
end;



В результаті перед видаленням запису з таблиці groups будуть видалятися усі відфільтровані записи з таблиці users. Цікавим є те, що якщо з таблицею users зв'язати якусь дочірню таблицю, і головній таблиці users також зробити обробник  BeforeDelete, то спочатку будуть видалятися записи із дочірньої таблиці, яка є найнижчою в ієрархії зв'язків. Записи будуть перебиратися і видалятися ніби у вкладених циклах while.