fastreport我觉得好用,功能也强大.
我在用得过程中,觉得有一个难点,就是如何在它的设计期得到不是它所关联的数据集的值,我说的是在设计期,因为报表肯定会提供给客户自己来设计,如果不能方便的提供给用户查询的接口,用户肯定会很难接受.
打个比如:在一个报表所关联的数据表中,只有一个custid(客户号),没有custname(客户名),要打印出这个客户名,需要从数据库客户表中,查询到这个custid的custname信息,通常采取如下办法:
1,为报表定义变量,设计的时候添加这个变量到memo当中,然后在程序中为这个变量写代码赋值,用ongetvalue事件来处理,或用数据词典来处理,但这个方法需要在程序中写代码,不可能为用户设计一个报表,又要改程序,并且这里定义的变量,还不能在每个报表里面通用,像fastreport定义的#page那样的变量,在哪张报表上都可用就好了.
2,还有一个办法就是利用fastreport提供的可自已定义函数的功能,然后注册到fastreport里面,这样客户在设计报表时,只要在memo中添加这个函数,设置好相应的参数,就能得到这个custname的值,这个就比较方便了.
但问题是报表中的一些内容并不是所有都在数据库当中的,如存储过程的查询日期(这在客户报表当中经常用到的),登陆程序的用户名(用来在报表上显示:制表:XXX),或者程序界面上的编辑框里面的一个数字;这些数据又怎么能在报表设计中直接方便的得到呢?
用变量来处理,必须得在程序中写代码,每为一个报表就要修改程序,晕,
用函数数来处理?怎样定义这个函数来获得这个查询日期或者程序界面上的一些东西.
我心中最理想的效果是,如同fastreport里面自带的全局变量#date,#page那样,在哪个报表里面都可以用. 不知道我说明白了没有,有哪位高手可以讨论指点一下,有没有可能实现这样的功能?
我在用得过程中,觉得有一个难点,就是如何在它的设计期得到不是它所关联的数据集的值,我说的是在设计期,因为报表肯定会提供给客户自己来设计,如果不能方便的提供给用户查询的接口,用户肯定会很难接受.
打个比如:在一个报表所关联的数据表中,只有一个custid(客户号),没有custname(客户名),要打印出这个客户名,需要从数据库客户表中,查询到这个custid的custname信息,通常采取如下办法:
1,为报表定义变量,设计的时候添加这个变量到memo当中,然后在程序中为这个变量写代码赋值,用ongetvalue事件来处理,或用数据词典来处理,但这个方法需要在程序中写代码,不可能为用户设计一个报表,又要改程序,并且这里定义的变量,还不能在每个报表里面通用,像fastreport定义的#page那样的变量,在哪张报表上都可用就好了.
2,还有一个办法就是利用fastreport提供的可自已定义函数的功能,然后注册到fastreport里面,这样客户在设计报表时,只要在memo中添加这个函数,设置好相应的参数,就能得到这个custname的值,这个就比较方便了.
但问题是报表中的一些内容并不是所有都在数据库当中的,如存储过程的查询日期(这在客户报表当中经常用到的),登陆程序的用户名(用来在报表上显示:制表:XXX),或者程序界面上的编辑框里面的一个数字;这些数据又怎么能在报表设计中直接方便的得到呢?
用变量来处理,必须得在程序中写代码,每为一个报表就要修改程序,晕,
用函数数来处理?怎样定义这个函数来获得这个查询日期或者程序界面上的一些东西.
我心中最理想的效果是,如同fastreport里面自带的全局变量#date,#page那样,在哪个报表里面都可以用. 不知道我说明白了没有,有哪位高手可以讨论指点一下,有没有可能实现这样的功能?
如:
procedure TfrmMain.frReportGetValue(const ParName: String;
var ParValue: Variant);
begin
if ParName = '企业名称' then
ParValue:= Edit.Text
...
end;
在报表设计界面memo中输入[企业名称],在打印报表时就会将Edit编辑框内容显示出
不知道是不是楼主想要的