Crystal Reports v13.0.2000.0.: 为什么 'where' 子句在子报表中不起作用?
Crystal Reports v13.0.2000.0.: why is 'where' clause not working in subreport?
几个小时以来,我一直在用头撞墙(仍然不是字面意思,但如果找不到解决方案,我会尽快开始)。对我来说,我面临的问题实际上不是问题,不可能是问题,因为我在我正在处理的同一个 Silverlight 项目的另一个菜单中成功地使用了子报表。我什至无法定义它是什么 - 一个问题,一个问题,一个邪恶...... Crystal 报告有时可以......嗯,有趣。包括事实上,我在 CR 工作仅 2 周(仍在工作中学习),情况非常好。无论如何。
首先,我试图基本上为每个文档准备一份报告的两份副本。在报告的命令(通过数据库专家)中,我只有 select * from Documents where {?filter}
。在调用 ExportToDisk() 方法之前,我给出了 C# 中的 where 子句。有一个 <sdk:DataGrid></sdk:DataGrid>
,我从中获取所有标记的行(文档),准确地说是它们的 RowID,创建一个 'in ()' 子句,将其提供给报告的 ?filter 参数,它的工作方式如下我期待。
我在网上搜索,我能找到的最好的是有一个 'dummy' 主报告,其部分分为两部分,并将我的报告作为子报告插入到这些部分中。到目前为止,一切都很好。我做了 'linking of params'(更改子报表链接...选项),就像我在其他菜单中所做的那样......没有数据。只有标签显示。我检查了 3 个要报告的文档,我总共得到 3 * 2 = 6 页,但所有的字段都是空的。
一个多小时测试后的最终结论:如果我有一个报告并通过数据库专家将其命令设置为select * from Documents where RowID = '<someGuid>'
或select * from Documents where {?filter}
,然后我总是得到文档的所有字段(如客户、代码等)——在第一种情况下,特定文档只有一页,在第二种情况下——每个文档一页。
如果我尝试作为子报表和来自网格的 select 2 个文档,我会得到四个 'empty' 页 - 每个文档两个。不用说,如果子报表的命令是:select * from Document where {?filter}
并且我 link 主报表的过滤器,它不起作用。
令我惊讶的是,它似乎有效!...在一个特定的用例中:如果我将子报表的命令设置为 select * from Documents where 1 = 1
。在这种情况下,我得到 table 中的 1000 个文档的 2000 页 - 所有字段都填充了数据。
这就是我的'problem'!?太奇怪了,我什至不知道它应该被称为 'problem' 还是别的什么。任何帮助将不胜感激。
编辑:总结一下: 我有一个主 'dummy' 报告,其命令设置为 select * from Documents where {?filter}
。我将其详细信息部分分为两部分,并在每个部分中插入一个子报表。子报表的命令是select * from Documents where doc_RowID = '{?filter}'
,其中RowID应该是通过linking来自主报表。我在子报表中尝试过:select * from Documents where doc_RowID = '<someGuid>'
并且我再次获得仅带有标签的页面。它 'works' 如果我在子报表中有 where 1 = 1。
在主报表中,我什至尝试按 doc_RowID 列对文档进行分组,并将子报表放在 GroupHeader 和 GroupFooter 部分。没有成功。
从今天(2016 年 12 月 21 日)开始编辑: 我尝试将子报表的命令设置为按左连接的某些字段过滤数据 table docItems 为 di,显示购买的项目:where di.Price > 5
。当我 运行 在 SQL Server Management Studio 中使用此 where 子句进行查询时,我在 3 个文档中得到 7 条记录的结果。在报告中,我得到 260 页,这意味着它 returns CR 中的 130 个文档。 WTF 在这里进行……:O
edit3:客户的SQL服务器宕机了,所以我决定继续在我们的服务器上测试。问题消失了。这听起来像是个好消息,但最终,我将不得不将我的工作部署到他们的服务器上...
我找到了这方面的魔法。我称它为 'Magic',因为我既不知道它在这种情况下究竟有何帮助,也不知道下次我遇到类似问题时它是否有帮助。我希望它不会发生。
阅读 this thread - 我在那里找到了解决方案。以防万一它死了,我会post这里:
Open the report in the CR XI designer.
Select Database -> Set Datasource Location.
Set Datasource Location window will appear and in the replace with section connect to the database and replace these tables with the tables in the current datasource by clicking the update button.
After updating close the Set Datasource Location window.
Go to 'Database menu' and Click 'Verify Database' and click on ’OK’.
Preview the report and the save the report.
几个小时以来,我一直在用头撞墙(仍然不是字面意思,但如果找不到解决方案,我会尽快开始)。对我来说,我面临的问题实际上不是问题,不可能是问题,因为我在我正在处理的同一个 Silverlight 项目的另一个菜单中成功地使用了子报表。我什至无法定义它是什么 - 一个问题,一个问题,一个邪恶...... Crystal 报告有时可以......嗯,有趣。包括事实上,我在 CR 工作仅 2 周(仍在工作中学习),情况非常好。无论如何。
首先,我试图基本上为每个文档准备一份报告的两份副本。在报告的命令(通过数据库专家)中,我只有 select * from Documents where {?filter}
。在调用 ExportToDisk() 方法之前,我给出了 C# 中的 where 子句。有一个 <sdk:DataGrid></sdk:DataGrid>
,我从中获取所有标记的行(文档),准确地说是它们的 RowID,创建一个 'in ()' 子句,将其提供给报告的 ?filter 参数,它的工作方式如下我期待。
我在网上搜索,我能找到的最好的是有一个 'dummy' 主报告,其部分分为两部分,并将我的报告作为子报告插入到这些部分中。到目前为止,一切都很好。我做了 'linking of params'(更改子报表链接...选项),就像我在其他菜单中所做的那样......没有数据。只有标签显示。我检查了 3 个要报告的文档,我总共得到 3 * 2 = 6 页,但所有的字段都是空的。
一个多小时测试后的最终结论:如果我有一个报告并通过数据库专家将其命令设置为select * from Documents where RowID = '<someGuid>'
或select * from Documents where {?filter}
,然后我总是得到文档的所有字段(如客户、代码等)——在第一种情况下,特定文档只有一页,在第二种情况下——每个文档一页。
如果我尝试作为子报表和来自网格的 select 2 个文档,我会得到四个 'empty' 页 - 每个文档两个。不用说,如果子报表的命令是:select * from Document where {?filter}
并且我 link 主报表的过滤器,它不起作用。
令我惊讶的是,它似乎有效!...在一个特定的用例中:如果我将子报表的命令设置为 select * from Documents where 1 = 1
。在这种情况下,我得到 table 中的 1000 个文档的 2000 页 - 所有字段都填充了数据。
这就是我的'problem'!?太奇怪了,我什至不知道它应该被称为 'problem' 还是别的什么。任何帮助将不胜感激。
编辑:总结一下: 我有一个主 'dummy' 报告,其命令设置为 select * from Documents where {?filter}
。我将其详细信息部分分为两部分,并在每个部分中插入一个子报表。子报表的命令是select * from Documents where doc_RowID = '{?filter}'
,其中RowID应该是通过linking来自主报表。我在子报表中尝试过:select * from Documents where doc_RowID = '<someGuid>'
并且我再次获得仅带有标签的页面。它 'works' 如果我在子报表中有 where 1 = 1。
在主报表中,我什至尝试按 doc_RowID 列对文档进行分组,并将子报表放在 GroupHeader 和 GroupFooter 部分。没有成功。
从今天(2016 年 12 月 21 日)开始编辑: 我尝试将子报表的命令设置为按左连接的某些字段过滤数据 table docItems 为 di,显示购买的项目:where di.Price > 5
。当我 运行 在 SQL Server Management Studio 中使用此 where 子句进行查询时,我在 3 个文档中得到 7 条记录的结果。在报告中,我得到 260 页,这意味着它 returns CR 中的 130 个文档。 WTF 在这里进行……:O
edit3:客户的SQL服务器宕机了,所以我决定继续在我们的服务器上测试。问题消失了。这听起来像是个好消息,但最终,我将不得不将我的工作部署到他们的服务器上...
我找到了这方面的魔法。我称它为 'Magic',因为我既不知道它在这种情况下究竟有何帮助,也不知道下次我遇到类似问题时它是否有帮助。我希望它不会发生。
阅读 this thread - 我在那里找到了解决方案。以防万一它死了,我会post这里:
Open the report in the CR XI designer.
Select Database -> Set Datasource Location.
Set Datasource Location window will appear and in the replace with section connect to the database and replace these tables with the tables in the current datasource by clicking the update button.
After updating close the Set Datasource Location window.
Go to 'Database menu' and Click 'Verify Database' and click on ’OK’.
Preview the report and the save the report.