procedure TForm28.frReport1GetValue(const ParName: String;
  var ParValue: Variant);
  var ReportUserCode:string;
begin
ReportUserCode:=form2.ListClientInfo.fieldbyname('USER_code').AsVariant;
with form2.ListClientInfo2 do
   begin
     close;
     sql.Text:='select * from ClientHuman where USER_code='+SqlCheckString(ReportUserCode)+' and USER_flag=0';
     open;
     frReport1.FindObject('Ma1').Memo.Text:=form2.ListClientInfo2.fieldbyname('USER_type').AsString;
     frReport1.FindObject('Ma2').Memo.Text:=form2.ListClientInfo2.fieldbyname('USER_name').AsString;
     frReport1.FindObject('Ma3').Memo.Text:=form2.ListClientInfo2.fieldbyname('USER_sex').AsString;
     frReport1.FindObject('Ma4').Memo.Text:=form2.ListClientInfo2.fieldbyname('USER_age').AsString;
     frReport1.FindObject('Ma5').Memo.Text:=form2.ListClientInfo2.fieldbyname('USER_tel').AsString;
     frReport1.FindObject('Ma6').Memo.Text:=form2.ListClientInfo2.fieldbyname('USER_mobile').AsString;
     frReport1.FindObject('Ma7').Memo.Text:=form2.ListClientInfo2.fieldbyname('USER_work').AsString;
     frReport1.FindObject('Ma8').Memo.Text:=form2.ListClientInfo2.fieldbyname('USER_making').AsString;
     frReport1.FindObject('Ma9').Memo.Text:=form2.ListClientInfo2.fieldbyname('USER_love').AsString;
   end;
end;
是不是这个事件中不能再读取其他表中的数据啊,怎么我这样写它要在这里循环很多次啊(有多少条纪录它就要循环多少次)
我现在要达到这样的目的,先用frDBDataSet1关联一个query,另一个表是它的从表,我现在要做这样一个报表,显示主表中的数据,然后中间插入从“从表”中读取的隶属于它的数据,我搜索了一下大富翁和csdn,关于这样的帖子也不少,可是问题我还是没有解决,说我笨现在我也承认。
fastreport的说明文档我都看烂了也没弄好。
请知道的朋友给我写出可以运行的代码好吗?不要再让我看这个帖子,看哪个文档了,我现在最想的是快点解决这个问题。我真的要疯了。
以前我提过这样的问题,有的朋友回答的很让我不理解,最后觉得不好意思都结了帖子,可能是我表达的太模糊了,如果大家觉得我还没有说清楚我可以再解释,分不够可以再加。
如果大家告诉我怎样动态生成报表也可以,就是一个一个把memo写出来,一条记录一页,这样也行,只要达到目的就行了。先谢过大家了,做这个不是我的主要工作,我要快点解决掉这个问题,因为我还有其他工作要做。

解决方案 »

  1.   

    hawksoft(明月清风) 一下说到点子上了,天那,总算有人理解我了。
    可是我应该在哪个事件里写呢,判断什么呢。我现在就是搞不懂我应该在那里读取另一个表,我用关联ADOTable的masterfields值的方法很容易就可以解决,可是我现在要在建立报表的过程中计算第二个表中的数据后才让它显示的啊。求大侠帮帮忙好吗!!!我急了都想改改表的结构了,可是那样的话程序很多都要翻工,很不划算的。
      

  2.   

    如果你是主从结构,你的主表数据一般来讲只打印一条,这时你可以不要加对应的TFrDBDataset控件。但你的明细表就要加一个TFrDBDataset控件,数据集指向你的明细数据。
    在设计时一般是主项数据用来显示主表,细项数据显示明细表。注意细项数据要指定数据集。
    另外,报表变量的设置其实不必在设计时搞定,可以动态添加。
     AFrReport.Dictionary.Variables['VAR_PRINTDATE'] := ''''+sPrintdate+'''';
    这条语句就加了一个Var_printdate变量同时赋值。
      

  3.   

    其实你的问题很好解决
    1、你加一个数据集TQuery。指向你的从表,并写一个刷新数据的函数。
    sql.Text:='select * from ClientHuman where USER_code='''+form2.ListClientInfo.fieldbyname('USER_code').Asstring+'''';
    2、加一个TFrDBDataset控件。指向上面的数据集。
    3、在主表的Afterscroll事件中调用上面的刷新函数。
       当然你可以控制只有当你打印时才执行明细数据的刷新。
    再按照我上面一贴的内容设计你的报表就可以。
      

  4.   

    谢谢 hawksoft(明月清风)我是照你说的方法做的,但是我用明细band只显示一条数据。只好用子报表了,居然达到目的了,真是谢谢,不过我不是用的Afterscroll事件,是Dataset的chanage,因为我用其他如next事件的话老是显示下一条数据的子项。反正我用Dataset的chanage一切正常,这样做对吗?
      

  5.   

    我建议用Aferscroll事件。因为Change事件,你还要判断是什么改变。
    其实不用子报表,你的明细Band要指明数据集。另外,如果要打印多条主表记录的话,你还要
    为主项数据指定数据集。多加一个TFrDBDataset控件指向主表数据集,在主项数据指定绑定数据集即可。