vb调用水晶报表问题
各位朋友,请先看下面的代码:
报表的form窗体代码
Dim rs As ADODB.Recordset
Dim Report As New CrystalReport1
Dim msgtext As String
Private Sub Form_Load()
Dim strsql As String
Set Report = Nothing
strsql = "select * from tmp_B01 "
Set rs = ExecuteSQL(strsql, msgtext)
Report.Database.SetDataSource rs
Screen.MousePointer = vbHourglass
CRViewer1.ReportSource = Report
CRViewer1.ViewReport
Screen.MousePointer = vbDefault
End Sub
Private Sub Form_Resize()
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Height = ScaleHeight
CRViewer1.Width = ScaleWidth
End Sub
Private Sub Form_Unload(Cancel As Integer)
Set Report = Nothing
End Sub
类模块代码
Dim msgtext As String
Dim mrc As ADODB.Recordset
Public Function ExecuteSQL(ByVal sql As String, MsgString As String) As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim sTokens() As String
'Dim SQL As String
On Error GoTo ExecuteSQL_Error
sTokens = Split(sql)
Set cnn = New ADODB.Connection
cnn.Open ConnectString
If InStr( "INSERT,DELETE,UPDATE ", UCase$(sTokens(0))) Then
cnn.Execute sql
MsgString = sTokens(0) & "query successful "
Else
Set rst = New ADODB.Recordset
rst.Open Trim$(sql), cnn, adOpenKeyset, adLockOptimistic
Set ExecuteSQL = rst
MsgString = "查询到 " & rst.RecordCount & "条纪录 "
End If
ExecuteSQL_Exit:
Set rst = Nothing
Exit Function
Set cnn = Nothing
ExecuteSQL_Error:
MsgString = "查询错误: " & Err.Description
Resume ExecuteSQL_Exit
End Function
Public Function ConnectString() As String
ConnectString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\计划管理系统.mdb;Persist Security Info=False "
'ConnectString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=aa;Data Source=RJB-CL "
End Function
当程序执行到“Report.Database.SetDataSource rs”时,系统提示错误:实时错误‘9’
下标越界
请问为什么??
谢谢!!
[解决办法]
给大家推荐个
好的技术群 大家一起学习啊
15356263
[解决办法]
你的rs是个变量!!!
定义rs 改为:dim rs as new adodb.recordset
[解决办法]
你看看是不是rs出错误了
Report 是打开的以什么为模板的东西?
Dim Appl As New CRAXDDRT.Application
Set Report = Appl.OpenReport(reppath, crOpenReportByTempCopy)
Report.Database.SetDataSource Data1后面还有别的参数阿,你好好看看帮助
[解决办法]
dim rs as new adodb.recordset
定义之后是个对象,若不加上new则定义之后rs是个变量,不能存放ExecuteSQL(strsql, msgtext)返回的数据集合。
若修改后还不行,你测试一下你的ExecuteSQL(strsql, msgtext)函数是不是返回了一个数据集合???
[解决办法]
应该是RS的问题,RS在调前应该NEW一下,创建实例.否则不能做为数据源被调用.
可以在Report.Database.SetDataSource rs之前看看MSGBOX(rs.RecordCount)是什么结果