彩票走势图

FastReport VCL/FMX示例:Delphi/Lazarus中的两级数据(主-从)报表

翻译|使用教程|编辑:张莹心|2021-11-04 13:59:09.280|阅读 266 次

概述: FastReport多级报告的结构可以比作一棵树——树干、大树枝、从它们长出的细树枝,等等直到叶子——或者与公司结构进行比较:部门、分部、员工。它们通常被称为主从或主从,由几个表组成。一张表包含主要实体的列表;与第一个表绑定的另一个表包含一个从属实体列表,其中包含对第一个表的引用,指定第二个表中的某个实体从属于第一个表中的哪个实体,依此类推。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

FastReport VCL是用于 Delphi、C++ Builder、RAD Studio 和 Lazarus 的报告和文档创建 VCL 库。它提供了可视化模板设计器,可以访问 30 多种格式,并可以部署到云、网站、电子邮件和打印中。

立即点击下载FastReport VCL 最新版

在这篇文章中,想告诉你 FastReport 如此强大的多级报告。他们的结构可以比作一棵树——树干、大树枝、从它们长出的细树枝,等等直到叶子——或者与公司结构进行比较:部门、分部、员工。它们通常被称为主从或主从,由几个表组成。一张表包含主要实体的列表;与第一个表绑定的另一个表包含一个从属实体列表,其中包含对第一个表的引用,指定第二个表中的某个实体从属于第一个表中的哪个实体,依此类推。

FastReport 最多支持六层嵌套(通过使用 Nested 报表对象可能会更多,但这将在后面描述)。在实际应用中,很少需要打印具有大量数据嵌套的报告;通常,1-3 级就足够了。

构建主从报表的示例

让我们考虑创建一个两级报告。它将包含来自 Customer 和 Orders 表的数据。第一个表是客户列表;第二个是客户的订单清单。这些表包含以下类型的数据:

顾客:

CustNo Company
1221 Kauai Dive Shoppe
1231 Unisco
1351 Sight Diver

订单:

订单无客户无销售日期

1003 1351 12.04.1988
1023 1221 01.07.1988
1052 1351 06.01.1989
1055 1351 04.02.1989
1062
1981 2060 139 1989

如您所见,第二个表包含所有公司发出的所有订单的列表。要获取特定公司的订单列表,应从表中选择数据,其中字段 CustNo 等于所选公司的编号。使用这些数据构建的报告将如下所示:

1221       考艾岛潜水专柜
    1023        1988年7月1日
    1123        1993年8月24日
1231       联合船代
    1060        1989年2月28日
1351       视觉潜水员
    1003        1988年4月12日
    1052        1989年6月1日
    1055        1989年2月4日

现在我们开始做报告。我们在 Delphi 中创建了一个新项目,并为表单设置了两个 TTable 组件、一个 TDataSource 组件、两个 TfrxDBDataSet 组件和一个 TfrxReport 组件。

FastReport VCL/FMX示例:Delphi/Lazarus中的两级数据(主-从)报表

将数据从基础连接到报表对象

我们设置组件如下:

Table1 :
 DatabaseName =  'DBDEMOS'
 TableName =  'Customer.db'
 Table2 :
 DatabaseName =  'DBDEMOS'
 TableName =  'Orders.db'
 DataSource1 : DataSet = Table1 frxDBDataSet1 : DataSet = Table1 UserName = 'Customers' frxDBDataSet2 : DataSet = Table2 UserName = '订单' 
在报表设计器中,我们在 Report|Data... 窗口中连接我们的数据源。

FastReport VCL/FMX示例:Delphi/Lazarus中的两级数据(主-从)报表
将第一级数据(主)和第二级数据(详细信息)带添加到页面。从数据面板(在右侧),我们将表字段拉到各自的波段(主和细节)。它看起来像这样:

FastReport VCL/FMX示例:Delphi/Lazarus中的两级数据(主-从)报表
注意 - 第一级数据带必须位于上方!如果位于2级数据带以下,FastReport会在开始上报时提示错误。

启动后,我们将看到每个客户的订单列表都是相同的,并且包含订单表中的所有记录。这是因为我们没有打开 Orders 表中的记录过滤。

让我们回到我们的数据源。对于表 2 组件,我们设置 MasterSource = DataSource1 属性。因此,我们设置了主从连接。现在我们必须在下级源中设置记录过滤条件。为此,请调用 Table 2 组件中 MasterFields 属性的编辑器:

FastReport VCL/FMX示例:Delphi/Lazarus中的两级数据(主-从)报表
我们必须连接两个源中的两个 CustNo 字段。为此,请在上面的列表中选择 CustNo 索引,选择字段并单击添加按钮。一堆字段将被重新定位到较低的窗口中。之后,使用 ОК 按钮关闭编辑器。

当报表启动时,FastReport 将执行以下操作。它将从主表 (Customer) 中选择下一个记录并将过滤器设置为从属表 (Orders)。只有满足条件 Orders.CustNo = Customer.CustNo 的录音才会留在表中。也就是说,对于每个客户,只会显示该客户的订单:

FastReport VCL/FMX示例:Delphi/Lazarus中的两级数据(主-从)报表
同样,您最多可以构建具有六个数据级别的报告。


如果您对 FastReport 报表工具感兴趣,欢迎加入 FastReport QQ 交流群:599154289


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP