Подключение отчета к данным из FastReport в Lazarus

26.03.2021

В предыдущей статье про работу с графиками и диаграммами мы уже ознакомились с бизнес-графикой и штрих-кодами. Настало время усложнить задачу и поработать с различными источниками данных. Большинство отчетов, как правило, основано на данных из БД. Для доступа к таким данным Lazarus предоставляет эффективные механизмы, которые и используются в FastReport. 

Компоненты доступа к данным

Речь идет о компонентах во вкладке «DataAccess», которые могут выступать в качестве источников данных для отчета. Можно использовать с этой целью любые компоненты-наследники TDataSet.

Кроме доступа к данным, определенным в проекте, FastReport позволяет создавать новые компоненты в run-time. В нашей компании принципы создания компонентов доступа к данным максимально приближены к тем, что используются в среде Lazarus - на форму накладывается компонент и в инспекторе объектов настраиваются его свойства. Функционал run-time подключений немного более ограничен в выборе форматов БД, так на момент написания статьи в run-time можно создавать только DBF и SqLite3.

Для подключения таблицы или другого источника данных к бэнду применяется компонент-коннектор TfrxDBDataSet из вкладки FastReportn. Этот компонент выполняет роль посредника между источником данных и ядром FastReport. Компонент отвечает за навигацию по записям и обращение к полям. Это позволило не привязывать ядро FastReport к какой-либо библиотеке доступа к данным.

FastReport может одновременно работать как с BDE, так и с любой другой библиотекой, либо вообще получать данные из источника, не связанного с базой данных, например, из массива или файла.

Из особенностей компонента TfrxDBDataSet предназначенного для работы с источниками данных, хотелось бы отметить его универсальность. Он может использовать все соединения, наследующиеся от TDataSet. А это BDE, CVS и подавляющее большинство других библиотек! Для работы с прочими источниками данных (массив, файл и т.п.) применяется компонент TfrxUserDataSet.

Чтобы связать компонент TfrxDBDataSet с источником данных, нужно настроить один из вариантов:

  • Свойство DataSet, которое устанавливает связь непосредственно с таблицей или запросом.
  • Свойство DataSource, которое подключается к компоненту TDataSource.

Оба способа подключения равноценны, просто первый позволяет обойтись без компонента TDataSource.

А для того, чтобы компонент и связанные с ним данные стали доступны в отчёте, нужно явно указать, какие источники данных используются в отчёте. Выбираем в дизайнере FastReport пункт меню "Отчет/Данные..." и в открывшемся окне отмечаем галочками нужные источники.

Окно выбора источника данных

Описание компонентов в дизайнере FastReport

Компонент TfrxDBFTable предназначен для организации доступа к таблице БД формата .dbf и имеет следующие свойства:

  • FilePath указывает путь до папки с базой данных.
  • TableName назначает имя БД. Выбирая базу данных, вы поменяете и путь.
  • FieldAliases позволяет задать пользовательские имена полей.
  • Filter содержит выражение для фильтрации записей.
  • Filtered определяет, надо ли применять фильтр.
  • IndexFieldNames хранит имена полей, образующих индекс.
  • IndexName задаёт имя вторичного индекса.
  • MasterFields включает в себя поля, связанные с master-набором данных.
  • Master – это тот самый Мастер-набор данных.
  • UserName устанавливает Алиас (пользовательское имя) набора данных.

Назначения свойств компонента аналогичны свойствам TDbf в Lazarus. Для подключения компонента к таблице БД достаточно заполнить свойство TableName. Открытие таблицы осуществляется с помощью установки Active := True.

Редактор свойства FieldAliases позволяет выбрать поля, которые будут доступны при обращении к таблице, и задать пользовательское имя для каждого поля и всей таблице в целом.

Редактор псевдонимов

Редактор свойства MasterFields используется для создания master-detail связей между двумя таблицами. Для связывания двух таблиц отношением master-detail у подчиненной таблицы надо указать в свойстве Master основную таблицу и вызвать редактор свойства MasterFields. Если у таблицы есть вторичные индексы, которые необходимо использовать, настройте предварительно свойство IndexName.

Редактор связей master-detail

Этот редактор дает возможность визуально связать поля master и detail наборов данных. Когда наборы связаны друг с другом отношением Master-Detail, то при перемещении по master набору содержимое detail набора фильтруется таким образом, чтобы в нем содержались только записи, имеющие отношение к текущей записи master набора.

Для связи полей наборов выделите поле из списка слева (detail набор), затем поле из списка справа (master набор), и нажмите кнопку "Добавить". При этом связка полей переместится в нижний список. Чтобы очистить нижний список, воспользуйтесь кнопкой "Очистить". Важно отметить, что связываемые поля должны иметь одинаковый тип и быть ключевыми.

Но в самом Lazarus эти свойства не работают с выборкой (сортировкой и фильтрацией Master-Detail) для компонентов TDbf, а так как мы используем этот компонент, соответственно она не работает и у нас.

