Crystal Reports 8.5 SetDataSource генерирует пустое сообщение об ошибке

У меня есть приложение VB6, которое использует Crystal Reports 8.5 для просмотра отчетов. Теперь я создал новый отчет, в котором в качестве источника данных используется хранимая процедура SQL Server. При просмотре этого отчета в моем приложении я использую ADODB.Recordset в качестве источника данных для отчета. Проблема в том, что Crystal Reports не может показать отчет. Он показывает только сообщение об ошибке пустой базы данных и информационное предупреждение о том, что Сервер еще не открыт.

Я искал в Google, как будто моя жизнь зависит от этого, но я нашел только примеры проблемных ситуаций, которые делают именно то, что я делаю. Иногда с небольшими отличиями, но я перепробовал их все. Они продолжают заканчиваться одними и теми же сообщениями об ошибках.

Это мой код для заполнения набора записей.

Dim Records As ADODB.Recordset
Dim Cmd As ADODB.Command
Set Cmd = New ADODB.Command
Cmd.ActiveConnection = clSQL.DBConnection   '< -- Existing connection that uses CursorLocation adUseClient
Cmd.CommandType = adCmdStoredProc
Cmd.CommandText = "SPCrystalReports"

Cmd.Parameters.Append Cmd.CreateParameter("ReportType", adVarChar, adParamInput, 256, Soort)
Cmd.Parameters.Append Cmd.CreateParameter("ReportFile", adVarChar, adParamInput, 256, RapportNaam)
Cmd.Parameters.Append Cmd.CreateParameter("Template", adVarChar, adParamInput, 256, Template)
Cmd.Parameters.Append Cmd.CreateParameter("WhereClause", adVarChar, adParamInput, 8000, CentralSQL)
Cmd.Parameters.Append Cmd.CreateParameter("WhereClause2", adVarChar, adParamInput, 8000, ExtraSQL)
Cmd.Parameters.Append Cmd.CreateParameter("Date", adDate, adParamInput, , Datum)
Cmd.Parameters.Append Cmd.CreateParameter("DateFrom", adDate, adParamInput, , DatumVan)
Cmd.Parameters.Append Cmd.CreateParameter("DateTo", adDate, adParamInput, , DatumTot)

Set Records = Cmd.Execute

Set Cmd = Nothing

Вот как я загружаю свой отчет:

Dim crApp As CRAXDRT.Application
Dim crRep As CRAXDRT.Report

Set crApp = New CRAXDRT.Application
Set crRep = crApp.OpenReport(ReportFile, 1)

А затем я попробовал следующие примеры кода, чтобы отчет заработал.

Образец 1:

crRep.DiscardSavedData
crRep.Database.SetDataSource Records

Образец 2:

crRep.DiscardSavedData
crRep.Database.SetDataSource Records, 3, 1

Образец 3:

crRep.Database.Tables(1).SetLogOnInfo DBServer, DBDatabase, DBUser, DBPass
crRep.DiscardSavedData
crRep.Database.SetDataSource Records, 3, 1

Образец 4:

crRep.DiscardSavedData
crRep.Database.Tables(1).SetDataSource Records, 3

Образец 5:

crRep.Database.Tables(1).SetLogOnInfo DBServer, DBDatabase, DBUser, DBPass
crRep.DiscardSavedData
crRep.Database.Tables(1).SetDataSource Records, 3

Образец 6:

crRep.DiscardSavedData
crRep.Database.Tables(1).SetPrivateData 3, Records

Образец 7:

crRep.Database.Tables(1).SetLogOnInfo DBServer, DBDatabase, DBUser, DBPass
crRep.DiscardSavedData
crRep.Database.Tables(1).SetPrivateData 3, Records

Все они заканчивают этим всплывающим окном с ошибкой, за которым следует всплывающее окно с информацией.

Пустое сообщение об ошибке  Информационное всплывающее окно

Как заставить это работать?


person Martin    schedule 12.05.2021    source источник
comment
Пометьте свой вопрос знаком sql-server, чтобы он получил больше внимания от гораздо более крупного суб-сообщества БД.   -  person wqw    schedule 24.05.2021


Ответы (1)


Если ошибки выполнения нет и переменная Records содержит данные, попробуйте использовать метод (невидимый браузер объектов) SetPrivateData:

crRep.Database.Tables(1).SetPrivateData 3, Records

Pdsoledb.dll (p2soledb.dll) как crRep.Database.Tables (1) .DllName указывает, что ваш отчет должен извлекать данные из базы данных сам по себе, поэтому попробуйте что-то вроде этого:

With crRep.Database.Tables(1).ConnectionProperties
    .DeleteAll
    .Add "Connection String", " insert a connection string here "
End With

или используйте метод LogOnServer, как здесь Проблема VB и Crystal Reports

или измените тип подключения отчета на «Только определения полей».

person Smith    schedule 12.05.2021
comment
Пробовал, но он дал ту же ошибку. Также пробовал комбинации с SetLogOnInfo. Я добавлю их в список в своем вопросе. - person Martin; 12.05.2021
comment
Что такое crRep.Database.Tables (1) .DllName и сколько таблиц в коллекции crRep.Database.Tables? - person Smith; 13.05.2021
comment
DllName: pdsoledb.dll, а там всего 1 таблица. - person Martin; 14.05.2021
comment
Я отредактировал свой ответ относительно crRep.Database.Tables (1) .DllName - person Smith; 14.05.2021
comment
То, что DllName указывает на правильность подключения к базе данных. Отчет строится с активным подключением к базе данных, которое необходимо заменить набором записей во время выполнения. Алс, метода ConnectionProperties нет. У вас наверняка другая версия CR. - person Martin; 17.05.2021
comment
@Martin не могли бы вы опубликовать ссылку на свой rpt-файл? - person Smith; 17.05.2021
comment
Боюсь, что это невозможно из соображений конфиденциальности. Отчет будет содержать информацию, позволяющую идентифицировать моего клиента. Что бы вы хотели сделать с отчетом? - person Martin; 18.05.2021
comment
Я понимаю. Моя компания перешла с CR8 на CR11.5, и мы разработали некоторые инструменты VB6, которые, как я думал, могут помочь в выявлении причины вашей проблемы с отчетами. - person Smith; 18.05.2021