首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

vb调用水晶报表有关问题

2012-01-24 
vb调用水晶报表问题各位朋友,请先看下面的代码:报表的form窗体代码DimrsAsADODB.RecordsetDimReportAsNewC

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)是什么结果

热点排行