Компонент TfrxLazSqliteQuery предназначен для выполнения SQL-запросов к базе данных средствами SqLite3 и имеет следующие свойства:

  • Database задаёт имя подключения к БД (по умолчанию всегда равно «sqlLite»).
  • FieldAliases позволяет задать пользовательские имена полей.
  • Filter хранит выражение для фильтрации записей.
  • Filtered определяет, надо ли применять фильтр.
  • Master – это тот самый Мастер-набор данных.
  • Params отображает список параметров запроса.
  • SQL включает в себя текст запроса.
  • UserName устанавливает Алиас (пользовательское имя) набора данных.
  • IgnoreDupParams – если содержит True, то имена параметров запроса не будут дублироваться в редакторе параметров.

Свойство SQL имеет свой редактор для заполнения SQL-запроса:

Редактор SQL запросов в компоненте TfrxLazSqliteQuery

Свойство Params также имеет свой редактор. Оно доступно, если текст запроса содержит параметры.

Редактор параметров в компоненте TfrxLazSqliteQuery

Параметр может быть двух типов: назначаемый из master-источника либо имеющий конкретное значение, где в качестве значения может выступать как константа, так и ссылка на переменную или свойство объекта.

В случае, когда параметр берется из master-набора данных, необходимо настроить свойство TfrxLazSqliteQuery.Master. Набор данных должен содержать поле с именем, совпадающим с именем параметра. При этом указывать тип параметра и его значение необязательно.

Компонент TfrxLazSqliteDataBase служит для подключения к базе данных SqLite3. Его назначение аналогично совмещенным компонентам TSQLite3Connection и TSqlTransaction, а также он имеет следующие свойства:

  • Connected – при активном состоянии True активизируется подключение.
  • DatabaseName позволяет выбрать имя для базы данных.
  • LoginPrompt определяет, надо ли запрашивать у пользователя пароль при подключении к БД. Если LoginPromt = False, то имя пользователя и пароль должны быть указаны в строке подключения.

Построение отчетов с доступом к БД

Рассмотрим построение простого отчета, содержащего компоненты доступа к данным, где в качестве примера будем использовать демонстрационную БД из проекта LDemo.

Для начала создадим проект, с помощью которого будем проводить эксперименты. Делаем новый проект в Lazarus и размещаем на форме компоненты TfrxReport, TfrxDesigner, TfrxDialogControls, TfrxDBDataset, TDbf.

Форма в Lazarus с компонентами FastReport

Настройте подключение к базе данных. Для этого найдите у Dbf1 свойство TableName и в диалоге выберете БД файл - подойдёт любой с расширением .dbf. После чего установите для frxDBDataset1 свойство DataSet в значение «Dbf1».

Далее добавьте на форму кнопку и введите в OnClick следующий код:

1
2
3
4
procedure TForm1.Button1Click(Sender: TObject);
begin
 frxReport1.DesignReport;
end;

Не забудьте для Linux проекта разрешить потоки. Это было описано в статье установки. После этого скомпилируйте и запустите проект. Для создания end-user дизайнера отчетов более ничего не требуется.

При нажатии на кнопку Design открывается дизайнер, содержащий пустой отчет. Рассмотрим построение простых отчетов в этой среде. Кстати, на этом этапе вы уже знаете, как подключать базы данных к FR из Lazarus-а.

Простой отчет типа «Список»

Сейчас мы будем выводить данные из одной таблицы БД уже средствами FR во время исполнения. Для построения отчета проделайте следующие шаги:

  1. Нажмите кнопку "Новый отчет" на панели инструментов дизайнера. При этом FastReport создаст пустой отчет, содержащий страницы "Код", "Данные", "Page1".
  2. Переключитесь на страницу "Данные" и положите на страницу компонент "Таблица DBF":

Добавление компонента frxDBFTable в отчет

  1. Выберете подключаемую БД. Для этого в инспекторе объектов установите свойство TableName, выбрав файл customer.dbf из демо проекта.
  2. Для подключения бэнда "Данные 1 уровня" к таблице, сделайте двойной щелчок на нему и в открывшемся окне выберите нашу таблицу. Затем перетащите нужные поля из окна "Дерево данных" на лист отчета. После этого наш отчет будет выглядеть примерно так:

Шаблон отчета для вывода списка

Для просмотра полученного отчета нажмите кнопку "Предварительный просмотр" на панели инструментов. 

Полезные возможности работы с данными

Во вкладке "Данные" можно размещать не только компоненты доступа к данным. С помощью объектов "Текст" и "Рисование" здесь можно размещать поясняющие надписи и рисовать простые диаграммы, как показано на рисунке:

Пример описания данных

20 ноября 2024

Локализация и смена языков в FastReport VCL

FastReport VCL поддерживает 40 языков для локализации интерфейса и позволяет изменять язык на лету через меню или код, без перекомпиляции.
1 ноября 2024

Новые возможности редактора отчетов FastReport VCL

Рассматриваем новые возможности редактора отчетов: выносные линии, подсветка пересекающихся объектов, обновлённые деревья отчетов и данных.
30 октября 2024

Использование стилей при создании отчетов в FastReport VCL

В статье подробно рассматривается одна из новых возможностей FastReport VCL – применение стилей и страниц стилей.