Проблемы с Crystal Reports
От: Zar Россия  
Дата: 24.10.02 10:59
Оценка:
Добрый день.
Сложилась такая ситуация: есть диалог, на нём расположен контрол Crystal Report Viewer. На диалоге есть комбо-бокс, в котором выбирается, какой отчёт надо показать в CRViewer-е. Так вот, при первом показе отчёта, всё нормально, а при смене отчёта выдаётся сообщение об ошибке. Причём, если попытаться загрузить тот же самый отчёт, то выдаётся сообщение об ошибке:
MsgBox("Memory full", "Crystal Report Viewer", MB_ICONINFORMATION)
с одной кнопкой OK, после чего контрол Crystal Report Viewer серого цвета, но доступна кнопка "Next Page", и по её нажатию можно перейти на страницу отчёта, причём все данные зафетчатся с сервера нормально.
Если же попытаться выбрать отчёт, который не был выбран изначально, то получается вообще косяк. Сначала появляется описанный ранее MsgBox, а затем сообщение
MsgBox("Column number out of range", "Seagate Crystal Reports: Database Error", MB_ICONEXCLAMATION).

У меня есть функция CMainDlg::ShowReport в которой я собственно и показываю отчёт (она же вызывается и во время InitDialog и при смене selection-а в комбо-боксе:

    IApplicationPtr pApp;
    IReportPtr pRep;
    hr=CoCreateInstance(CLSID_Application, NULL, CLSCTX_INPROC_SERVER , IID_IApplication, (void **) &pApp);
    if(FAILED(hr)) _com_issue_error(hr);
    pRep=pApp->OpenReport(_bstr_t(sReportFileName));

    IParameterFieldDefinitionPtr pParam;
    for(int i = 1; i <= pRep->ParameterFields->Count;i++){
        // заполняю параметры
    }
    _bstr_t sServer = (bstr_t)cnn->Properties->GetItem(_variant_t(L"Data Source"))->Value; //server name
    _bstr_t sDB = (bstr_t)cnn->Properties->GetItem(_variant_t(L"Initial Catalog"))->Value; //db
    pRep->Database->Tables->GetItem(1)->SetLogOnInfo(sServer);
    pRep->Database->Tables->GetItem(1)->Location = sDB + _bstr_t(L".dbo.") + _bstr_t(L"RptGeneral");
    m_crView1.SetReportSource(pRep);
    m_crView1.ViewReport();


Сообщение выдаются после выполнения функции (проходил по ней отладчиком).

шаблоны заполняются данными из хранимых процедур. В шаблонах разные количества колонок. Судя по всему, надо как-то сменить имя процедуры для получения данных. Но вот как?
[ Zarathustra ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.