Private Sub Command1_Click()    Dim capp As New CRAXDDRT.Application
    Dim carp As New CRAXDRT.Report
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strsql As String
    Dim i As Integer
    
    If cn.State = adStateOpen Then cn.Close
    With cn
    .ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=STIS5_DEMO;Data Source=LGQ"
    .Open
    End With
    
    strsql = "select * from [UserAccount] where LOGINNAME='LGQ'"
    If rs.State = adStateOpen Then rs.Close
    With rs
    .ActiveConnection = cn
    .CursorLocation = adUseClient
    .Open strsql, cn, adOpenDynamic, adLockOptimistic
    End With
    
    Set carp = capp.OpenReport(App.Path + "\Report2.rpt")
    For i = 1 To carp.Database.Tables.Count
        If carp.Database.Tables.Item(i).Name = "USERACCOUNT" Then
            carp.Database.Tables(i).SetDataSource rs
        End If
    Next
    Screen.MousePointer = vbHourglass
    CRViewer91.ReportSource = carp
    
    CRViewer91.ViewReport
    Screen.MousePointer = vbDefault
    CRViewer91.Zoom 100
    '----------------------
    Screen.MousePointer = vbDefault
    Crviewer91.refresh    '刷新,这里搞不定
'CRViewer91_RefreshButtonClicked True
End Sub各位大哥,请帮帮忙。
我的需求是每次只选出一条记录,然后显示用水晶报表打印,因为在设计报表的时候没有过滤记录,所以加载后显示的是全部的记录,按方面的方法重设记录集后,刷新不起作用,但用控件上的刷新按钮可以刷新,请问这是怎么回事?有什么方法可以解决吗,我用的是9.2版本的。
另,水晶报表里可以带参数进去吗?我的想法是最好这样,我带一个参数到水晶报表里去,然后它根据这个参数选择合适的记录,然后显示出来,如果可以,请帮我提供一些代码或是资料,在此感谢。

解决方案 »

  1.   

    Screen.MousePointer = vbHourglass
    '''显示方式一:情况为报表直接在工程设计器中制作(Dsr文件)
    '---------------------
    ''CRViewer91.ReportSource = Report
    ''CRViewer91.ViewReport
    '----------------------
    '显示方式二:情况为报表在水晶报表软件中制作(rpt文件)
    Dim capp As New CRAXDDRT.Application
    Dim carp As New CRAXDRT.Report
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strsql As String
    Dim i As Integer
    If cn.State = adStateOpen Then cn.Close
    '''''SQL SERVER连接方式
    '''With cn
    '''.Provider = "sqloledb"
    '''.ConnectionString = "data source=dd;initial catalog=dfd;user id=sa;password=aaa"
    '''.Open
    '''End With
    'Mdb的连接方式
    With cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    '.ConnectionString = "Data Source='" + App.Path + "\temp.mdb;Jet OLEDB:Engine Type=5;Locale Identifier=0x0804;Jet OLEDB:Database Password="
    .ConnectionString = "Data Source=" + App.Path + "\Test.mdb;Persist Security Info=False"
    .Open
    End Withstrsql = "select * from carsort"
    If rs.State = adStateOpen Then rs.Close
    With rs
    .ActiveConnection = cn
    .CursorLocation = adUseClient
    .Open strsql, cn, adOpenDynamic, adLockOptimistic
    End WithSet carp = capp.OpenReport(App.Path + "\CryStalTest.rpt")
    For i = 1 To carp.Database.Tables.Count
    If carp.Database.Tables.Item(i).Name = "carsort" Then
    carp.Database.Tables(i).SetDataSource rs
    End If
    Next
    Screen.MousePointer = vbHourglass
    '第一种方式
    ''carp.ParameterFields(1).ClearCurrentValueAndRange
    ''carp.ParameterFields(1).AddCurrentValue ("myhgyp")
    ''carp.ParameterFields(2).ClearCurrentValueAndRange
    ''carp.ParameterFields(2).AddCurrentValue (CInt("3"))
    carp.ParameterFields.GetItemByName("gg").ClearCurrentValueAndRange
    carp.ParameterFields.GetItemByName("gg").AddCurrentValue ("myh111111111111111111111111111111111111" & Chr(13) & Chr(10) & "-22222222222222222222222222222222222222222222222222222222222gyp")
    'carp.ParameterFields.GetItemByName("gg").AddCurrentValue ("myhgyp")
    carp.ParameterFields.GetItemByName("ff").ClearCurrentValueAndRange
    carp.ParameterFields.GetItemByName("ff").AddCurrentValue (CInt("673"))
    CRViewer91.ReportSource = carpCRViewer91.ViewReport
    Screen.MousePointer = vbDefault
    CRViewer91.Zoom 100
    '----------------------
    Screen.MousePointer = vbDefault