我用VB把水晶报表直接连接SQL数据库,能显示出报表。但只有第一次打开的数据是正确的,第二次以后不管你要显示什么它都是显示你第一次显示的那些记录。更改了第一次的记录源,它还显示那此记录。我把“数据和报表一起保存”那些设置都设好了,也试着用report1.DiscardSavedData=True但提示不能给常量赋值?奇怪,该设的我都设了但就是不行。谁有没有办法?谢谢了!

解决方案 »

  1.   

    这个问题我遇到过,记的每次关闭打印报表时关闭报表就可以了。
    解决记得给分呀!
    Private Sub DataReport_QueryClose(Cancel As Integer, CloseMode As Integer)DataReport.rsSQL_2.Close
    End Sub
      

  2.   

    虽然这个问题已经过了很久,但是我想初学者都会遇到这样的问题,我也刚刚解决了这个问题。网上很多都说用代码改,但都说不清楚,很难懂,而我的方法很简单,不用改报表的参数,只需要添加一常见的控件,代码如下,希望我的回复会对个位有帮助:
    我用vb6.0  ,Crystal Reports 9,首先在vb工程中添加一个带有自动生成form1的Crystal Reports 9,其实那个form1里有一个CRViewer9控件,名为CRViewer91,用来显示表报的,然后设计好报表
     接下来就更新数据的关键:
        
          首先在form1添加一个timer控件,其名为timer1 ,如下编辑代码: 注意红色、部分dim time_count as intger              ’定义一个循环变量      
    Dim Report As New CrystalReport1      ’生成水晶报表时已有的代码
    -----------------------------------------
    private sub form_load()               
        time_count = 0                    ' 循环变量 相当于 i
        Timer1.Enabled = True             '必须使得他能用,负责不能工作
        Timer1.Interval = 1000             '设置 timer 控件 开始运行时间/运行时间间隔
           Screen.MousePointer = vbHourglass    ’生成水晶报表时已有的代码
        CRViewer91.ReportSource = Report
        CRViewer91.ViewReport
        Screen.MousePointer = vbDefault
    End Sub
    ------------------------------
    Private Sub Form_Resize()                   ’生成水晶报表时已有的代码
    CRViewer91.Top = 0
    CRViewer91.Left = 0
    CRViewer91.Height = ScaleHeight
    CRViewer91.Width = ScaleWidthEnd Sub
    ----------------------------------
    Private Sub Timer1_Timer()            'timer 控件的具体操作
     time_count = time_count + 1
     If time_count < 2 Then
        [color=#0000FF]CRViewer91.Refresh                 
    '更新水晶报表
     End If
     Timer1.Enabled = False                 '禁用timer 控件
    End Sub[/color]
    思路是:打开form1后,1-2秒内,进行一到两次CRViewer91.Refresh 操作,注意,1、但使用CRViewer91.Refresh 不用timer控件是不行了,我试过很多遍;2。Timer1.Interval 的设置要与报表的数据流量成正比,否则会出现未连接好数据就要更新的出错问题。其实代码可以更简单,看各位领悟。              
    再次感谢帮助我解决过问题的网友、网站和我自己~~
      

  3.   

    如果是用DSR,请你在加载报表前先用Unload将其卸载
    如果是用RPT请在加载数据前用DiscardSavedData方法清空前一次的数据