Fast Reports — это мощный инструмент для создания отчетов в Delphi, однако пользователи часто испытывают трудности при работе с отчетами, не связанными с базой данных. В этом материале мы рассмотрим, как создавать сложные отчеты без базы данных в Fast Reports, используя пример отчета о серийных портах и USB-устройствах.
Использование встроенных таблиц или SQL-серверов
Одним из способов подготовки данных для отчета является использование встроенных таблиц или SQL-серверов. Хотя это может показаться излишним для отчета о системной информации, списке серийных портов и USB-устройств, а также сводной информации, встроенные таблицы или SQL-серверы могут упростить процесс подготовки данных.
Например, вы можете использовать компоненты встроенных таблиц, такие как TkbmMemTable или TdxMemTable, чтобы создать в памяти таблицу данных для отчета. После этого вы можете связать эту встроенную таблицу с компонентом TfrDataSet в Fast Reports и заполнить таблицу данными перед запуском отчета.
Использование переменных отчета
Другой подход заключается в использовании переменных отчета для хранения данных, которые не подходят для табличного представления. Вы можете определить переменные отчета в дизайнере отчета или программным способом, как показано в ответе @jrodenhi.
После определения переменных вы можете заполнить их данными в коде Delphi и использовать в отчете. Например, чтобы заполнить переменную с именем MyVariable значением 'This is a new value!', вы можете использовать следующий код:
procedure TForm1.frxReport1GetValue(const VarName: string; var Value: Variant);
begin
if VarName = 'MyVariable' then
Value := 'This is a new value!';
end;
Доступ к компонентам отчета из кода Delphi
Еще один способ работы с данными в отчете —直接访问报表组件。您可以使用TfrxReport.FindObject方法在代码中查找报表组件,然后通过强制转换访问组件实例。例如,要修改名为Memo1的TfrxMemoView组件的文本,您可以使用以下代码:
var
Component: TfrxComponent;
begin
Component := frxReport1.FindObject('Memo1');
if Component is TfrxMemoView then
TfrxMemoView(Component).Memo.Text := 'New text';
end;
Пример отчета о серийных портах и USB-устройствах
Теперь, когда мы рассмотрели различные подходы к созданию отчетов без базы данных в Fast Reports, давайте создадим отчет о серийных портах и USB-устройствах, используя переменные отчета и доступ к компонентам отчета из кода Delphi.
Создайте новый отчет в Fast Reports и добавьте четыре табличных компонента (TfrxTableView) для отображения списков серийных портов и USB-устройств, а также один мемо-компонент (TfrxMemoView) для сводной информации.
Определите переменные отчета для хранения системной информации, такой как операционная система, и заполните их данными в коде Delphi.
Используйте TfrxReport.FindObject для доступа к компонентам отчета из кода Delphi и заполните табличные компоненты данными о серийных портах и USB-устройствах.
Заполните мемо-компонент сводной информацией, используя переменные отчета и данные из табличных компонентов.
Пример кода для заполнения данных в отчете:
procedure TForm1.FillReportData;
var
Component: TfrxComponent;
i: Integer;
begin
// Заполнение переменных отчета данными
frxReport1.Variables['OSInfo'] := 'Windows ' + TPlatform.Version;
// Доступ к компонентам отчета и заполнение данными
Component := frxReport1.FindObject('tblSerialPorts');
if Component is TfrxTableView then
begin
with TfrxTableView(Component) do
begin
ClearData;
for i := 0 to TSerial.Ports.Count - 1 do
begin
AddNew;
Fields['PortName'].Value := TSerial.Ports[i].Name;
Fields['PortDesc'].Value := TSerial.Ports[i].Description;
end;
end;
end;
Component := frxReport1.FindObject('tblUSBDevices');
if Component is TfrxTableView then
begin
with TfrxTableView(Component) do
begin
ClearData;
for i := 0 to TUSB Devices.Count - 1 do
begin
AddNew;
Fields['DeviceName'].Value := TUSB Devices[i].Name;
Fields['DeviceDesc'].Value := TUSB Devices[i].Description;
end;
end;
end;
Component := frxReport1.FindObject('MemoSummary');
if Component is TfrxMemoView then
TfrxMemoView(Component).Memo.Text := 'Summary information based on variables and table data';
end;
Используя эти подходы, вы можете создавать сложные отчеты без базы данных в Fast Reports, даже если данные не подходят для табличного представления. Не бойтесь экспериментировать с различными методами и комбинировать их, чтобы добиться наилучших результатов.
Эта статья описывает, как создавать сложные отчеты в Fast Reports без использования базы данных, с помощью встроенных таблиц, переменных отчета и доступа к компонентам отчета из кода Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS