Quantcast
Channel: SCN : Discussion List - SAP Crystal Reports, version for Visual Studio
Viewing all articles
Browse latest Browse all 3636

VerifyDatabase throws exception as "No Error". DB Oracle, SubReports problem

$
0
0

Hi,

I am working in migrating from CR11 to CR13 . I have created UFL (User function lib) in .Net.

Now some reports which have subreports in them dont work fine in case of ORACLE database. Things are working fine in case of SQL database in background.

Some more details are,

RPT file is developed with SQL.

This report works fine with SQL database.

Report has three subreports.

In case of ORACLE if there are no subreports then report is displayed properly.

 

I am using below code for Replace connection,

 

CrystalDecisions.ReportAppServer.ClientDoc.ISCDReportClientDocument reportClientDocument;

reportClientDocument = new CrystalDecisions.ReportAppServer.ReportClientDocumentWrapper();

 

reportClientDocument = rptDoc.ReportClientDocument;

reportClientDocument.DatabaseController.LogonEx(strDSN, strDatabaseName, strUserID, strPassword);

 

//Create the logon propertybag for the connection we wish to use

CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag objlogonDetails = new CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();

 

 

//Create the QE (query engine) propertybag with the provider details and logon property bag.

CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag objMainPropertyBag = new CrystalDecisions.ReportAppServer.DataDefModel.PropertyBag();

 

if (m_bSqlServer)

{

                    objMainPropertyBag.Add("Database DLL", "crdb_odbc.dll");

                    objMainPropertyBag.Add("QE_DatabaseName", strDatabaseName);

                    objMainPropertyBag.Add("QE_SQLDB", "True");

}

else

{

                    objMainPropertyBag.Add("Server", strDSN);

                    //objMainPropertyBag.Add("Database DLL", "crdb_oracle.dll");

                    objMainPropertyBag.Add("Database DLL", "crdb_ado.dll");

                    objMainPropertyBag.Add("QE_DatabaseName", strDatabaseName);

                    objMainPropertyBag.Add("QE_SQLDB", "False");

}

 

objMainPropertyBag.Add("QE_DatabaseType", "ODBC (RDO)");

objMainPropertyBag.Add("QE_LogonProperties", objlogonDetails);

objMainPropertyBag.Add("QE_ServerDescription", strDSN);

               

objMainPropertyBag.Add("SSO Enabled", "False");

objlogonDetails.Add("UseDSNProperties", true);

 

if (m_bSqlServer)

{

                    objlogonDetails.Add("PreQEDatabaseName", strDatabaseName);

                    objlogonDetails.Add("PreQEServerName", strDSN);

                    objlogonDetails.Add("Trusted_Connection", "False");                  

 

}

else

{

 

                    objlogonDetails.Add("DSN", strDSN);

                    objlogonDetails.Add("PreQEServerName", strDSN);

                    objlogonDetails.Add("Trusted_Connection", false);               

                     objMainPropertyBag.Add("Owner", strUserID);               

}

 

CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo objNewConnInfo = new CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo();

CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfo objOldConnInfo;

CrystalDecisions.ReportAppServer.DataDefModel.ConnectionInfos objOldConnInfos;

 

 

objOldConnInfos = reportClientDocument.DatabaseController.GetConnectionInfos();

 

 

for (int i = 0; i < objOldConnInfos.Count; i++)

{

                    objOldConnInfo = objOldConnInfos[i];

 

 

                    objNewConnInfo.Attributes = objMainPropertyBag;

                    objNewConnInfo.Password = strPassword;

                    objNewConnInfo.UserName = strUserID;

                    objNewConnInfo.Kind = CrystalDecisions.ReportAppServer.DataDefModel.CrConnectionInfoKindEnum.crConnectionInfoKindCRQE;

                    reportClientDocument.DatabaseController.ReplaceConnection(objOldConnInfo, objNewConnInfo, null,                                    CrystalDecisions.ReportAppServer.DataDefModel.CrDBOptionsEnum.crDBOptionDoNotVerifyDB);

 

 

                    foreach (string strSubreportsName in reportClientDocument.SubreportController.GetSubreportNames())

                    {

                        CrystalDecisions.ReportAppServer.Controllers.ISCRSubreportClientDocument oSubReportClientDocument =                                              reportClientDocument.SubreportController.GetSubreport(strSubreportsName);

                        oSubReportClientDocument.DatabaseController.LogonEx(strDSN, strDatabaseName, strUserID, strPassword);

                        oSubReportClientDocument.DatabaseController.ReplaceConnection(objOldConnInfo, objNewConnInfo, null,                                              CrystalDecisions.ReportAppServer.DataDefModel.CrDBOptionsEnum.crDBOptionDoNotVerifyDB);

                    }

}

 

//For each table in main report

foreach (CrystalDecisions.ReportAppServer.DataDefModel.Table oTableOld in reportClientDocument.Database.Tables)

{

                    CrystalDecisions.ReportAppServer.DataDefModel.Table oTableNew = GetNewTable(oTableOld, objNewConnInfo, strDatabaseName);

 

                    reportClientDocument.DatabaseController.SetTableLocation(oTableOld, oTableNew);

                    oTableNew = null;

}

 

//For Subreports

foreach (string strSubreportsName in reportClientDocument.SubreportController.GetSubreportNames())

{

                    //Loop through each table in subreport database and set its new table

                    foreach (CrystalDecisions.ReportAppServer.DataDefModel.Table objTableOld in                                    reportClientDocument.SubreportController.GetSubreportDatabase(strSubreportsName).Tables)

                    {

                        CrystalDecisions.ReportAppServer.Controllers.ISCRSubreportClientDocument oSubReportClientDocument =                                    reportClientDocument.SubreportController.GetSubreport(strSubreportsName);

                        CrystalDecisions.ReportAppServer.DataDefModel.Table objTableNew = GetNewTable(objTableOld, objNewConnInfo,                                    strDatabaseName);

 

                        reportClientDocument.SubreportController.SetTableLocation(strSubreportsName, objTableOld, objTableNew);

 

 

                        bool bVerify = oSubReportClientDocument.DatabaseController.VerifyTableConnectivity(objTableNew);

                        objTableNew = null;

                    }

}

 

 

 

 

reportClientDocument.VerifyDatabase();

 

 

 

 

 

When there are subreports in rpt file and when we use ORACLE in that case VerifyDatabase() function throws exception as "No error"

 

 

Thanks in advance.


Viewing all articles
Browse latest Browse all 3636

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>