设计目的:
在主程序中通过用两个combobox组件来取得要查询的年份和月份,打印出满足这两个条件的所有记录报表。结果失败,情况如下:(盼高手解决一下) 一、在程序中用同样的查询语句可以得到正常结果
select * from 表 where year(日期)='''+combobox1.text+''' and month(日期)='''+combobox2.text+'''
二、在fastreport3.2报表中建立两个变量myyear mymonth
三、在adoquery组件(报表里的)sql属性中加入
select * from 表 where year(日期)='''+myyear+''' and month(日期)='''+mymonth+'''
执行后什么数据都没取到,也不出错,为什么?
四、特别为了验证两变量是否取到值,在报表中用两个memo来显示这两个变量内容,可以显示出来。
五、为了验证数据查询,条件直接用 where year(日期)=2006 and month(日期)=4
可以正常取得数据值到设计的表中。
在主程序中通过用两个combobox组件来取得要查询的年份和月份,打印出满足这两个条件的所有记录报表。结果失败,情况如下:(盼高手解决一下) 一、在程序中用同样的查询语句可以得到正常结果
select * from 表 where year(日期)='''+combobox1.text+''' and month(日期)='''+combobox2.text+'''
二、在fastreport3.2报表中建立两个变量myyear mymonth
三、在adoquery组件(报表里的)sql属性中加入
select * from 表 where year(日期)='''+myyear+''' and month(日期)='''+mymonth+'''
执行后什么数据都没取到,也不出错,为什么?
四、特别为了验证两变量是否取到值,在报表中用两个memo来显示这两个变量内容,可以显示出来。
五、为了验证数据查询,条件直接用 where year(日期)=2006 and month(日期)=4
可以正常取得数据值到设计的表中。
实际上值已经传递进去了,能够通过memo显示。也就是我在主程序中选择A年B月,在打印时MEMO里就可打印出相应的值。但是就是不能在报表中添加的adoquery的sql语句中引用。开始我也考虑是类型的问题,后来觉得好象不是。
言先生答非所问了,获取可以多种方法,我都能将变量传进报表,能通过MEMO显示,就是不能在查询语句中引用该值。
另外换个思路。能不能通过什么组件和设置,直接调用我在主程序中查询到的数据集来作为报表的数据来源。因为初接触fastreport3,不怎么熟悉,又没什么有用的资料,只好摸索着搞。周围也没一个懂的。
我现在不是要在delphi中得到fr的变量值,而是要在fr中的adoquery中的sql属性中的语句中把从delphi传给fr的两个变量值作为查询条件的呀。
其实说起来也简单的事呀,就是实现以程序中两个combobox的选择值作为查询条件从数据库中取出数据打出来。在程序中我用了一个DBGRID显示结果,同时希望按照一定格式打出查询结果。
你的过程是不是这样的:
1)在FR中设置查询条件
2)传给AdoQuery并执行,取得数据集
3)然后在FR中预览打印
说那么清楚还居然说混乱,服了你了。
一、在程序中放入两个COMBOBOX组件,其选择值作为查询条件。放入一个adoquery组件和一个datasouce组件,一个DBGRID组件作为显示用。按选择的年和月份进行数据查询,并在DBGRID中显示是这个程序窗体的主要功能。
其中adoquery1的SQL语句为:
select * from 表 where year(日期)='''+combobox1.text+''' and month(日期)='''+combobox2.text+'''
这样就可以顺利地把要查询的某年的某月的数据显示在DBGIRD中。
二、用FR3报表来把查询结果打印出来(因为有报表格式要求,所以不能简单地打印窗体或GRID)。方法:
1、放入一个frxreport组件和一个frxadocomponents组件;
2、双击frxreport组件进入设计界面,点击左边工具栏中的“ADOCOMPONET”选择“ADOQUERY”,按规定格式设计各个BAND中的数据显示格式,并与加入的adoquery连接起来。在这个adoquery1:Tfrxadoquer组件的属性SQL项中暂时输入
select * from 表名
三、在报表的变量中定义两个变量,名字分别为myyear mymonth。
四、在DELPHI的程序窗体中的FRXREPORT1的属性FRXGETVALUE代码段中把两个COMBOBOX的值赋给myyear 和mymonth两个变量
代码是:
procedure Tfrm_qbhd.frxReport1GetValue(const VarName: String;
var Value: Variant);
begin
if VarName='myyear' then Value:=combobox2.Text;
if VarName='mymonth' then Value:=combobox1.Text;
end;
五、为测试程序中的COMBOBOX值是否传入报表,在报表设计器里的某个BAND里加入两个MEMO,在其编辑中双击报表的变量列表中这两个变量名称,分别为[myyear]和[mymonth].
预览报表看不到这两个MEMO的值(也应该这样),退出设计器在DELPHI IDE中保存程序,按F9运行程序,选择条件(年和月份),再选择打印报表,这时报表按设计格式显示出所有的数据库记录。注意:此时加上的两个MEMO的值已经显示了(跟在程序查询的COMBOBOX中选择的相对应,比如选择2006 ,4 那么报表中就显示这两个数字,如果是2003,5,打印的报表MEMO处就显示2003和5(由此可以看出程序中选择的条件值已经传到报表变量myyear和mymonth中了)
六、为仅仅打印符合选择条件的部分数据报表,就在报表中的 adoquery1:Tfrxadoquer组件的SQL属性中输入
select * from 表 where year(日期)='''+myyear+''' and month(日期)='''+mymonth+'''
结果也没有任何提示,打印出的表的内容仅仅是一些文字标签,而与数据库字段相连的显示部分全部为空。也就是只有报表标题而没有内容。可以看出通过该报表中的ADOQUERY没有取到任何数据。
为了找出问题,我把条件部分直接改为 where year(日期)=2006 and month(日期)=4
此果预览报表或运行程序打印报表均可以打出2006年4月的数据。也就是所要的结果。
七、问题就在于,既然选择的“年”和“月”的值都已经可以在报表中作为memo内容显示出来了,为什么就不能作为查询条件加到 报表的名为adoquery1(属于Tfrxadoquer组件)的组件的sql中呢?如果不能加,为什么还不报错呢?
鉴于程序中引用的多处字段名有保密要求,而且以上说的也够清楚了,所以不再贴上相关代码。希望大侠能够帮助解决!
请问一下:程序里面的adoquery1(tadoquery类组件)和报表中的adoquery1(tfrxadoquery组件)有什么关系?
一、加入frxdbdataset好象不起作用。双击它可以看到数据库中所有字段。
二、我开始看资料,好象经过设定应该可以让报表使用经过查询得到的数据集的。所以我加了这个frxdbdataset,结果不起作用。
1、是不是要具体设置一些项的属性才起作用?
2、报表设计器里面的属性“报表”属性,“页”属性,“memo"属性有什么要求?哪些情况设哪些?什么情况下哪一种可以缺省。
盼复,谢谢!
一、加入frxdbdataset组件,连接数据源。
二,在设计器里的 报表——》frxdbdataset.
原来是这个设置。在此写一下主要供后来人参考
一、如果查询结果为N条记录,就打出N页只显示不与数据库连接的MEMO的空白页
二、主细节区不显示
三、我在页脚放了一个MEMO与数据集某字段相连,结果在显示的每页的页脚里的MEMO处顺序显示出记录值
还有可以下载一个FastReport的中文帮助:
http://www.678910.net/show.asp?id=447
这些都对你非常有帮助的。