【问题标题】:Unable to create a QuickReport portraying a one-to-many relationship in C++ Builder 6无法在 C++ Builder 6 中创建描绘一对多关系的 QuickReport
【发布时间】:2014-03-14 04:48:43
【问题描述】:

我正在尝试使用 C++ Builder 6 中的 QuickReport 创建报告,但无法生成我需要的结果。

我尝试以两种方式创建此报告,但取得了一定的成功。我在下面详细介绍了一种尝试,因为它似乎是最有希望的。我是 QuickReport 的新手,不知道在哪里寻求帮助。我在http://www.quickreport.co.uk/ 上在线找到的文档很少,除了极其简单的报告之外,并没有充分解释如何使用该产品。

报告的格式应如下:

  • 制造商 1
    • 产品
    • 另一种产品
    • 又一个产品
  • 制造商 2
    • 我的产品
    • 本产品

尝试 1:分离制造商和产品数据的两个查询

  • 创建一个 TQuery,通过 ID 获取制造商的集合。
  • 创建详细信息带区。
  • 将报表的 DataSet 设置为 Manufacturer TQuery。
  • 在与制造商 TQuery 和制造商名称字段关联的详细信息带上创建制造商名称 QRDBText 字段。
  • 创建一个 TQuery,通过制造商 ID 获取产品集合,制造商 ID 是 TQuery 的一个参数。
  • 创建一个子细节带。
  • 将 Sub Detail 带的 DataSet 设置为 Product TQuery。
  • 在与产品 TQuery 和产品名称字段关联的子详细信息带上创建产品名称 QRDBText 字段。
  • 为 Sub Detail 带创建事件:
    • 打印前:
      1. 获取当前制造商 ID 并将其作为参数插入到 Product TQuery
      2. 激活产品 TQuery
    • 印后:
      1. 停用产品 TQuery

结果:这几乎可以满足我的要求。它正确显示每个制造商,但是它只显示每个制造商的第一个产品。我不确定我是否错误地期望 Sub Detail 带像 Detail 带那样迭代结果,或者我是否缺少其他一些使其工作的必要步骤。我也考虑过使用 Loop 或 Child 乐队,但似乎都没有提供我期望的功能。同样,我似乎根本找不到合适的文档来解释 QuickReport。

最后,我无法确定我是否期待 QuickReport 不提供的功能,或者我认为这一切都错了。

【问题讨论】:

    标签: c++builder-6 quickreports


    【解决方案1】:

    解决办法:

    • 创建一个通过 ID 获取制造商集合的 TQuery。
    • 创建详细信息带区。
    • 将报表的 DataSet 设置为 Manufacturer TQuery。
    • 在与制造商 TQuery 和制造商名称字段关联的详细信息带上创建制造商名称 QRDBText 字段。
    • 创建一个 TQuery,通过制造商 ID 获取产品集合,制造商 ID 是 TQuery 的一个参数。
    • 创建一个子细节带。
    • 将 Sub Detail 带的 DataSet 设置为 Product TQuery。
    • 在与产品 TQuery 和产品名称字段关联的子详细信息带上创建产品名称 QRDBText 字段。
    • 新功能!将 Detail 带区的 LinkBand 属性设置为 Sub Detail 带区。
    • 新!在打印/预览/等之前。报告中,在代码中将每个查询的 Active 属性设置为 True。
    • 新!在打印/预览/等之后。报告中,在代码中将每个查询的 Active 属性设置为 False。

    真正让我失望的部分是发生的“魔术”,您无需指定数据源和产品查询之间的参数。看来,如果您指定指向数据集的查询所需的参数,则查询将查找共享该名称的字段并匹配它们。

    我希望这对以后的人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多