设计目的:
      
   在主程序中通过用两个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 
可以正常取得数据值到设计的表中。

解决方案 »

  1.   

    myyear,mymonth这两个变量是FR中的,而非Delphi中的,如果
      

  2.   

    晕,居然提交了=====>如果你在Delphi中没有定义myyear,mymonth这两个变量那么你在adoquery中add(select * from  表  where year(日期)='''+myyear+''' and month(日期)='''+mymonth+''')会报错,所以在这条SQL中的变量跟你在FR中定义的变量没有关系
      

  3.   

    FR中的变量获取需要用getValue事件吧
      

  4.   

    说的不对吧,我试了用全局变量也不行,你也好象没看清我的叙述。
    实际上值已经传递进去了,能够通过memo显示。也就是我在主程序中选择A年B月,在打印时MEMO里就可打印出相应的值。但是就是不能在报表中添加的adoquery的sql语句中引用。开始我也考虑是类型的问题,后来觉得好象不是。
     言先生答非所问了,获取可以多种方法,我都能将变量传进报表,能通过MEMO显示,就是不能在查询语句中引用该值。
       另外换个思路。能不能通过什么组件和设置,直接调用我在主程序中查询到的数据集来作为报表的数据来源。因为初接触fastreport3,不怎么熟悉,又没什么有用的资料,只好摸索着搞。周围也没一个懂的。
      

  5.   

    最好贴一下代码,在Delphi中是可以得到FR的变量值的。
      

  6.   

    楼上兄弟:
        我现在不是要在delphi中得到fr的变量值,而是要在fr中的adoquery中的sql属性中的语句中把从delphi传给fr的两个变量值作为查询条件的呀。
        其实说起来也简单的事呀,就是实现以程序中两个combobox的选择值作为查询条件从数据库中取出数据打出来。在程序中我用了一个DBGRID显示结果,同时希望按照一定格式打出查询结果。
      

  7.   

    在程序中加的报表相关控件有两个,一个是frxreport1,另一个是frxadocomponents1.
      

  8.   

    感觉你描述的比较混乱,不大理解你的意思。
    你的过程是不是这样的:
    1)在FR中设置查询条件
    2)传给AdoQuery并执行,取得数据集
    3)然后在FR中预览打印
      

  9.   

    楼上的:
       说那么清楚还居然说混乱,服了你了。
       一、在程序中放入两个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中呢?如果不能加,为什么还不报错呢?
       鉴于程序中引用的多处字段名有保密要求,而且以上说的也够清楚了,所以不再贴上相关代码。希望大侠能够帮助解决!
           
      

  10.   

    按你的描述,你所需要的数据集在第一步就已经出来了,为何还要执行第六步?在界面里放置一个FRDBDataSet,它的DataSet属性设置为adoquery1即可。
      

  11.   

    不行呀,我早试过了。
    请问一下:程序里面的adoquery1(tadoquery类组件)和报表中的adoquery1(tfrxadoquery组件)有什么关系?
       一、加入frxdbdataset好象不起作用。双击它可以看到数据库中所有字段。
      二、我开始看资料,好象经过设定应该可以让报表使用经过查询得到的数据集的。所以我加了这个frxdbdataset,结果不起作用。
        1、是不是要具体设置一些项的属性才起作用?
        2、报表设计器里面的属性“报表”属性,“页”属性,“memo"属性有什么要求?哪些情况设哪些?什么情况下哪一种可以缺省。
        盼复,谢谢!
      

  12.   

    又反复查反复试,终于前进半步。但还是有问题:某一个memo可以得到数据,但主细节区的数据一个也没显示出来。看这个MEMO和细节区每个字段memo的属性设置是一样的啊,是不是要在哪儿设置打印范围??
      一、加入frxdbdataset组件,连接数据源。
      二,在设计器里的 报表——》frxdbdataset.
      原来是这个设置。在此写一下主要供后来人参考
      

  13.   

    打印出的报表问题:
        一、如果查询结果为N条记录,就打出N页只显示不与数据库连接的MEMO的空白页
        二、主细节区不显示
        三、我在页脚放了一个MEMO与数据集某字段相连,结果在显示的每页的页脚里的MEMO处顺序显示出记录值
      

  14.   

    建议你花点时间看一下FastReport里面的Demos\reports下的例子,里面有如何制作基础的报表。
    还有可以下载一个FastReport的中文帮助:
    http://www.678910.net/show.asp?id=447
    这些都对你非常有帮助的。