无法在C++Builder 6中创建描述一对多关系的QuickReport



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

我试图以两种方式编写这份报告,但收效甚微。我在下面详细介绍了一个尝试,因为它似乎是最有希望的。我是QuickReport的新手,不知道还能在哪里寻求帮助。我在网上找到的文档http://www.quickreport.co.uk/是最小的,除了极其简单的报告之外,没有充分解释如何使用该产品。

报告的格式应为:

  • 制造商1
    • 产品
    • 另一种产品
    • 另一种产品
  • 制造商2
    • 我的产品
    • 此产品

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

  • 创建一个TQuery,通过其ID获取制造商的集合
  • 创建详图标注栏
  • 将报告的数据集设置为制造商TQuery
  • 在与"制造商TQuery"one_answers"制造商名称"字段关联的"详细信息"标注栏上创建"制造商名称QRDBText"字段
  • 创建一个TQuery,该TQuery通过作为TQuery参数的制造商ID获取产品集合
  • 创建一个子细节标注栏
  • 将"子详细信息"标注栏的数据集设置为"产品TQuery">
  • 在与"产品TQuery"one_answers"产品名称"字段关联的"子详细信息"标注栏上创建"产品名称QRDBText"字段
  • 为"子详细信息"标注栏创建事件:
    • 预览打印:
      1. 获取当前制造商ID并将其作为参数插入产品TQuery
      2. 激活产品TQuery
    • AfterPrint:
      1. 停用产品TQuery

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

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

解决方案:

  • 创建一个TQuery,通过其ID获取制造商的集合
  • 创建详图标注栏
  • 将报告的数据集设置为制造商TQuery
  • 在与"制造商TQuery"one_answers"制造商名称"字段关联的"详细信息"标注栏上创建"制造商名称QRDBText"字段
  • 创建一个TQuery,该TQuery通过作为TQuery参数的制造商ID获取产品集合
  • 创建一个子细节标注栏
  • 将"子详细信息"标注栏的数据集设置为"产品TQuery">
  • 在与"产品TQuery"one_answers"产品名称"字段关联的"子详细信息"标注栏上创建"产品名称QRDBText"字段
  • 全新将Detail标注栏的LinkBand属性设置为Sub-Detail标注栏
  • 全新打印/预览等之前。报表,在代码中将每个查询的Active属性设置为True
  • 全新打印/预览等之后。报表,在代码中将每个查询的Active属性设置为False

真正让我失望的是出现了一个"魔术",在这个魔术中,您不必指定数据源和Products查询之间的参数。如果指定了指向数据集的查询所需的参数,则查询将查找共享该名称的字段并与其匹配。

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

最新更新