首页 > 解决方案 > Crystal Reports 8.5 SetDataSource 生成空错误信息

问题描述

我有一个使用 Crystal Reports 8.5 来查看报表的 VB6 应用程序。我现在创建了一个使用 SQL Server 存储过程作为数据源的新报表。在我的应用程序中查看此报告时,我使用 aADODB.Recordset作为报告的数据源。问题是 Crystal Reports 无法显示报表。它仅显示空数据库错误消息,以及“服务器尚未打开”的信息警告。

我在谷歌上搜索,就像我的生活依赖于它一样,但我只找到了与我正在做的事情完全相同的工作情况的例子。有时会有一些细微的差异,但我都试过了。他们一直以相同的错误消息结束。

这是我填充记录集的代码。

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

他们都以这个错误弹出窗口结束,然后是信息弹出窗口。

空的错误信息 信息弹出

如何让这个工作?

标签: crystal-reportsvb6crystal-reports-8.5

解决方案


如果没有执行错误并且 Records 变量包含数据,请尝试使用 (Object Browser invisible) 方法 SetPrivateData:

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

Pdsoledb.dll (p2soledb.dll) as 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 问题

或将报表的连接类型更改为仅限字段定义。


推荐阅读