前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FastReport VCL/FMX使用教程:Delphi/Lazarus中的两级数据(主-从)报表

FastReport VCL/FMX使用教程:Delphi/Lazarus中的两级数据(主-从)报表

作者头像
玖柒的小窝
修改2021-11-05 14:48:59
1.8K0
修改2021-11-05 14:48:59
举报
文章被收录于专栏:各类技术文章~各类技术文章~

在这篇文章中,想告诉你 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中的两级数据(主-从)报表
FastReport VCL/FMX示例:Delphi/Lazarus中的两级数据(主-从)报表

8

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

我们设置组件如下: 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中的两级数据(主-从)报表

将第一级数据(主)和第二级数据(详细信息)带添加到页面。从数据面板(在右侧),我们将表字段拉到各自的波段(主和细节)。它看起来像这样:

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

注意 - 第一级数据带必须位于上方!如果位于2级数据带以下,FastReport会在开始上报时提示错误。

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

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

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

我们必须连接两个源中的两个 CustNo 字段。为此,请在上面的列表中选择 CustNo 索引,选择字段并单击添加按钮。一堆字段将被重新定位到较低的窗口中。之后,使用 ОК 按钮关闭编辑器。

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

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

同样,您最多可以构建具有六个数据级别的报告。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 构建主从报表的示例
  • 将数据从基础连接到报表对象
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档