Viewer显示空白页面

问题描述 投票:1回答:0

我们使用PBNI使用C ++ DLL和Crystal Reports 10在C#中调用方法和打开窗口。

包含Crystal Reports Viewer OLE控件的窗口只显示空白页,没有错误。 在Powerbuilder的调试模式下,报告正确显示。 (打印和导出数据但不起作用。)

使用Process Monitor,我们可以看到C#可执行文件寻找并找到许多Crystal Reports dll(包括crviewer.dll) - 报告应该通过ODBC连接到Oracle数据库。 咨询Oracle SQL历史记录,我认为查看器无法连接到数据库。 但是当我更改连接凭据(别名,id ...)并尝试在报告中获取SQLQueryString时,我有一个错误(因此凭据是正确的。)

包含PBNI的报告空白页面

调试模式下的相同报告(功能)

Powerbuilder代码(窗口的打开事件):

OLEObject APP_CR, APPLICATION
OLEObject CONNECTION_INFO
APPLICATION = CREATE OLEObject
long li_ret
li_ret = APPLICATION.ConnectToNewObject('CrystalRuntime.Application.10')    
APP_CR = APPLICATION.OpenReport("C:\Apps\PB120\HeliosII\Dev\Etat\CLI_LST.rpt", 1)   
CONNECTION_INFO = APP_CR.database.tables[1].ConnectionProperties
CONNECTION_INFO.DeleteAll
CONNECTION_INFO.Add("DSN","DATABASE O10")
CONNECTION_INFO.Add("Database", "DATABASE") 
CONNECTION_INFO.Add("User ID","ETAT")
CONNECTION_INFO.Add("Password","ETAT")  

// Testing the connection
string ls_SQLQuery
ls_SQLQuery = APP_CR.SQLQueryString
APP_CR.SQLQueryString = ls_SQLQuery

// Showing the report
ole_CRViewer.object.ReportSource(App_CR)    
ole_CRViewer.object.ViewReport

C ++ Dll代码(调用打开窗口的函数)

pbgroup group = session->FindGroup("nvo_lanceur", pbgroup_userobject);      
if (group == NULL) return false;

pbclass cls = session->FindClass(group, "nvo_lanceur");
if (cls == NULL) return false;

pbobject pbobj = session->NewObject(cls);
if (pbobj == NULL) return false;

pbmethodID mid = session->GetMethodID(cls, "of_traitermessage", PBRT_FUNCTION, "QS");

PBCallInfo ci;
session->InitCallInfo(cls, mid, &ci);

ci.pArgs->GetAt(0)->SetString(parameters);

// Call the function
try
{
    session->InvokeObjectFunction(pbobj, mid, &ci);

    // Was PB exception thrown?
    if (session->HasExceptionThrown())
    {
        // Handle PB exception
        session->ClearException();
    }
}
catch (...)
{
    // Handle C++ exception
}

“nvo_lanceur”对象的“of_traitermessage”函数调用包含查看器的窗口的Open(以及许多其他窗口,具体取决于参数。)C#应用程序调用C ++方法100ms,调用“session-> ProcessPBMessage”( );” 用于调度powerbuilder事件消息。 如何显示此报告?

c# c++ crystal-reports activex powerbuilder
© www.soinside.com 2019 - 2024. All rights reserved.