为什么Crystal Report Viewer总是询问WePOS操作系统上Access数据库的登录详细信息
本文关键字:Access 操作系统 数据库 详细信息 登录 WePOS Report Crystal Viewer 为什么 | 更新日期: 2023-09-27 17:57:27
我使用Crystal Reports XI编写了一份报告,链接到这里的Access数据库C:''MyData.mdb.
该报告有一个字段(本例中已简化),没有子报告。
我已经使用C#使用了Forms和WPF Cyrtsal报表查看器。NET 4。
该报告在我的运行Windows XP的开发PC和其他运行Windows XP"收银台"上成功查看
然而,在运行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);
但这没什么区别。
- Access数据库中没有用户名或密码
- 所有使用的电脑都安装了相关软件(运行时等)
- 所有电脑都使用管理员帐户进行了测试(并对文件权限进行了双重检查)
- 我试过勾选"集成安全"复选框,但没有成功
- 我设置了登录信息。ConnectionInfo。DatabaseName=字符串。空的
- 我设置了登录信息。ConnectionInfo。ServerName="C:''MyData.mdb"
- 我试着不使用上面的任何代码,只是确保数据库在所有电脑上都在同一个地方,但运气不好
- 它是Access 2003数据库文件
我只能得出结论,WePOS是如此"精简",以至于Crystal默默地无法通过身份验证。。。请帮忙!
仅供将来参考,如果您切换到SQL Server,您将希望使用SQL OLEDB和NOT本机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
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="true" HasCrystalLogo ="False" EnableDatabaseLogonPrompt ="false" EnableParameterPrompt ="false" />
在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;