Отношение
"один- ко- многим"
Для установления отношения "один- ко- многим" в наборе данных предназначены два свойства —
Mastersource и MasterFieids, которые задаются для подчиненной таблицы. Набор данных главной таблицы не требует никаких дополнительных настроек и заданная связь будет работать только при перемещениях по записям главной таблицы.
Свойство Mastersource определяет компонент
TDataSource, который связан с главной таблицей.
Затем при помощи свойства MasterFieids необходимо установить отношения между полями главной и подчиненной таблицы. В нем содержится имя индексированного поля, по которому устанавливается связь. Если таких полей несколько, их имена разделяются точкой с запятой. При этом не все поля, входящие в индекс, обязаны участвовать в создании отношения.
Для задания свойства MasterFields можно использовать Редактор связей полей
(Field Link Designer), который вызывается щелчком на кнопке в поле редактирования этого свойства в Инспекторе объектов (рис. 14.1).
Рис. 14.1. Редактор связей
полей
Здесь в разворачивающемся списке Available
Indexes выбирается требуемый индекс для подчиненной таблицы. После этого
в списке Detail Fields появляются имена всех полей, входящих в этот индекс.
В списке Master Fields отображаются все поля главной таблицы.
Теперь требуется создать связи между полями.
Для этого в левом списке выбирается поле подчиненной таблицы, а затем соответствующее
ему поле главной таблицы в правом списке. После этого активизируется кнопка
Add, щелчок на которой создает отношение по двум полям главной и подчиненной
таблиц. Созданная связь отображается в списке Joined Fields.
Примечание
После создания связи по индексированным полям
данный индекс становится текущим для набора данных. При этом в зависимости
от типа СУБД автоматически заполняется свойство
indexName или indexFieldNames.
Уже созданные связи можно удалить. Кнопка Delete
удаляет выбранную связь, кнопка Clear — все связи.
После создания связей между полями отношение
"один- ко- многим" считается установленным. Теперь достаточно открыть
оба набора данных, чтобы увидеть работу отношения.
В качестве примера рассмотрим проект DemoJoins,
в котором связываются таблицы из демонстрационной базы данных DBDEMOS. Для этого
использованы компоненты ADO, подробнее о которых вы можете узнать из гл. 19.
Таблица Customers
представлена в наборе данных компонента CustTable,
она содержит данные о покупателях. Таблица Orders
представлена в наборе данных компонента ordTable,
она содержит данные о заказах. Таблица Employee
представлена в наборе данных компонента ЕmpТаblе,
она содержат данные о продавцах (табл. 14.2).
Примечание
Приложение DemoJoins не содержит дополнительного
исходного кода. Все отношения между таблицами заданы при помощи Инспектора
объектов.
Отношение "один- ко- многим" задано
между таблицами покупателей (Customers)
и заказов (Orders). Таблица покупателей
является главной. Для создания отношения установлены следующие значения свойств
компонента ordTable (подчиненная таблица).
Свойство MasterSource
должно указывать на компонент custsource,
связанный с набором данных CustTable.
Свойство MasterFields
указывает на поле custNo таблицы Customers.
В наборе данных OrdTable
включен вторичный индекс на основе поля CustNo
(indexName = 'CustNo').
Рис. 14.2. Главная форма
проекта DemoJoins
Таким образом, две таблицы связаны отношением
"один- ко- многим" по индексированным полям
custNo (номер покупателя). В результате, при перемещении по записям таблицы
покупателей, в таблице заказов будут показаны только те заказы, которые относятся
к текущему покупателю
|