我在VB中调用水晶报表,在第一次打开程序时可以调出报表,如果关闭程序后再打开
报表VB即异常退出,没有提示!环境(VB6+SQL2000+水晶报表9.2)请高手给看看,我已经熬了2天了,就是看不出什么地方有问题!谢谢!代码如下:
Option ExplicitPublic conn As New ADODB.Connection
Public rs As New ADODB.Recordset
Public oRpt As CRAXDRT.ReportPrivate Sub Form_Load()Set conn = New ADODB.Connection
 If conn.State = adStateOpen Then conn.Close
    conn.ConnectionTimeout = 3
    conn.ConnectionString = "Provider=SQLOLEDB.1;password=123456;Persist Security Info=True;user ID=sa;Initial Catalog=ceshi;Data Source=abc"
    
    conn.Open
If conn.State = 0 Then
    MsgBox "数据库链接错误,请检查数据库是否打开运行!"
    
Else
'调用水晶报表
   conn.CursorLocation = adUseClient
   If rs.State = adStateOpen Then rs.Close    
    Set rs = New ADODB.Recordset
    rs.Open "select * from F_jiangbei", conn, adOpenDynamic, adLockBatchOptimistic
    Screen.MousePointer = vbHourglass
reportName = "\rpt\jiangbei.rpt"        '定义要引用的rpt文件
Set oRpt = oApp.OpenReport(App.Path & reportName, 1)
oRpt.Database.SetDataSource rs   '连接水晶报表和数据源
oRpt.ReadRecords
CRViewer91.ReportSource = oRpt  '启用水晶报表的预览功能
CRViewer91.ViewReport
Screen.MousePointer = vbDefault
CRViewer91.Refresh
End If
End SubPrivate Sub Form_Resize()
CRViewer91.Top = 0
CRViewer91.Left = 0
CRViewer91.Height = ScaleHeight
CRViewer91.Width = ScaleWidthEnd Sub
Private Sub Form_Unload(Cancel As Integer)
Set rs = Nothing
Set conn = Nothing
Set oRpt = Nothing
Unload MeEnd Sub

解决方案 »

  1.   

    oRpt.ReadRecords 
    CRViewer91.ReportSource = oRpt  '启用水晶报表的预览功能 
    后面加上
    set oRpt=Nothing 
    看看
      

  2.   

    加上set oRpt=Nothing还是一样!
     您是那个“[部署系列之一]轻松搞定水晶报表9.2打包”的作者吧,久仰大名!
    不过我按照你说的方法打包没有成功,在没有安装 “水晶报表9.2”的机器上打开报表是空的
    还望指教一下,VB中调用的就是以上代码,打包后没有错误提示
      

  3.   

    想问一下报表数据量大不大,建议你更换另外一个报表模板(或者给报表一个空数据)看一下
    水晶报表生成时会在本地生成临时文件,如果你的数据量太大,可能是临时文件空间不够导致退出另外建议你将 oRpt.ReadRecords 这句注释oRpt.Database.SetDataSource rs   '连接水晶报表和数据源 
    之前加上DiscardSavedData 打包的问题,,可以参见文章的回复里的一些内容吧,这个是成型方案了:)
      

  4.   

    阿泰您好!我按你说的‘更换另外一个报表模板(或者给报表一个空数据)’还是一样!
    你说的临时文件是指C:\Documents and Settings\Administrator\Local Settings\Temp 吗?
    要是的话我看了一下每次打开报表会生成124K的一个文件,不过我清空临时文件后,还是一样!加上DiscardSavedData  这句故障依旧!
    有些无礼的要求,请别见怪啊 !泰哥能不能给我发个你写的VB连接水晶报表的案例 啊!?(最好也是ADO连接SQL数据库的)我是个初学者,上面崔的紧这个问题实在是困扰我太长时间了!邮箱:[email protected]再次感谢泰哥的回复!
      

  5.   

    看一下这个
    http://www.cnblogs.com/babyt/archive/2005/03/11/116880.html突然想到另外一个问题,你的模板是咋做的?。。连了数据库??
      

  6.   

    是的,我的报表通过ADO连接了SQL数据库,报表字段完全来自数据库
      

  7.   

    因为初学,可能是没能明白“仅字段连接方式创建水晶报”,我的报表采用的是通过ADO连接数据库,在主报表中使用了3个子报表,
    子报表结构和字段相同,只是选择数据时按照时间段选择的,报表页脚是一天数据的汇总
    即数据按每8个小时做个小结,主报表做每天的汇总是不是这种结构的报表不适用以上方式阿!
    也就是说我在VB里打开了数据库,又在报表中打开了数据库,VB中虽然关闭了数据集但报表打开的数据集并没有关闭,这样再次打开程序时导致冲突
    程序才退出的,我这样分析对吗?
    还请泰哥百忙中给与解答!!
      

  8.   

    今天下午我看了你的http://www.cnblogs.com/babyt/archive/2005/03/11/116880.html
    这篇文章,使用你提供的例子,在我机器上运行也出现同样的结果,我想可能是开发环境的问题,我
    的操作系统是windows2003服务器版,我晚上安装win2000再试试!
      

  9.   

    重新安装操作系统、VB6、水晶报表9.2问题解决(还是win2003server)
    出现以上结果的原因可能是在开发过程中安装VS2005引起的,也有可能是
    打包测试时替换掉了一些系统DLL引起,在这里非常感谢阿泰哥!!!