我有一个针对dev数据库设计的Crystal Report。当我将它加载到实时系统时,我需要它来运行一个不同但等效的数据库。通常我只是通过C#中的一些代码运行报告,这些代码在报告和子报告上设置连接信息,参数和调用VerifyDatabase,这一切都运行良好。
在一个特定的报告中,这不起作用,似乎没有验证任何内容,并且报告因其中一个子报告中的错误“字段名称未知”而崩溃。使用此报告,如果我在Crystal Reports应用程序中针对实时数据库手动验证它,那么一切正常。
所以问题是,除了设置连接信息,参数和调用VerifyDatabase方法之外,Crystal应用程序中的验证数据库功能有什么不同吗?
编辑:有关我尝试的更多信息
错误仍然存在。
答案 0 :(得分:1)
“字段名称未知”错误通常表示您已在报表上放置字段或在公式(等)中使用该字段,但该字段在数据库中不再存在。据我了解,调用VerifyDatabase可以更新报表中视图/表的字段列表,如果它们不再存在,可以从报表中删除字段,但无法修复依赖于缺少字段的公式或子报表链接。 / p>
在我看来,在部署报告之前确保数据库同步(验证)是一种更好的做法,这样您就不必每次都调用VerifyDatabase。
所有这一切,我不明白为什么它在手动验证后会起作用,但在调用VerifyDatabase后却没有。有时水晶很奇怪。您可以尝试重新创建子报表(如果它很简单),或者删除它并重新绑定它以试图欺骗错误消失。
答案 1 :(得分:1)
这听起来像两个版本的Crystal及其功能之间的混淆。 dotNET 2008附带的版本是Crystal Reports Basic for VS2008,伪装成Crystal 10.5(不作为独立产品存在)。但是,如果您指的是在Visual Studio IDE之外自己开发的独立报表,那么这将是Crystal的不同版本,并且在功能上存在一些差异。我说这个报告是在不同版本的Crystal中创建的,而且代码中的Verify都遇到了10.5无法识别的功能。 如果您有一个独立版本的Crystal(需要是Crystal Reports 2008或早期版本的Developer Edition),请使用this确保您在应用程序中使用相同的Crystal版本在报告开发中。
答案 2 :(得分:0)
你可以验证一下:
在调试器运行时,如果更改了类型化数据集中的架构并运行了验证数据库,则即使两个架构存在差异,消息框也会始终显示“数据库最新”。
我花了一些时间才弄明白,因为调试器处于活动状态时未禁用验证数据库操作。