Crystal Reports 9似乎将数据库连接信息保存在报表文件本身中。我有一个改变这种联系的问题。我与一组开发人员一起工作,他们都在同一台服务器上拥有自己的数据库副本。我们使用到数据库的可信连接。当我们需要更改一个水晶报告,我们点击闪电执行报告,水晶不要求登录信息到数据库。实际上,它最终连接到上次保存报表时使用的最后一个数据库。
我们想出了两个解决办法:
。
这些都不是我们所能接受的。有人知道如何从报表文件中删除水晶连接吗?
我们已经尝试过注销数据资源的位置和数据库专家中的所有设置。
更新
我还没有找到适合我情况的解决方案。但是我们最新的解决方法是加载一个水晶报告,在您点击闪电(运行报告对数据库)之前,拔掉您的以太网电缆。然后,当Crystal无法找到数据库时,将以太网电缆插回,它将允许您选择不同的数据库服务器和名称。
发布于 2009-06-09 11:29:02
您可以在特定于用户的位置使用.dsn数据源文件(即每个用户使用相同的路径,但使用不同的物理位置),并将水晶报告指向该位置。例如,在每个人的C驱动器: C:\DSNs\db.dsn上,或者在映射到每个用户不同位置的网络驱动器上。
您可以在MSDN上获得更多关于.dsn文件的信息:http://msdn.microsoft.com/en-us/library/ms710900(VS.85).aspx。
发布于 2009-06-09 11:45:29
我们正在使用这种方式(但是使用sql身份验证):
打开report
您可以禁用域用户对dev数据库的访问,也应该有所帮助:)
发布于 2009-09-01 21:46:59
我可能回答得太晚了,没有机会得到赏金,但无论如何我还是会给出答案的。
如果您是直接运行水晶报告,或者使用水晶企业,那么我能想到的唯一方法就是使用dsn,就像paulmorriss提到的那样。这样做的缺点是,您将使用ODBC,我认为它通常比较慢,并且被认为是过时的。
如果在应用程序中使用此方法,则只需在代码中更改数据库连接设置即可。然后,每个人都可以根据自己的测试数据库开发报告,并且您可以在运行时将其指向生产数据库(假设开发人员数据库是最新的,并且包含与生产数据库相同的字段)。
要做到这一点,您应该能够使用如下函数:
private void SetDBLogonForReport(CrystalDecisions.Shared.ConnectionInfo connectionInfo, CrystalDecisions.CrystalReports.Engine.ReportDocument reportDocument)
{
CrystalDecisions.CrystalReports.Engine.Tables tables = reportDocument.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
CrystalDecisions.Shared.TableLogOnInfo tableLogonInfo = table.LogOnInfo;
tableLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(tableLogonInfo);
}
}为此,您需要传递一个ConnectionInfo对象(它将包含您的所有登录信息)和应用它的报表文档。希望这能有所帮助。
编辑--我不敢相信直到现在才想到的另一个选项是,如果您使用的是Server,您可以确保所有开发数据库的名称都相同,然后使用“。或“(本地)”用于服务器和集成安全性,使每个人有效地在本地拥有相同的连接信息。我认为这可能是最好的方法,假设您可以让所有的开发人员使用相同的设置。
编辑:)在阅读了其他答案的一些评论后,我想我可能误解了这个问题。除了没有权利编辑报告之外,我没有理由想到为什么你无法完成Arvo的回答中的步骤,但我假设您已经能够做出其他的更改,所以我对此表示怀疑。我假设,为了让报告对您一直在执行这些步骤的每个开发人员都有效。
https://stackoverflow.com/questions/967710
复制相似问题