Перейти к содержанию

Связи (relations): различия между версиями

Материал из Химсофт Вики
Строка 49: Строка 49:
Чтобы добавить в отчет такое поле данных, откройте таблицу Products в окне "Данные". Вы увидите, что среди ее полей есть ссылка на родительскую таблицу Categories:
Чтобы добавить в отчет такое поле данных, откройте таблицу Products в окне "Данные". Вы увидите, что среди ее полей есть ссылка на родительскую таблицу Categories:


[[Файл: data_link_3.png|center|border|500px]]
[[Файл: data_link_3.png|center|border]]


Если перетащить показанное на рисунке поле в отчет, мы получим объект "Текст" с текстом:
Если перетащить показанное на рисунке поле в отчет, мы получим объект "Текст" с текстом:

Версия от 08:58, 16 октября 2026

Между двумя источниками данных можно установить связь типа главный-подчиненный (или родительский-дочерний).

Например:

  • одна запись в запросе LaboratoryFilter может иметь множество подчиненных записей в запросе Indicators;
  • оба запроса имеют поле lab_id, по которому можно установить связь.

Есть 2 способа построить отчет с подобными взаимоотношениями.

Способ 1

Первый способ дает возможность строить отчеты типа "главный-подчиненный" (master-detail).

Для этого используются два бэнда "Данные".

Главный бэнд привязывается к главному источнику данных, подчиненный бэнд – к подчиненному источнику. Наш пример может выглядеть так:

Такой отчет, если его запустить, напечатает список показателей для каждой лаборатории:

Способ 2

Второй способ позволяет из подчиненного источника обращаться к главному.



Покажем это на примере. Допустим, мы хотим распечатать список всех продуктов. Для этого нам нужен один бэнд "Данные", который подключен к таблице Products:


Такой отчет, если его запустить, напечатает все продукты из всех категорий. Допустим, мы рядом с каждым продуктом хотим напечатать имя категории, к которой он относится. Без использования связи это было бы затруднительно, т.к. все, что мы знаем о категории – это ее идентификатор (поле CategoryID в таблице Products). Имя категории хранится в поле CategoryName таблицы Categories. С помощью связи мы можем обратиться к имени категории следующим образом:

[Products.Categories.CategoryName]

При этом FastReport выполнит следующие действия:

возьмет текущую строку в таблице Products; в таблице Categories найдет строку, которая является родительской; для найденной строки вернет значение поля CategoryName. В общем случае форма обращения к полю родительской таблицы допускает неограниченное количество предков таблицы:

[дочерняя_таблица.ее_родитель.родитель_родителя.и_так_далее.поле]


Чтобы добавить в отчет такое поле данных, откройте таблицу Products в окне "Данные". Вы увидите, что среди ее полей есть ссылка на родительскую таблицу Categories:

Если перетащить показанное на рисунке поле в отчет, мы получим объект "Текст" с текстом:

[Products.Categories.CategoryName]

Наш отчет будет выглядеть следующим образом:

Если его запустить, мы увидим следующее:

Создание связи

Редактирование связи