首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

急需解答,该如何解决

2013-01-25 
急需解答通过vb程序传递记录集给水晶报表控件,初学者,很多疑惑,一般要定义什么,怎么传递参数和公式Option

急需解答
通过vb程序传递记录集给水晶报表控件,初学者,很多疑惑,一般要定义什么,怎么传递参数和公式
Option Explicit
Dim crpParamDefs As CRAXDRT.ParameterFieldDefinitions(什么时候需要定义ParameterFieldDefinitions)
Dim crpParamDef As CRAXDRT.ParameterFieldDefinition
Dim rptAP As New CRAXDRT.Application
Dim rptReport As New CRAXDRT.Report
Dim crSections As CRAXDRT.Sections(什么时候需要定义Sections)
Dim crSection As CRAXDRT.Section
Dim crSubReportObjs As CRAXDRT.ReportObjects
Dim crSubReportObj As CRAXDRT.SubreportObject
Dim crSubReport As CRAXDRT.Report
Dim crSectionOptions As CRAXDRT.Section
Dim crExportOption As CRAXDRT.ExportOptions

Private Sub Form_Load()
Dim SourceFile As String
Dim X As Integer
Dim Y As Integer

Screen.MousePointer = vbHourglass

 If FrmMesWipR309.Combotype.Text = "Details" Then(这段代码是什么意思)
  If Right(App.Path, 1) <> "" And Right(App.Path, 1) <> "/" Then
  SourceFile = Trim(App.Path) & "\Report\MesWipR309.rpt"
  Else
  SourceFile = Trim(App.Path) & ".\Report\MesWipR309.rpt"
  End If
  Else
  If Right(App.Path, 1) <> "" And Right(App.Path, 1) <> "/" Then
  SourceFile = Trim(App.Path) & "\Report\MesWipR309_1.rpt"
  Else
  SourceFile = Trim(App.Path) & ".\Report\MesWipR309_1.rpt"
  End If
  End If

    
FrmReportR309.WindowState = 2 '窗口最大化
Set rptReport = rptAP.OpenReport(SourceFile)
rptReport.Database.Tables(1).SetDataSource TTXRs, 3

Set crpParamDefs = rptReport.ParameterFields(这段代码是什么意思,是传递参数给rpt文件吗?)
For Each crpParamDef In rptReport.ParameterFields
  With crpParamDef
  Select Case .ParameterFieldName
  Case "mat"
  .AddCurrentValue mat
  Case "mattype"
  .AddCurrentValue mattype
  Case "user"
  .AddCurrentValue puser
  End Select
  End With
Next

CRViewer1.ReportSource = rptReport
CRViewer1.ViewReport '//显示报表
Screen.MousePointer = vbDefault
    

End Sub
Private Sub Form_Resize()
CRViewer1.Top = 0
CRViewer1.Left = 0
CRViewer1.Height = ScaleHeight
CRViewer1.Width = ScaleWidth

End Sub

Private Sub Form_Unload(Cancel As Integer)
Set crpParamDefs = rptReport.ParameterFields
For Each crpParamDef In rptReport.ParameterFields
  With crpParamDef
  Select Case .ParameterFieldName
  Case "mat"
  .ClearCurrentValueAndRange
  Case "mattype"
  .ClearCurrentValueAndRange
  Case "pUser"
  .ClearCurrentValueAndRange
  End Select
  End With
Next
Set crpParamDef = Nothing
Set crpParamDefs = Nothing
Set rptReport = Nothing
TTXRs.Close
Set TTXRs = Nothing


End Sub


[解决办法]
我倒是用过太久,已经没太多印象了.大略说一下:

Dim crpParamDefs As CRAXDRT.ParameterFieldDefinitions(什么时候需要定义ParameterFieldDefinitions)
Dim crpParamDef As CRAXDRT.ParameterFieldDefinition
在设计报表模板时,可以设置某些数据库中不存在的字段,在生成时由用户传参进来,显示在设计时指定的位置.
所以当你有这种需要时,就在设计模板中指定某个字段的属性(是连哪个库哪个表哪个字段,或者是你要传参的参数字段).

If FrmMesWipR309.Combotype.Text = "Details" Then(这段代码是什么意思)
这个和水晶报表无关.这是根据在显示报表之前的选项窗体FrmMesWipR309中的下拉组合框的选择,是详情就显示详情报表,是其它种类报表就显示其它种类.每个种类都有一个模板.就是下面的SourceFile = Trim(App.Path) & "\Report\MesWipR309.rpt" 中的RPT文件,是在VB中报表设计器里设计的模板.

Set crpParamDefs = rptReport.ParameterFields(这段代码是什么意思,是传递参数给rpt文件吗?)
对,你已经悟道了.

热点排行