包含备注字段的DBF数据库文件的登录失败

2020-09-06 00:27发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好

我没有使用基于服务器的方法来运行报告。 我的应用程序是一个桌面应用程序,所有Crystal Reports都在客户端桌面上运行。 我有一个包含备注字段的DBF文件。 我知道从Crystal Reports for Visual Studio连接时,DBF文件不需要用户标识符或密码。 但是,当我们尝试加载连接到该DBF文件的报告时,我们得到的标准登录表单的表名位于"禁用的服务器名称"字段上,而数据库,用户和密码字段均为空白,无论我们做什么 输入,我们将无法加载报告。 但是,如果我们仅将备注字段转换为字符字段,则一切正常。 这似乎指向SAP Crystal Reports for Visual Studio SP25附带的crdb_p2bxbse.dll驱动程序中有一个确定的错误。 谁能让我知道如何解决这个问题? 请避免将备注字段转换为字符字段之类的建议,因为由于该论坛之外的多种原因,这是不可能的。 我们通过应用程序遇到的错误是:

当我将报告添加到VS项目中并在VS IDE中加载报告时,即使在DBF文件中保留了备注字段,该报告也不会在VS IDE中显示。 当我们从DBF文件中删除备忘字段时,报表将成功加载到VS IDE中。 我们在VS IDE中遇到的错误是:

该报告是CR8.5报告,但是在继续前进并建议将报告升级到更高版本之前,我已经尝试过,即使将报告升级到CR XI也无法正常工作。 我相信它与报告的版本无关,也与DBF文件的版本无关。 据我所知,这与DBF文件包含备注字段这一事实有关。

我尝试过SP21,SP22和最新版本SP25,它们的行为方式相同。

谢谢

crerror.jpg (14.6 kB)

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


大家好

我没有使用基于服务器的方法来运行报告。 我的应用程序是一个桌面应用程序,所有Crystal Reports都在客户端桌面上运行。 我有一个包含备注字段的DBF文件。 我知道从Crystal Reports for Visual Studio连接时,DBF文件不需要用户标识符或密码。 但是,当我们尝试加载连接到该DBF文件的报告时,我们得到的标准登录表单的表名位于"禁用的服务器名称"字段上,而数据库,用户和密码字段均为空白,无论我们做什么 输入,我们将无法加载报告。 但是,如果我们仅将备注字段转换为字符字段,则一切正常。 这似乎指向SAP Crystal Reports for Visual Studio SP25附带的crdb_p2bxbse.dll驱动程序中有一个确定的错误。 谁能让我知道如何解决这个问题? 请避免将备注字段转换为字符字段之类的建议,因为由于该论坛之外的多种原因,这是不可能的。 我们通过应用程序遇到的错误是:

当我将报告添加到VS项目中并在VS IDE中加载报告时,即使在DBF文件中保留了备注字段,该报告也不会在VS IDE中显示。 当我们从DBF文件中删除备忘字段时,报表将成功加载到VS IDE中。 我们在VS IDE中遇到的错误是:

该报告是CR8.5报告,但是在继续前进并建议将报告升级到更高版本之前,我已经尝试过,即使将报告升级到CR XI也无法正常工作。 我相信它与报告的版本无关,也与DBF文件的版本无关。 据我所知,这与DBF文件包含备注字段这一事实有关。

我尝试过SP21,SP22和最新版本SP25,它们的行为方式相同。

谢谢

crerror.jpg (14.6 kB)
付费偷看设置
发送
8条回答
哎,真难
1楼 · 2020-09-06 00:56.采纳回答

您可以尝试使用ReplaceConnection(),在搜索中会找到有关如何使用它的KBA。 但是问题在于旧驱动程序,它可能无法正确转换为新驱动程序。 因此,我们俩都部分正确,这取决于报表源使用的是什么。

第二个问题,Xbase驱动程序将消失,可以使用ODBC连接并查看其是否有效。

使用替换连接可用于将报表从本机Xbase驱动程序转换为ODBC。

