为什么Crystal Report Viewer总是要求在WePOS操作系统上访问Access数据库的详细信息?

我使用Crystal Reports XI编写了一个报告,链接到Access数据库C:\ MyData.mdb。

该报告有一个字段(本例简化),没有子报告。

我使用C#.NET 4使用Forms和WPF Cyrtsal Report Viewer。

该报告在运行Windows XP的开发PC以及运行Windows XP的其他“tills”上成功查看。

但是,在运行WePOS(一种削减Windows XP)的情况下,报告“始终”显示一个对话框,询问登录详细信息,即用户名和密码。

此对话框还显示C:\ MyData.mdb的正确路径。

我花了很多天在这上面,尽可能地测试各种方式(我相信每个人都会记得这些时候!)。

我使用此代码来确保数据库正确链接到:

TableLogOnInfo logonInfo; foreach (CrystalDecisions.CrystalReports.Engine.Table table in report.Database.Tables) { logonInfo = table.LogOnInfo; logonInfo.ConnectionInfo.ServerName = string.Empty; logonInfo.ConnectionInfo.DatabaseName = "C:\MyData.mdb"; logonInfo.ConnectionInfo.UserID = string.Empty; logonInfo.ConnectionInfo.Password = string.Empty; table.ApplyLogOnInfo(logonInfo); } 

…它适用于使用Windows XP的每台PC,除了使用WePOS的PC。

我也玩过:

 report.SetDatabaseLogon(string.Empty, string.Empty, "C:\MyData.mdb", string.Empty); 

……但没有区别。

  1. Access数据库上没有用户名或密码
  2. 所有使用的PC都安装了相关的软件(运行时等)
  3. 所有的PC都使用Adminstrator帐户进行了测试(文件权限被双重检查)
  4. 我试过勾选Integrated Security复选框,没有运气
  5. 我设置了logonInfo.ConnectionInfo.DatabaseName = string.Empty;
  6. 我设置了logonInfo.ConnectionInfo.ServerName =“C:\ MyData.mdb”;
  7. 我试过不使用上面的任何代码,而只是确保数据库在所有PC的同一个地方,没有运气
  8. 它是Access 2003数据库文件

我只能得出结论,WePOS是如此“减少”,以至于Crystal默默无法通过身份validation…请帮忙!

仅供将来参考,如果您曾切换到SQL Server,您将需要使用SQL OLEDB而不是本机Sql客户端,否则您将再次遇到同样的问题,就像我第一次将CR集成到我们的应用程序时一样。 它可以在您的开发机器上正常工作,但不能在生产中工作。

这个WePos事物是否有正确的权利从文件系统中的文件夹/位置读取,或者您是否需要提升权限或从该位置读取的内容。 连接到远程网络文件夹时可能会出现同样的问题。 然后,您还必须在该计算机上指定凭据才能访问它。 这有意义吗?

 Public Sub giveLogin() Dim conInfo As New ConnectionInfo conInfo.ServerName = ConfigurationManager.AppSettings("ServerName") conInfo.DatabaseName = ConfigurationManager.AppSettings("DatabaseName") conInfo.UserID = ConfigurationManager.AppSettings("UserID") conInfo.Password = ConfigurationManager.AppSettings("Password") For Each tblLogon As TableLogOnInfo In CrystalReportViewer1.LogOnInfo tblLogon.ConnectionInfo = conInfo Next End Sub  

在Crystal Reports XI中(可能在我想象的所有版本上)我将数据库类型从Access / Excel(DAO)更改为OLE DB(ADO)。

我敢打赌,如果我坚持下去,我可以根据大卫所示的C#代码中的报告数据源位置设置System.mdw的位置(见上文)。

非常感谢David为这个特别“利基”问题的事业做出了一流的指导 – 我希望它可以帮助别人!


代表OP添加。

这对我有用,

 var rd = new CrystalReport1(); ConnectionInfo connectionInfo = new ConnectionInfo(); connectionInfo.DatabaseName = @"d:\testing\test2.mdb"; connectionInfo.UserID = "admin"; foreach (Table table in rd.Database.Tables) { TableLogOnInfo logonInfo = table.LogOnInfo; logonInfo.ConnectionInfo = connectionInfo; table.ApplyLogOnInfo(logonInfo); } crystalReportViewer1.ReportSource = rd;