一般使用水晶报表进行报表开发时,都要先指定数据库连接。
但是如果我们从事三层开发时,一般是不允许水晶报表直接访问数据库的,而是通过你的数据库处理层返回数据给水晶报表
其实我们可以使用水晶报表中的字段定义作为数据来源,来彻底摆脱与数据库的直接联系,
从而开发出便于发布以及摆脱数据库限制的报表系统。

当然使用该字段定义的方式进行报表的开发,比使用水晶报表直接连接数据库操作来说
增加了一些开发的过程,但是我想相对来说,还是值得的。
 

本文基于VB6和水晶报表9.2实现

在第一部分中,我来讲解该类模板的制作,这部分很简单的。我实际操作并抓图示例,相信大家一看就明白。





使用字段定义功能在水晶报表中是使用一个单独的dll实现的,水晶报表默认安装时没有这个组件。
所以可能需要重新补充安装一下,进行定制安装增加该功能组件。




如果字段设置完毕,点击右上角的叉,将这个文件保存。


保存完毕后,就可以参考原来与数据库连接一样的方式来制作报表模板了


做好的报表模板如下


其实这个字段定义文件很简单,打开看看

其中的间隔是一个TAB制表位,等熟悉了以后可以自己用文本工具做这个文件就可以了。

在下一节中我用VB做一个完整的程序来给进行演示。
 

 

新建一个vb工程,增加水晶报表设计及运行组件的引用,在界面上增加一个Viewer控件。

运行的结果就是把在(1)中所做的模板加载数据后显示出来

核心代码:

   '--------------------------------------------------
    '创建报表
    '--------------------------------------------------
    '加载报表模板

    Set objCRReport = objCRApp.OpenReport(App.Path & "\Report1.rpt", 1)
    '加载报表字段定义文件
    Set props = objCRReport.Database.Tables(1).ConnectionProperties
    For Each prop In props
        If InStr(prop.Name, "Field Definition File") > 0 Then
           prop.Value = App.Path & "\Users.ttx"
           Exit For
        End If
    Next
    Set props = Nothing
    '清除报表中保持的数据
    objCRReport.DiscardSavedData
    '赋给报表数据
    objCRReport.Database.SetDataSource rst

请在此处下载完整的代码(VB+水晶报表9.2) ,程序有完整注释,你可以当作开发模板使用

原文发表于:
http://www.cnblogs.com/babyt/archive/2005/03/11/116878.html
http://www.cnblogs.com/babyt/archive/2005/03/11/116880.html