Crystal Reports v13.0.2000.0。:为什么'where'子句在子报表中不起作用?

时间:2016-12-20 15:55:38

标签: crystal-reports where-clause subreport

几个小时以来,我一直把头撞在墙上(仍然不是字面意思,但如果我找不到解决方案,我会尽快开始)。对我来说,我实际面临的问题实际上不是问题,也不是问题,因为我在同一个Silverlight项目的另一个菜单中成功使用子报表,我正在处理。我甚至无法定义它是什么 - 一个问题,一个问题,一个邪恶...... Crystal Reports有时可能......好吧,有趣。包括这样一个事实,我已经与CR一起工作了2周(仍然在工作时学习),情况非常好。反正。

首先,我试图基本上每个文档有两份报告副本。在报告的命令(通过数据库专家)中,我只有select * from Documents where {?filter}。在调用ExportToDisk()方法之前,我从C#中给出where子句。有一个<sdk:DataGrid></sdk:DataGrid>,我从中获取所有标记的行(docs),准确地说它们的RowID,创建一个'in()'子句,将它提供给报告的?filter param并且它正在工作我期待。

我在网上搜索,我能找到的最好的是有一个'虚拟'主报告,其部分分为两部分,并将我的报告作为子报告插入这些部分。到现在为止还挺好。我做了'链接参数'(更改子报表链接...选项),就像我在其他菜单中所做的那样......没有数据。只显示标签。我检查了3个要报告的文档,我总共有3 * 2 = 6页,但都是空字段。

经过一个多小时的测试后的最终结论:如果我有一份报告并通过数据库专家将其设置为select * from Documents where RowID = '<someGuid>'select * from Documents where {?filter},那么我总是得到所有文档的字段(如客户,代码等) - 在第一种情况下,只有一个页面用于特定文档,在第二种情况下 - 每个文档一页。 如果我尝试作为子报表并从网格中选择2个文档,我会得到四个“空”页面 - 每个文档两个。不用说,如果子报表的命令是:select * from Document where {?filter}并且我将过滤器与主报表链接,则它无效。

令我惊讶的是,它似乎正在工作!...在一个特定的用例中:如果我将子报表的命令设置为select * from Documents where 1 = 1。在这种情况下,我会在表格中找到1000个文档的2000页 - 所有字段都填充了数据。

所以这是我的'问题'!?这太奇怪了,我甚至不知道它应该被称为“问题”还是别的什么。任何帮助将不胜感激。

编辑:总结一下:我有一个主要的'虚拟'报告,其命令设置为select * from Documents where {?filter}。我将其“细节”部分分为两部分,并在每个部分中插入一个子报表。子报告的命令是select * from Documents where doc_RowID = '{?filter}',其中RowID应该通过链接来自主报告。我在子报告中尝试了select * from Documents where doc_RowID = '<someGuid>',然后我再次获得了带有标签的页面。如果我在子报告中有1 = 1,那么它“有效”。

在主报告中,我甚至尝试按doc_RowID列对文档进行分组,并将子报表放在GroupHeader和GroupFooter部分中。没有成功。

从今天开始编辑(2016年12月21日):我尝试设置子报表的命令,按左连接表docItems的某个字段过滤数据为di,显示已购买的项目:where di.Price > 5。当我在SQL Server Management Studio中使用此where子句运行查询时,我在3个文档中得到7条记录的结果。在报告中,我得到260页,这意味着它在CR中返回130个文档。 WTF正在这里......:O

edit3:客户的SQL服务器已关闭,因此我决定继续在我们的服务器上进行测试。问题消失了。这可能听起来像个好消息,但最终,我必须将我的工作部署到他们的服务器......

1 个答案:

答案 0 :(得分:0)

我为此找到了魔法。我把它称为'魔术',因为我不知道它在这种情况下究竟有多大帮助,下次我遇到类似的问题也不会有所帮助。我希望它不会发生。

阅读this thread - 在那里我找到了解决方案。万一它会死了,我会在这里发布:

  
      
  1. 在CR XI设计器中打开报告。

  2.   
  3. 选择数据库 - &gt;设置数据源位置。

  4.   
  5. 将显示“设置数据源位置”窗口,并在“替换为”部分中连接到数据库,并通过单击“更新”按钮将这些表替换为当前数据源中的表。

  6.   
  7. 更新后关闭“设置数据源位置”窗口。

  8.   
  9. 转到“数据库菜单”并点击“验证数据库”,然后点击“确定”。

  10.   
  11. 预览报告并保存报告。

  12.   
相关问题