我使用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的电脑上使用,除了带有WePOS的电脑。
我也玩过:
report.SetDatabaseLogon(string.Empty, string.Empty, "C:\MyData.mdb", string.Empty);
......但没有区别。
我只能断定WePOS是如此“减少”,以至于Crystal默默无法通过身份验证......请帮忙!
答案 0 :(得分:2)
仅供将来参考,如果您曾切换到SQL Server,您将需要使用SQL OLEDB和 NOT 本机Sql客户端,否则您将再次遇到同样的问题,就像我在首先将CR整合到我们的应用中。它可以在您的开发机器上正常工作,但不能在生产中使用。
答案 1 :(得分:1)
此WePos事物是否具有从文件系统中的文件夹/位置读取的正确权利,或者您是否需要提升权限或从该位置读取的内容。连接到远程网络文件夹时可能会出现同样的问题。然后,您还必须在该计算机上指定凭据才能访问它。这有意义吗?
答案 2 :(得分:1)
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
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" HasCrystalLogo ="False" EnableDatabaseLogonPrompt ="false" EnableParameterPrompt ="false" />
答案 3 :(得分:1)
在Crystal Reports XI中(可能在我想象的所有版本上)我将数据库类型从Access / Excel(DAO)更改为OLE DB(ADO)。
我敢打赌,如果我坚持下去,我可以在C#代码(见上文)中针对报告数据源位置设置System.mdw
的位置,如David所示。
非常感谢David为这个特别“利基”问题的事业做出了一流的指导 - 我希望它可以帮助其他人!
代表OP添加。
答案 4 :(得分:0)
这对我有用,
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;