为什么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);

但这没什么区别。

  1. Access数据库中没有用户名或密码
  2. 所有使用的电脑都安装了相关软件(运行时等)
  3. 所有电脑都使用管理员帐户进行了测试(并对文件权限进行了双重检查)
  4. 我试过勾选"集成安全"复选框,但没有成功
  5. 我设置了登录信息。ConnectionInfo。DatabaseName=字符串。空的
  6. 我设置了登录信息。ConnectionInfo。ServerName="C:''MyData.mdb"
  7. 我试着不使用上面的任何代码,只是确保数据库在所有电脑上都在同一个地方,但运气不好
  8. 它是Access 2003数据库文件

我只能得出结论,WePOS是如此"精简",以至于Crystal默默地无法通过身份验证。。。请帮忙!

为什么Crystal Report Viewer总是询问WePOS操作系统上Access数据库的登录详细信息

仅供将来参考,如果您切换到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;