错误'无法在指定位置找到子报表。请验证子报表是否已发布且名称是否正确“

时间:2013-07-08 19:40:07

标签: sql-server sql-server-2008 reporting-services

我在SSRS中创建报告时遇到上述错误。我试图从2个数据库中获取2个数据集,我这样做是通过创建一个包含来自Dataset1的数据的主报表,以及一个包含另一个数据集的子报表。

当我创建同一数据集的子报表时,错误消失了。关于我可能做错了什么的任何想法?

见下面的截图:

Same dataset

same dataset

执行以下操作时会发生错误:

enter image description here

enter image description here

10 个答案:

答案 0 :(得分:69)

一般来说,从我所看到的SSRS有一个最坏的错误,知道什么是错误。一般来说,我已经看过这个,罪魁祸首是三件事之一:

  1. 当您对子报表进行更改并且报表数据不是最新的时,需要重建项目。
  2. 报告数据损坏了一些如何以及需要删除的内容(查看您的文件位置并删除* .rdl.data文件。)
  3. 您传入的参数不正确或格式错误。所有子报表都具有必须具有参数的参数,或者它们将不会运行并给出错误等同于设置为空值的实例的对象。
  4. 当您插入'子报告'您可以右键单击并选择'属性'。它有一个'参数'你需要选择侧面板,你需要添加' (按正确的顺序和类型划分每个人)a'姓名' (报告的参数名称)和匹配的'值'从目前的报告传入其中。

    EG:所以,如果我有一个子报告,希望客户在其上显示人口统计信息,并且我有一个主报告,其中包含每行每个客户ID的业务数据行。如果我的子报告采用了' CustomerID'参数我会为名称选择,然后选择' [Customer_ID]'从当前的数据集传递给它。

    你必须记住,你必须添加'子报告所需的每个单独参数。

答案 1 :(得分:14)

从项目解决方案文件夹中删除所有 * .rdl.data

答案 2 :(得分:8)

如果您更改了子报表的名称并在预览中收到此错误,则只需在预览模式下单击“刷新”图标。

缓存数据以加快预览速度。子报表以相同的方式处理。

希望这有帮助。

答案 3 :(得分:0)

我刚刚遇到这个错误,当我从主报告中删除子报告然后将其粘贴回去时,我发现它已经消失了 - 去图

答案 4 :(得分:0)

@djangojazz:非常感谢这些技巧。我的答案是#2和#3。 如果有人遇到同样的问题,我会详细说明:

针对同一错误收到了不同的消息:

  1. Visual Studio错误列表:" [rsErrorExecutingSubreport]执行子报告时发生错误' SubOverview' (实例:55iS1):未将对象引用设置为对象的实例。"
  2. 报告:"错误:无法显示子报告。"或"错误:无法在指定位置找到子报告"
  3. 解决方案:

    1. 关于我的子报告中的参数(来自djangojazz的解决方案#3),我错误地将其设置为内部。内部意味着子报表的内部而不是项目。所以它无法通过主报告访问,但SSRS告诉一些完全无关的指向错误的方向。 (对此微软感到羞耻)
    2. 一旦我回到" Hidden" (我不想让用户修改这些参数),问题是一样的。让我们进入第3点
    3. 从djangojazz应用解决方案#2:删除SubOverview.rdl.data(与我的子报告对应的那个)。
    4. 在云上的reportServer上,我删除了报告SubOverview并重新启动了报告的部署以进行更新。就像那样.rdl.data文件也被删除了。
    5. 希望这有助于某人。

答案 5 :(得分:0)

就我而言,我的子报表中出现了VB脚本错误。 我试图访问一个变量,该变量只能从报表标题中访问(当前页面编号和总页面编号)。

解决了这个错误之后,错误消失了。

也许这些信息有助于某人。

答案 6 :(得分:0)

刚出现这个问题 - 奇怪的是它是由于子报表维度 - 它太宽而不适合主报表中的占位符,因此它会抛出这个完全没有用的错误。

答案 7 :(得分:0)

我也一直在处理这个问题。我的问题是因为我在子报表中重命名了数据集,但没有更改表达式中的数据集字段。

例如: 原始数据集名称:dsOriginal 新数据集名称:dsNew

原始表达式:=First(Fields!Field1.Value, "dsOriginal")

新表达式应为:=First(Fields!Field1.Value, "dsNew")

我相信它说找不到子报表的原因是因为子报表定义无效,因此它不会编译它。它使您无法知道可能是什么问题。

希望这对其他有帮助的人有帮助。

答案 8 :(得分:0)

2019年在这里|如果接受的答案无效,或者互联网上的所有答案无效:

我已经弄清了什么是“真正的”问题,并在浪费了数小时之后才提出解决方案,以便向您保证现在可以节省时间。

简而言之:一旦开始在子报表中使用参数,就会出现问题。原因是Visual Studio开始使用比用于生成主报表的rdlc xml文件结构新的文件。

这里无法用语言解释解决方案,所以我制作了一个录像,长度为1:30。

https://www.youtube.com/watch?v=Cwd5yHUq1W0

答案结束。

根据经验,您将面对的主要问题和常见问题以及错误的实际含义和原因:

1-在指定位置找不到子报表。

原因:子报表的文件结构与主报表的文件结构不同,主报表可能在rdlc xml标准版本2008上运行,而子报表在2016版本上运行。一旦您使用“参数” “

2-子报表的数据检索失败

原因:您没有为子报表提供所需的数据/数据集/数据源,而是需要在主报表遇到子报表时向要调用的主报表注入事件侦听器。 有关更多信息,请在此处观看我的完整视频:

3个子报表无法显示

在执行子报表代码或子报表事件侦听器期间发现任何异常以查找问题,运行vs调试模式并观察输出窗口时,就会发生这种情况

答案 9 :(得分:0)

这是自2019年12月以来Adel Mourad回答的后续措施,但有几点警告。我也碰到了这一点,却忘记了设计师的变化。我参加了VS2017,无论出于什么原因,设计师都不见了。不知道如何/何处/为什么/ Windows更新或什么。无论如何,在重新安装设计器之后,我也对运行报告的更新存在问题。

很少有注释来澄清视频中的内容。开头的报告名称空间更改为const pool = mysql.createPool({ host: 'localhost', user: 'root', database:'node-complete', password: 'Pratik@123' }); ,我将其更改回2016

第二,从他的视频来看,但是很小。哪里去除

2008

您只想删除外部的两个<ReportSections> <ReportSection> <Body...> </ReportSection> </ReportSections> ReportSections部分。 ReportSection,因为这是报告的实际内容。

最后,最后一部分是报告参数。您可以保留Leave the body,但保留下面的全部ReportParameters

为什么,我现在只能推测主报表运行的是2008版本名称空间,因此,当它进入试图运行2016命名空间的子报表时,这将导致它阻塞。我敢打赌,建议如果主报告和子报告都在2016年设计的,那会很好。

再次,功劳归功于Adel Mourad对我的回答。

相关问题