Добрый день.
Сложилась такая ситуация: есть диалог, на нём расположен контрол 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();
Сообщение выдаются после выполнения функции (проходил по ней отладчиком).
шаблоны заполняются данными из хранимых процедур. В шаблонах разные количества колонок. Судя по всему, надо как-то сменить имя процедуры для получения данных. Но вот как?