Search Results for

    Show / Hide Table of Contents

    Связи (relations)

    Между двумя источниками данных можно установить связь. Связь описывает отношение типа "главный-подчиненный" (или "родительский-дочерний"). Например, одна запись в таблице Categories может иметь множество подчиненных записей в таблице Products:

    Для того чтобы создать связь, нужно указать следующее:

    1. главная таблица;
    2. подчиненная таблица;
    3. набор ключевых полей в главной таблице;
    4. набор ключевых полей в подчиненной таблице.

    Рассмотрим в качестве примера таблицы Categories и Products из демонстрационной базы данных. Они имеют следующую структуру:

    Обе таблицы имеют поле CategoryID, по которому можно установить связь. При этом одной категории будут соответствовать несколько продуктов.

    Как можно использовать связанные источники данных в FastReport? Есть два способа сделать это.

    Первый способ дает возможность строить отчеты типа "главный-подчиненный" (master-detail). Для этого используются два бэнда "Данные". Главный бэнд привязывается к главному источнику данных, подчиненный бэнд – к подчиненному источнику. Наш пример может выглядеть так:

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

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

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

    [Products.Categories.CategoryName]
    

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

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

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

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

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

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

    [Products.Categories.CategoryName]
    

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

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

    Back to top © 1998-2025 Copyright ООО «Быстрые отчеты»