我在做一个项目要用到水晶报表,碰到了一个困难,忘各位大虾帮帮忙,具体是这样的,我用VB6.0语言从数据库中有条件的选取字段显示在报表了,而条件(也就是SELECT语句中的WHERE后面的部分)我是通过2个TEXT来输入的,问题是现在要把这2个条件的内容也显示到水晶报表里,比如说我的一个查询条件是日期,我用的报表是交叉表,我想把这个字段显示到报表里,注意,它是类似单元格的显示,我想把它放在标题旁边,它不是象表里那样的整列的显示,否则我只要把它绑到表里就行了。我估计这要用到参数的传递,我到网上找了许多关于水晶报表的参数传递,我都不会用我没怎么学过VB,各位大虾救救我!

解决方案 »

  1.   

    [email protected],谢谢了,分我会给的。
      

  2.   

    问题是现在要把这2个条件的内容也显示到水晶报表里,比如说我的一个查询条件是日期,我用的报表是交叉表,我想把这个字段显示到报表里,注意,它是类似单元格的显示,我想把它放在标题旁边,它不是象表里那样的整列的显示,否则我只要把它绑到表里就行了。我估计这要用到参数的传递,我到网上找了许多关于水晶报表的参数传递,我都不会用我没怎么学过VB,各位大虾救救我!
    //水晶报表的显示的其实是Recordset。
    我不清楚你现在会使用那一种方式连接。如果你学会ttx方式你就会明白,实际水晶报表是一个模板,当对应的Recordset传递过去以后,它会自己把对应字段的的recordset显示出来所以,原理很简单。你需要建立一个虚拟Recordset,这个Recordset不是通过connection产生,ado中间有append方法,使用ttx的方式在水晶报表中间建立起对应的字段,传递以后,自然会显示。你主表内容的显示是正确的。你google下ttx在水晶报表中间的应用,了解了就会非常清楚。luck
      

  3.   

    把这个放到水晶报表生成的窗体里
    Dim rs As ADODB.Recordset
    Dim Report As New CrystalReport4
    Dim msgtext As StringPrivate Sub Form_Load()
      Dim strsql As String
      Set Report = Nothing
      strsql = "select * from tmp_B04" '这个地方你可以写你的条件
      Set rs = ExecuteSQL(strsql, msgtext)
      Report.Database.SetDataSource rs
      Screen.MousePointer = vbHourglass
      CRViewer1.ReportSource = Report
      CRViewer1.ViewReport
      Screen.MousePointer = vbDefault
    End SubPrivate Sub Form_Resize()
      CRViewer1.Top = 0
      CRViewer1.Left = 0
      CRViewer1.Height = ScaleHeight
      CRViewer1.Width = ScaleWidth
    End SubPrivate Sub Form_Unload(Cancel As Integer)
      Set Report = Nothing
    End Sub
    把下面的代码放到类模块中,注意要引用ado
    Dim msgtext As String
    Dim mrc As ADODB.RecordsetPublic 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 FunctionPublic 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