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

时间:2011-05-24 15:37:17

标签: c# ms-access crystal-reports

我使用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);

......但没有区别。

  1. Access数据库
  2. 上没有用户名或密码
  3. 所有使用的PC都安装了相关的软件(运行时等)
  4. 使用Adminstrator帐户测试了所有PC(并且双重检查了文件权限)
  5. 我试过勾选Integrated Security复选框,没有运气
  6. 我设置了logonInfo.ConnectionInfo.DatabaseName = string.Empty;
  7. 我设置了logonInfo.ConnectionInfo.ServerName =“C:\ MyData.mdb”;
  8. 我尝试过不使用上述任何代码,只是确保数据库在所有PC上都在同一个地方,没有运气
  9. 这是一个Access 2003数据库文件
  10. 我只能断定WePOS是如此“减少”,以至于Crystal默默无法通过身份验证......请帮忙!

5 个答案:

答案 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;