使用以下方法获取数据库驱动程序的名称:

 String DBDriver =  "";
 为(int x = 0; x  

我进行了一次搜索,发现了一个有关Xbase驱动程序的线程,而R&D确实确认它已消失。 他们建议使用DAO引擎连接到DBF。 或使用ODBC/OLE DB。

看看ODBC是否适合您....

hengyuye
2楼-- · 2020-09-06 01:07

Hi Don,

我有点困惑,Ido表示较旧的报告将可用,但您是说无论如何,必须将任何CR 8.5报表上的数据库驱动程序升级为使用较新的驱动程序才能正常工作? 可以通过我们的应用程序动态完成此操作,而不必强迫客户端执行此操作吗? 如果是这样,您是否愿意提供一些我们可以用来执行此操作的代码?

无论如何,根据您的建议,我们创建了全新的Windows 10开发计算机,并在其中安装了VS 2015以及VS SP25的CR。 没有安装任何版本的Crystal Reports设计器。 我们测试了两个报告(带有和不带有备注字段),它们仍然无法加载并显示数据库登录表单。

然后,在将报告附加到查看器之前,我们添加了一个VerifyDatabase调用,并且获得了以下异常详细信息,表明数据库验证也失败了。

正如我所说,我可以轻松地向您提供报告以及我们用来加载这些报告的C#应用​​程序。 请注意,我们调用了一个称为LogonToTables的方法来为主报表和所有子报表中的所有表提供凭据。 代码如下(将m_sMainTableName设置为FoxPro表名):

私有void LogonToTables(CrystalDecisions.CrystalReports.Engine.ReportDocument objReportDocument)
         {
             CrystalDecisions.Shared.ConnectionInfo objConnection = null;
             CrystalDecisions.Shared.TableLogOnInfo objLogon = null;


             尝试
             {
                //设置报告凭据。
                 foreach(objReportDocument.Database.Tables中的CrystalDecisions.CrystalReports.Engine.Table objTable)
                 {
                    //让用户知道我们正在处理哪个表。
                     ProgressBarMessage("设置" + objTable.Name.ToUpper()+"连接凭据...");
                     objLogon = objTable.LogOnInfo;


                    //设置连接信息。 我们通常将FoxPro数据库文件RRESULT作为主表。
                     如果(objTable.Name.ToUpper()。Equals(m_sMainTableName))
                     {
                        ////设置连接信息的详细信息。
                         objConnection =新的CrystalDecisions.Shared.ConnectionInfo();
                         objConnection.AllowCustomConnection = true;
                         objConnection.DatabaseName ="";
                         objConnection.ServerName ="";
                         objConnection.UserID ="";
                         objConnection.Password ="";
                         objLogon.ConnectionInfo = objConnection;
                     }
                     否则是否(objTable.LogOnInfo.ConnectionInfo.ServerName.ToUpper()== GetValue(m_sDSN1," DSN =",";")。ToUpper())
                     {
                         objLogon.ConnectionInfo.UserID = GetValue(m_sDSN1," UID =",";");
                         objLogon.ConnectionInfo.Password = GetValue(m_sDSN1," PWD =",";");
                     }
                     否则,如果(objTable.LogOnInfo.ConnectionInfo.ServerName.ToUpper()== GetValue(m_sDSN2," DSN =",";")。ToUpper())
                     {
                         objLogon.ConnectionInfo.UserID = GetValue(m_sDSN2," UID =",";");
                         objLogon.ConnectionInfo.Password = GetValue(m_sDSN2," PWD =",";");
                     }


                    //应用登录信息。
                     objTable.ApplyLogOnInfo(objLogon);
                 }
             }
             捕获(异常e)
             {
                 ProgressBarMessage(" LogonToTables:" + e.Message);
             }
             最后
             {
                 objLogon = null;
             }
         }


 

请注意,我们已尝试注释掉ConnectionInfo类的各种属性,但在所有尝试中均未成功加载这些报告。 你们中的任何人都可以使用这种为表提供凭据的方法吗? 如果没有,从这里到哪里? 还有其他可以尝试的建议或想法吗?

坎姆兰

一周热门 更多>