2011-05-24 29 views
14

我写了一篇报告,使用链接到Access数据库的Crystal Reports XI在这里C:\ MyData.mdb。为什么Crystal Report Viewer总是要求在WePOS操作系统上访问Access数据库的详细信息?

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

我已经使用了表格和使用WPF Cyrtsal报告查看器C#.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的每台PC上,除了一个与WEPOS。

我也玩过:

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

...但是这没有什么区别。

  1. 有Access数据库
  2. 所有PC的使用已安装的卫浴套间软件上没有用户名和密码(运行时间等)
  3. 所有PC的使用管理员帐户(和文件权限进行了测试被重复检查)
  4. 我试过打勾的综合安全勾选框,没有运气
  5. 我设置logonInfo.ConnectionInfo.DatabaseName = string.Empty;
  6. 我设置logonInfo.ConnectionInfo.ServerName =“C:\ MyData.mdb”;
  7. 我没有使用任何上述代码的尝试,而不是仅仅做出确保数据库是在所有PC的同一个地方,没有运气
  8. 这是一个Access 2003数据库文件

我可以只有结论WePOS是如此“减少”,水晶默默无法通过认证...请帮助!

+3

“有是Access数据库没有用户名或密码”是不正确的。每个Jet数据库(MDB格式)都有一个默认的管理员用户名,有或没有密码。现在的问题是,是否有在Windows或不是这个精简的安装工作组文件,以及是否有在注册表中定义一个适当定义的默认工作组。你应该能够提供用户名“管理员”,它应该工作。但是,如果没有工作组文件,或者它不在注册表中为此定义的位置,它将无法工作。 – 2011-05-28 23:25:42

+0

嗨大卫,谢谢你的回应。我查了注册表(HKEY_CURRENT_USER \软件\微软\办公室\ 11.0 \ ACCESS \喷气\ 4.0 \发动机SystemDB =应用数据\微软\ ACCESS \的System.mdw),并检查System.mdw文件,并在所有3 PC的他们存在。由于这种情况与水晶<->访问一个问题,我不能肯定,作为打开一个访问.mdb文件时,它的出现仅用于自身的访问工作组文件将参与。我站在默认的“管理员”密码纠正,并随后尝试使用所有3台PC的密码,但没有运气。 – Adam 2011-05-29 12:37:03

+0

如果您注册一个帐号,你就可以留下意见和编辑自己的帖子。 – 2011-05-29 14:16:17

回答

1

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

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" /> 
2

只是为了将来参考,如果你切换到SQL Server时,要使用SQL OLEDB和本地SQL客户端,否则你会再次遇到同样的问题,因为我还没有当我是首先将CR集成到我们的应用中。它可以在您的开发机器上正常工作,但不能用于生产。

1

在Crystal Reports XI(可能在所有版本我想像)我从Access/Excel文件(DAO)以OLE DB(ADO)改变数据库类型。

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

这么多的感谢大卫对这个非常“小众”的问题的原因顶尖的转向 - 我希望它可以帮助别人!


代表OP增加。

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; 
相关问题