水晶报表中定义的参数字段,如何在水晶报表预览前,将实际的值传递给它们

时间:2022-03-22 00:31:24
水晶报表中定义的参数字段,如何在水晶报表预览前,将实际的值传递给它们。

比如已经定义的参数字段为 1、用户姓名 (注字符型)  2、用户编号 (注:数值型)

谢谢大家。

5 个解决方案

#1


顶一下,顶一下

#2



Dim myReport As CRAXDRT.Report
Dim Report_App As CRAXDRT.Application
  
Set Report_App = New CRAXDRT.Application
Set myReport = Report_App.OpenReport("d:\123.rpt")
  
'绑定水晶报表数据源
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select * from 购物记录表", dbConnection, adOpenKeyset, adLockReadOnly
myReport.Database.Tables(1).SetDataSource rs
Set rs = Nothing
 
‘替换参数字段
Call EditField("xm", "张三")                   '假定你在水晶报表里面定义了一个名为xm的参数字段,这里用“张三”替换对应的内容
Call EditField("totalmoney", "35.22") 
…………

'显示报表预览  
With CRViewer1
        .ReportSource = myReport
          
        .EnableGroupTree = False
        .EnableAnimationCtrl = False
        .EnableDrillDown = False
        .EnableHelpButton = False
        .EnablePopupMenu = False
        .EnableSearchControl = False
        .EnableSearchExpertButton = False
        .EnableSelectExpertButton = False
        .EnableStopButton = False
  
        .ViewReport
End With
 
Private Sub EditField(strSource As String, strReplace As String)
    Dim i As Long
    For i = 1 To myReport.FormulaFields.Count
        If myReport.FormulaFields(i).FormulaFieldName = strSource Then
            myReport.FormulaFields(i).Text = "'" & strReplace & "'"
            Exit Sub
        End If
    Next
End Sub

#3


引用 2 楼 CityBird 的回复:

Dim myReport As CRAXDRT.Report
Dim Report_App As CRAXDRT.Application
  
Set Report_App = New CRAXDRT.Application
Set myReport = Report_App.OpenReport("d:\123.rpt")
  
'绑定水晶报表数据源
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select * from 购物记录表", dbConnection, adOpenKeyset, adLockReadOnly
myReport.Database.Tables(1).SetDataSource rs
Set rs = Nothing
 
‘替换参数字段
Call EditField("xm", "张三")                   '假定你在水晶报表里面定义了一个名为xm的参数字段,这里用“张三”替换对应的内容
Call EditField("totalmoney", "35.22") 
…………

'显示报表预览  
With CRViewer1
        .ReportSource = myReport
          
        .EnableGroupTree = False
        .EnableAnimationCtrl = False
        .EnableDrillDown = False
        .EnableHelpButton = False
        .EnablePopupMenu = False
        .EnableSearchControl = False
        .EnableSearchExpertButton = False
        .EnableSelectExpertButton = False
        .EnableStopButton = False
  
        .ViewReport
End With
 
Private Sub EditField(strSource As String, strReplace As String)
    Dim i As Long
    For i = 1 To myReport.FormulaFields.Count
        If myReport.FormulaFields(i).FormulaFieldName = strSource Then
            myReport.FormulaFields(i).Text = "'" & strReplace & "'"
            Exit Sub
        End If
    Next
End Sub


非常感谢,但是
这个循环查找项是不是有些复杂,不能直接根据参数名直接给对应项赋值吗?

#5


引用 4 楼 Tiger_Zhao 的回复:
VB6加水晶报表9,不知怎样传入参数


非常感谢。

汇总一些有用的资料:
一:
  '进行参数设置演示:报表模板中增加了3个参数
    '阿泰:2004-12-15,新增
    '让模板中设置的参数不出现提示框!!!!
    objCRReport.EnableParameterPrompting = False      '不进行报表参数提示
    
    '先清理可能存在的参数默认值等,一定要做。这里使用序号来依次操作
    '如果参数多的话可以使用循环等技巧来清理
    objCRReport.ParameterFields(1).ClearCurrentValueAndRange
    objCRReport.ParameterFields(2).ClearCurrentValueAndRange
    objCRReport.ParameterFields(3).ClearCurrentValueAndRange
    '进行赋值
    '注意如果有时候此处出现错误提示,那么就要查看
    '1-传入的参数是否有值
    '2-参数的类型是否匹配,可能要进行类型转换后才能传入
    '3-传入参数的值的序号是否对应
    Call objCRReport.ParameterFields(1).AddCurrentValue("公司名称测试1")
    Call objCRReport.ParameterFields(2).AddCurrentValue(CDate("2004-12-10"))
    Call objCRReport.ParameterFields(3).AddCurrentValue(100) 
