crystal-reports - 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
他们都以这个错误弹出窗口结束,然后是信息弹出窗口。
如何让这个工作?
解决方案
如果没有执行错误并且 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 问题
或将报表的连接类型更改为仅限字段定义。
推荐阅读
- oracle-apex - 在 Oracle APEX 19.2 中动态创建密码字段
- r - R绘图功能不起作用``xy.coords(x,y,xlabel,ylabel,log)中的错误:'x'和'y'长度不同``
- python - Python不会让我添加到我的字典中?
- bash - gitlab CI 不显示换行
- javascript - 如何修复正则表达式模式以匹配承诺语法?
- swift - 无法转换 Swift._SwiftDeferredNSDictionary 类型的值
到 KotlinMutableDictionary - reactjs - .child 不是函数
- sql - 创建触发器和序列以创建新的主键
- python-3.x - 是否可以将数据帧与映射到第二个数据帧中众多列的第一个数据帧中的一列合并?
- java - 如何在后台执行处理?