我做了一个户籍管理系统,例如一家人,有好几口人,怎么样才能把它打在一个报表上,报表我已经设计好了,但不知道如何才能循环取数,我只会取一个,不知道怎样才能多取啊。
如上图:姓名1.姓名2,姓名3,
        性别1,性别2,性别3...
每页取三组数据,大于三组的放入下一页。。求急啊,我找了很多都没有找到相关的贴子。

解决方案 »

  1.   

    楼主  为什么要把所有问题丢到FastRepor那边去做呢?
    在你初步设计要打印的样式上想点办法后面就没那么辛苦了,这个图上是把每个户主所在的家庭成员横向打印且每页只能打印3个人员名字,
    何不改成 丛向打印方式:
    户主1  姓名1   性别  出生年月...
    户主1  姓名2   性别  出生年月...
    户主1  姓名3   性别  出生年月...
    ...
    如:
    意见仅供参考.
      

  2.   

    看看 fastreport的DEMO 你会有所启发的里面的有个Master data,你将数据集给关联好,它自己会循环输出的
      

  3.   

    lz没有理解我昨天我说的那意思,我可以在一页里面把一个户主所在的姓名及每个姓名的其他属性都打印出来(一户人家人员太多会自动换下页). 
    ex:  户主 姓名 性别  出生年月   ...
      1. 001 张三   男   1990.1.1 ...
      2. 001 李四   女   1980.1.1 ...
      3. 001 王五   男   1970.1.1 ...
    把你之前姓名横向的改成纵向,把你之前出生年月\住址\兵役\血型...等纵向的改成横向,与你数据记录一样,这样按户主分组,要显示的画在 masterdata里面就好了
      

  4.   

    请问。。fastreport中的band可以横向绑定的么?我研究了一下,好像不能啊。。
      

  5.   

    fastreport里面不是可以设置报表横向显示的吗
      

  6.   

    横向显示:page属性orientation:polandspace
      

  7.   

    我不是说页面的横向还是纵向。
    我是说DetailData1中的bank绑定数据后可不可横向显示。
    它默认的是纵向显示的。。有没有方法可以改变他是显示方向
    我要横向显示
      

  8.   

    才看明白,我觉得应该能做到。Band 有个 Columns 属性,你设定为3就行,至于定位你要好好琢磨一下。
      

  9.   


    你的意思是换行就换页是吧?在报表里面写脚本,自己计数,显示三个就换一页。在MasterDate 添加 OnAfterPrint,var
      i: integer;    
                                
    // MasterDate 的 OnAfterPrint  
    procedure Band4OnAfterPrint(Sender: TfrxComponent);
    begin
      if (i mod 3) = 0 then begin
        Engine.NewPage();
        i:= 1;                   
      end                
      else
        inc(i);                             
    end;
      
    begin
      i:= 1;             
    end.代码仅供参考,希望能给你提供一个思路
      

  10.   


    按你的方法,我实现了上面的要求,但是band中放入标签以后,标签就会随绑定的数据一起循环
    例如:姓名:band xm.
    他的显示结果是:姓名:姓名张三,姓名李四,姓名王五。能有不让memo不循环的方法么?
      

  11.   

    其实楼上已经把解决办法说出来了.补充点:
       针对MasterData 的属性Columns 设置为3,属性Columnwidth自己根跟你的表格调整一下大小.
       触发MasterData 的事件:
        procedure MasterData1OnBeforePrint(Sender: TfrxComponent);
         begin
           memo2.suppressrepeated:=true;
           if (<line> mod 4) = 0 then
            begin
            Engine.NewPage();
            memo2.suppressrepeated:=false;
            end
         end;
    处理了如上面的"姓名"重复打印的问题,注:上面的memo2.text="姓名";
      

  12.   

    我是这样做的,请看看问题出在哪里。
    1、我用了masterdata 绑定是的户主信息,detaildata 绑定的家庭成员的信息。2、我在detaildata 的beforeprint 中写了
    procedure DetailData1OnBeforePrint(Sender: TfrxComponent);
    begin
        memo13.suppressrepeated:=true;        
            if ( <line> mod 4) = 0 then 
            begin 
              Engine.NewPage(); 
              memo13.suppressrepeated:=false;                                                                        
            end    
    end;memo13就是姓名标签。3、但是写代码以后,第一页是好的,但是第二页的排列方式出了问题,请大家看看图片,问题出在哪里?第二页
    http://album.hi.csdn.net/app_uploads/hrc_evollj/20081031/151940738.p.jpg?d=20081031152447208
      

  13.   

    我不知道你报表的具体情况,所以没办法给你调试。
    fastreport 非常强大,
    建议参看一下他的Demo。你这个情况我觉得还可以用 Side by side subreports形式。他的形式是左右两个子报表,左边是户主别名这些标签,右边是三列数据。
    然后自己控制换行。
      

  14.   

    报表就是我开始的时候发的那个图
    现在我根据大家的方法已经实现的差不多了。
    只用一个masterdata不能实现,我就加了一个detaildata来绑定明细数据。
    但当我在detaildata的beforeprint事件写上分页代码以后。
    第一页的数据排列是好的,但是下面的时候就乱了
      

  15.   

    没有你的调试环境,可能下面的内容不准确。
    大概说一下:1、按照我的理解,应该是三列,而不是四列,应该把【户主关系】【姓名】【别名】和相应的字段 作为一个列,只是后面两列里面不再显示【户主关系】这些;2、通过调整 ColumnGap 为负数,让三个列存在一定的重叠,以此消除不显示【户主关系】这些带来的定位差;3、为了实现第2、3列隐藏【户主关系】,在Band的OnBeforePrint 事件中增加如下内容procedure Band4OnBeforePrint(Sender: TfrxComponent);
    var
      i: integer;                                
    begin
      i:= <line> - 1;                               
      if (i mod 3)=0 then begin
        Memo2.Visible:= true;
      end
      else            
        Memo2.Visible:= false;                                                                  
    end;
    4、结合之前的换页方法,应该能实现你的需求。
      

  16.   

    楼上的方法我试了,还是行不通。
    我不知道说的分页到是在哪里写的?你是masterdata中的beforeprint中写的么?
    如果是,分页是不成功的。
    masterdata我是用来绑定主数据的,而detaildata是用来绑定明细数据的。这样不可行么?
    例如我数据库中有这样的记录
    Hh(户号) Hb 户别 Xm 姓名 Hzgx 户主关系
    001      普通    张三     户主
    001      普通    李四     长子
    001      普通    王五     次子
    001      普通    赵花     长女
    001      普通    小红     次女
    请问如果数据库有这样五条记录,应该怎样取出来,并排列成上图的报表样式呢?
    只用一个masterdata,我没有做出来,就用masterdata绑定户主,再用detaildata绑定家庭成员的信息。
    这样做不行么?
      

  17.   

    把它作为主从表应该是可行的。另一个办法就是全部都作为动态报表,用代码生成报表。你要是方便给我精简一个你的demo,我调试一下。
      

  18.   

    我这么整理了一个精简的demo,如果不想加QQ的可以通邮件和我说一声
    我发一个,让大家一起研究一下。。谢谢了。。
    邮件:[email protected]
      

  19.   

    [email protected]  不是不加QQ,而是我不用qq。呵呵
      

  20.   

    你给的数据库我在2005里面附加不上。
    请把数据库备份出来或者导入access里面