在修改上个世纪末开发的一个系统时,首次使用了水晶报表,加上是英文版,遇到了不少对于我来说的新鲜问题:
1.如何实现报表与VB程序之间的参数传递--使用formulas:
  示例:Crp2.ReportFileName = App.Path + "\test.rpt"
       Crp2.Formulas(0) = "name=" & "{mhpinyin.name}"     ‘为第一个变量formulas赋值,name是formulas的ID
       Crp2.Action = 1
2.如何有选择地打印相关数据:
  示例:Crp2.ReportFileName = App.Path + "\test.rpt"
        Crp2.SelectionFormula = "{mhpinyin.xh}>3 "   ’只将序号xh大于3的记录打印
       Crp2.Formulas(0) = "name=" & "{mhpinyin.name}"
       Crp2.Action = 1  
3.如何对所选域的值进行重新定义:
       Crp2.ReportFileName = App.Path + "\test.rpt"
      Crp2.SelectionFormula = "{mhpinyin.xh}>3 "    
      Crp2.Formulas(0) = "name=" & "{mhpinyin.name}"
      Crp2.Formulas(1) = "xh=" & "If{mhpinyin.xh}=4 Then '定义1' Else '定义2'"    '当序号xh等于4时,将‘定义1’赋予xh,若不等于4,则赋值‘定义2’
      Crp2.Action = 1  另外,在同一窗体最好不要使用两个水晶控件,否则当分别调用打印后,当关闭当前窗体时,VB平台将报异常,并强行退出。如果需要调用两个报表模板时,可根据相关条件分别对Crp的ReportFileName的值进行分别赋值,然后调用。希望此帖能对同志们有所帮助!待续....
      
      

解决方案 »

  1.   

    另外,在使用数据集进行水晶报表的打印时,对于列表项目名称进行重新命名时,可以对SQL语句进行处理:示例:SQL="select name as [名字] ,xh as [序号] from mhPinyin where name='111'",也就是使用别名的方法,就可以实现报表中的列表项目名称的重新定义。
      

  2.   

    另外,在同一窗体最好不要使用两个水晶控件,否则当分别调用打印后,当关闭当前窗体时,VB平台将报异常,并强行退出。如果需要调用两个报表模板时,可根据相关条件分别对Crp的ReportFileName的值进行分别赋值,然后调用。