В предыдущей статье про работу с графиками и диаграммами мы уже ознакомились с бизнес-графикой и штрих-кодами. Настало время усложнить задачу и поработать с различными источниками данных. Большинство отчетов, как правило, основано на данных из БД. Для доступа к таким данным 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 с источником данных, нужно настроить один из вариантов:
Оба способа подключения равноценны, просто первый позволяет обойтись без компонента TDataSource.
А для того, чтобы компонент и связанные с ним данные стали доступны в отчёте, нужно явно указать, какие источники данных используются в отчёте. Выбираем в дизайнере FastReport пункт меню "Отчет/Данные..." и в открывшемся окне отмечаем галочками нужные источники.
Компонент TfrxDBFTable предназначен для организации доступа к таблице БД формата .dbf и имеет следующие свойства:
Назначения свойств компонента аналогичны свойствам TDbf в Lazarus. Для подключения компонента к таблице БД достаточно заполнить свойство TableName. Открытие таблицы осуществляется с помощью установки Active := True.
Редактор свойства FieldAliases позволяет выбрать поля, которые будут доступны при обращении к таблице, и задать пользовательское имя для каждого поля и всей таблице в целом.
Редактор свойства MasterFields используется для создания master-detail связей между двумя таблицами. Для связывания двух таблиц отношением master-detail у подчиненной таблицы надо указать в свойстве Master основную таблицу и вызвать редактор свойства MasterFields. Если у таблицы есть вторичные индексы, которые необходимо использовать, настройте предварительно свойство IndexName.
Этот редактор дает возможность визуально связать поля master и detail наборов данных. Когда наборы связаны друг с другом отношением Master-Detail, то при перемещении по master набору содержимое detail набора фильтруется таким образом, чтобы в нем содержались только записи, имеющие отношение к текущей записи master набора.
Для связи полей наборов выделите поле из списка слева (detail набор), затем поле из списка справа (master набор), и нажмите кнопку "Добавить". При этом связка полей переместится в нижний список. Чтобы очистить нижний список, воспользуйтесь кнопкой "Очистить". Важно отметить, что связываемые поля должны иметь одинаковый тип и быть ключевыми.
Но в самом Lazarus эти свойства не работают с выборкой (сортировкой и фильтрацией Master-Detail) для компонентов TDbf, а так как мы используем этот компонент, соответственно она не работает и у нас.
Компонент TfrxLazSqliteQuery предназначен для выполнения SQL-запросов к базе данных средствами SqLite3 и имеет следующие свойства:
Свойство SQL имеет свой редактор для заполнения SQL-запроса:
Свойство Params также имеет свой редактор. Оно доступно, если текст запроса содержит параметры.
Параметр может быть двух типов: назначаемый из master-источника либо имеющий конкретное значение, где в качестве значения может выступать как константа, так и ссылка на переменную или свойство объекта.
В случае, когда параметр берется из master-набора данных, необходимо настроить свойство TfrxLazSqliteQuery.Master. Набор данных должен содержать поле с именем, совпадающим с именем параметра. При этом указывать тип параметра и его значение необязательно.
Компонент TfrxLazSqliteDataBase служит для подключения к базе данных SqLite3. Его назначение аналогично совмещенным компонентам TSQLite3Connection и TSqlTransaction, а также он имеет следующие свойства:
Рассмотрим построение простого отчета, содержащего компоненты доступа к данным, где в качестве примера будем использовать демонстрационную БД из проекта LDemo.
Для начала создадим проект, с помощью которого будем проводить эксперименты. Делаем новый проект в Lazarus и размещаем на форме компоненты TfrxReport, TfrxDesigner, TfrxDialogControls, TfrxDBDataset, TDbf.
Настройте подключение к базе данных. Для этого найдите у 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 во время исполнения. Для построения отчета проделайте следующие шаги:
Для просмотра полученного отчета нажмите кнопку "Предварительный просмотр" на панели инструментов.
Во вкладке "Данные" можно размещать не только компоненты доступа к данным. С помощью объектов "Текст" и "Рисование" здесь можно размещать поясняющие надписи и рисовать простые диаграммы, как показано на рисунке: