我正试图在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"字段
- 为"子详细信息"标注栏创建事件:
- 预览打印:
- 获取当前制造商ID并将其作为参数插入产品TQuery
- 激活产品TQuery
- AfterPrint:
- 停用产品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查询之间的参数。如果指定了指向数据集的查询所需的参数,则查询将查找共享该名称的字段并与其匹配。
我希望这对以后的人有所帮助。