二、
    Report.DiscardSavedData
    Report.ParameterFields.GetItemByName("companyname").ClearCurrentValueAndRange
    Report.ParameterFields.GetItemByName("companyname").AddCurrentValue ("荣华富贵物业")

#1


顶一下,顶一下

#2



Dim myReport As CRAXDRT.Report
Dim Report_App As CRAXDRT.Application
  
Set Report_App = New CRAXDRT.Application
Set myReport = Report_App.OpenReport("d:\123.rpt")
  
'绑定水晶报表数据源
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select * from 购物记录表", dbConnection, adOpenKeyset, adLockReadOnly
myReport.Database.Tables(1).SetDataSource rs
Set rs = Nothing
 
‘替换参数字段
Call EditField("xm", "张三")                   '假定你在水晶报表里面定义了一个名为xm的参数字段,这里用“张三”替换对应的内容
Call EditField("totalmoney", "35.22") 
…………

'显示报表预览  
With CRViewer1
        .ReportSource = myReport
          
        .EnableGroupTree = False
        .EnableAnimationCtrl = False
        .EnableDrillDown = False
        .EnableHelpButton = False
        .EnablePopupMenu = False
        .EnableSearchControl = False
        .EnableSearchExpertButton = False
        .EnableSelectExpertButton = False
        .EnableStopButton = False
  
        .ViewReport
End With
 
Private Sub EditField(strSource As String, strReplace As String)
    Dim i As Long
    For i = 1 To myReport.FormulaFields.Count
        If myReport.FormulaFields(i).FormulaFieldName = strSource Then
            myReport.FormulaFields(i).Text = "'" & strReplace & "'"
            Exit Sub
        End If
    Next
End Sub

#3


引用 2 楼 CityBird 的回复:

Dim myReport As CRAXDRT.Report
Dim Report_App As CRAXDRT.Application
  
Set Report_App = New CRAXDRT.Application
Set myReport = Report_App.OpenReport("d:\123.rpt")
  
'绑定水晶报表数据源
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open "select * from 购物记录表", dbConnection, adOpenKeyset, adLockReadOnly
myReport.Database.Tables(1).SetDataSource rs
Set rs = Nothing
 
‘替换参数字段
Call EditField("xm", "张三")                   '假定你在水晶报表里面定义了一个名为xm的参数字段,这里用“张三”替换对应的内容
Call EditField("totalmoney", "35.22") 
…………

'显示报表预览  
With CRViewer1
        .ReportSource = myReport
          
        .EnableGroupTree = False
        .EnableAnimationCtrl = False
        .EnableDrillDown = False
        .EnableHelpButton = False
        .EnablePopupMenu = False
        .EnableSearchControl = False
        .EnableSearchExpertButton = False
        .EnableSelectExpertButton = False
        .EnableStopButton = False
  
        .ViewReport
End With
 
Private Sub EditField(strSource As String, strReplace As String)
    Dim i As Long
    For i = 1 To myReport.FormulaFields.Count
        If myReport.FormulaFields(i).FormulaFieldName = strSource Then
            myReport.FormulaFields(i).Text = "'" & strReplace & "'"
            Exit Sub
        End If
    Next
End Sub


非常感谢,但是
这个循环查找项是不是有些复杂,不能直接根据参数名直接给对应项赋值吗?

#4


#5


引用 4 楼 Tiger_Zhao 的回复:
VB6加水晶报表9,不知怎样传入参数


非常感谢。

汇总一些有用的资料:
一:
  '进行参数设置演示:报表模板中增加了3个参数
    '阿泰:2004-12-15,新增
    '让模板中设置的参数不出现提示框!!!!
    objCRReport.EnableParameterPrompting = False      '不进行报表参数提示
    
    '先清理可能存在的参数默认值等,一定要做。这里使用序号来依次操作
    '如果参数多的话可以使用循环等技巧来清理
    objCRReport.ParameterFields(1).ClearCurrentValueAndRange
    objCRReport.ParameterFields(2).ClearCurrentValueAndRange
    objCRReport.ParameterFields(3).ClearCurrentValueAndRange
    '进行赋值
    '注意如果有时候此处出现错误提示,那么就要查看
    '1-传入的参数是否有值
    '2-参数的类型是否匹配,可能要进行类型转换后才能传入
    '3-传入参数的值的序号是否对应
    Call objCRReport.ParameterFields(1).AddCurrentValue("公司名称测试1")
    Call objCRReport.ParameterFields(2).AddCurrentValue(CDate("2004-12-10"))
    Call objCRReport.ParameterFields(3).AddCurrentValue(100) 
二、
    Report.DiscardSavedData
    Report.ParameterFields.GetItemByName("companyname").ClearCurrentValueAndRange
    Report.ParameterFields.GetItemByName("companyname").AddCurrentValue ("荣华富贵物业")