Связи (relations) |
Top Previous Next |
Между двумя источниками данных можно установить связь. Связь описывает отношение типа "главный-подчиненный" (или "родительский-дочерний"). Например, одна запись в таблице Categories может иметь множество подчиненных записей в таблице Products:
Для того чтобы создать связь, нужно указать следующее:
Рассмотрим в качестве примера таблицы Categories и Products из демонстрационной базы данных. Они имеют следующую структуру:
Обе таблицы имеют поле CategoryID, по которому можно установить связь. При этом одной категории будут соответствовать несколько продуктов.
Как можно использовать связанные источники данных в FastReport? Есть два способа сделать это.
Первый способ дает возможность строить отчеты типа "главный-подчиненный" (master-detail). Для этого используются два бэнда "Данные". Главный бэнд привязывается к главному источнику данных, подчиненный бэнд – к подчиненному источнику. Наш пример может выглядеть так:
Такой отчет, если его запустить, напечатает список продуктов в каждой категории:
Второй способ позволяет из подчиненного источника обращаться к главному. Покажем это на примере. Допустим, мы хотим распечатать список всех продуктов. Для этого нам нужен один бэнд "Данные", который подключен к таблице Products:
Такой отчет, если его запустить, напечатает все продукты из всех категорий. Допустим, мы рядом с каждым продуктом хотим напечатать имя категории, к которой он относится. Без использования связи это было бы затруднительно, т.к. все, что мы знаем о категории – это ее идентификатор (поле CategoryID в таблице Products). Имя категории хранится в поле CategoryName таблицы Categories. С помощью связи мы можем обратиться к имени категории следующим образом:
[Products.Categories.CategoryName]
При этом FastReport выполнит следующие действия:
В общем случае форма обращения к полю родительской таблицы допускает неограниченное количество предков таблицы:
[дочерняя_таблица.ее_родитель.родитель_родителя.и_так_далее.поле]
Чтобы добавить в отчет такое поле данных, откройте таблицу Products в окне "Данные". Вы увидите, что среди ее полей есть ссылка на родительскую таблицу Categories:
Если перетащить показанное на рисунке поле в отчет, мы получим объект "Текст" с текстом:
[Products.Categories.CategoryName]
Наш отчет будет выглядеть следующим образом:
Если его запустить, мы увидим следующее:
|