读书人

水晶报表中改变数据源有关问题,为什么

发布时间: 2012-01-26 19:40:46 作者: rapoo

水晶报表中改变数据源问题,为什么用COMMAND对象调用存储过程查出来的记录集不能使用?
代码出下:
Private Sub Form_Load()
Screen.MousePointer = vbHourglass
Dim RS11 As New ADODB.Recordset
Dim RS12 As New ADODB.Recordset
Dim RS13 As New ADODB.Recordset

'---------------------------
'用自定义的COM组件中的函数返回查找出的记录集,实际是在函数中使用COMMAND对象调用存储过程,然后返回一个离线记录集。
Dim o As Object
Set o = CreateObject( "coGMDept.ioDepartments ")
Set RS11 = o.Departments()
' o.Departments是一个自定义COM组件里的函数,返回一个记录集
'----------------------------

'****************************************************************
'使用COMMAND对象调用存储过程,返回一个记录集。
Dim conn As New ADODB.Connection
Dim connstr As String
"Provider=SQLOLEDB.1;Initial Catalog=GEIMS;Data Source=c-11;Persist Security Info=False;Integrated Security=SSPI; "
conn.Open connstr

Dim Cmd As ADODB.Command

Set Cmd = New ADODB.Command

'Command 对象处理----------------------------------------
With Cmd
.CommandType = adCmdStoredProc
.CommandTimeout = 30
.CommandText = "SP_DEPARTMENTS_GET "

.Parameters.Append .CreateParameter( "@ID ", adBigInt, adParamInput, , Null)
.Parameters.Append .CreateParameter( "@RETURNS ", adBigInt, adParamOutput)

.ActiveConnection = conn

Set RS12 = .Execute

End With
'*****************************************************************
'#################################################################
'直接OPEN一个记录集。
RS13.Open "Select * from DEPARTMENTS ", conn, 3, 1
'#################################################################
'使用上述三种方法都能得到记录集,且内容一致

'下面改变水晶报表的数据源
'Report.Database.SetDataSource RS11
'Report.Database.SetDataSource RS12
Report.Database.SetDataSource RS13

'但只能使用第三种方法报表才可以正常显示,前面两种方式报表都是空的,但 debug.print 记录集RS11,RS12,RS13里面的记录,数据都完全是一样的 ,为什么?

Report.ReadRecords

CRViewer91.ReportSource = Report
CRViewer91.ViewReport
Screen.MousePointer = vbDefault

End Sub

郁闷了几天了,那位大侠有经验,请传授一下,感激不尽。

[解决办法]
up

读书人网 >.NET

热点推荐