给你一个例子 基本可以传递参数 到水晶报表 可以查询 并且可以将参数字段显示为你需要的值
以前采用vb6做的动态传递水晶报表参数字段,存在一个缺陷就是在设计水晶报表的时候没有按照注释的那里写的(直接拖参数字段到预览的界面)就不会出现水晶报表提示要输入离散值的消息框。其实也不完全是这样的,有时我按照这种方式操作仍然有这个输入离散值消息框的提示,具体是什么原因造成的还不是很清楚,估计开发水晶报表的明白内部机制的原因,我只想能顺畅的使用就可以了,可出现不相关的输入提示就直接影响到客户使用程序。
我在做DotNet2005时用的是水晶报表10,在传递参数后。有加入了设置显示报表控件的参数对象集合为传递的参数值【CRViewer91.ParameterFieldInfo = m_Report.ParameterFields 】运行程序就没有这个输入离散值的提示。vb6使用水晶报表9.0不知道加入这个设置是否能解决问题。暂时我还没有条件测试主要是计算机上没有安装水晶报表9,不过也是一种解决这个问题的办法。先在这里保存起来,待有条件了测试下,没有这条语句可能在设计报表rpt文件的时候和程序动态调用可就要来回的测试了 。 哈~~~~~~
Private Sub DisplayReport1()
'' ==========================================================
' 开发人员:段利庆
' 编写时间:2008-09-01
' 过程名称:DisplayReport
' 参数说明:
' 功能说明:动态载入水晶报表文件(*.rpt)显示打印预览
'
' 其他说明:程序采用的是Crystal Reports 9.1版本
' 工程引用:Crystal Reports 9 ActiveX Designer Design and Runtime Library
' 控件:CRViewer91
'
'
'' ==========================================================
'*中央错误处理
On Error GoTo PROC_ERR
Dim m_Application As New CRAXDDRT.Application
Dim m_Report As CRAXDDRT.Report
Dim strSQL As String
strSQL = "SELECT * FROM 视图_收费_计量仪表 "
Dim strRptPath As String
strRptPath = App.Path & "\Crystal_RPT_Para\Sell_Meter.rpt"
Debug.Print "strRptPath:" & strRptPath
Set m_Report = Nothing
Set m_Report = m_Application.OpenReport(strRptPath, 1)
'*防止弹出水晶报表数据库登录对话框
m_Report.Database.Tables.Item(1).TestConnectivity
m_Report.Database.Tables.Item(1).ConnectBufferString = objdata.ConnectionString
m_Report.SQLQueryString = strSQL
'****************************************************
'*参数字段传递参数
'*
'*搞了2天了终于找到原因了 08-09-03
'*1.在新建一个参数字段,一定要直接拖放到预览里面
'* 否则拖到设计里面就要弹出输入离散值的消息框
'*
'*2.GetItemByName("MyParaT") 参数是参数字段的名称
'*
m_Report.DiscardSavedData
m_Report.ParameterFields.GetItemByName("MyParaT").ClearCurrentValueAndRange
m_Report.ParameterFields.GetItemByName("MyParaT").AddCurrentValue (Text1.Text)
m_Report.ParameterFields.GetItemByName("k1").ClearCurrentValueAndRange
m_Report.ParameterFields.GetItemByName("k1").AddCurrentValue (Text1.Text)
m_Report.ParameterFields.GetItemByName("k2").ClearCurrentValueAndRange
m_Report.ParameterFields.GetItemByName("k2").AddCurrentValue (Text1.Text)
'*-----------------------------------------------------
'* 以下这句是否能彻底解决弹出离散值输入框问题
'*是根据vb2005 Crystal Report10 顺畅的处理结果得出的
'*2009-08-26
'CRViewer91.ParameterFieldInfo = m_Report.ParameterFields
'*传递的对象 用下面的语句
'*Set CRViewer91.ParameterFieldInfo = m_Report.ParameterFields
'*-----------------------------------------------------
'****************************************************
CRViewer91.DisplayGroupTree = False
CRViewer91.ReportSource = m_Report
CRViewer91.Zoom 1
CRViewer91.ViewReport
'*结束子程序
PROC_EXIT:
Exit Sub
'*错误处理,显示出错信息
PROC_ERR:
MsgBox " ErrNumber: " & Err.Number & vbCrLf & _
"ErrDescription: " & Err.Description & vbCrLf & _
" Module: " & Me.Caption & vbCrLf & _
" Procedure: " & "DisplayReport"
GoTo PROC_EXIT
End Sub
楼主何必这么麻烦,直接用FineReport这一种报表工具,就可以实现你想要的效果。在FineReport中连接数据库时,直接通过SQL语句即可实现筛选,或者先把字段都选进来,再通过“过滤条件”或“条件属性”实现结果集筛选。并且FineReport能与Excel实现互相导入导出,非常方便。
我觉得 你可以在 vb中定义一些 参数 传到 水晶报表中 然后再 水晶报表选择条件里面做处理就可以实现了
我去试下