估计是你那个i的初值有问题,可能一开始它就大于7了,你应该在打印前把它置成0。其实有更简便的办法不用变量的,用这一句就行了——
  if QuickRep1.RecordNumber mod 7 = 0 then QuickRep1.NewPage;

解决方案 »

  1.   

    其实我在 QuickRep1.BeforePrint 已经把 i 初始化为 0;
      

  2.   

     Thanks dq
     我发现我的报表能进行分页,但我有
     本业小计和页脚同时存在,应该怎样设计?
    而且我的页脚想跟在数据后面,不能离开太远
    像下面:             产品销售报表                     1/2页产品名称   销售额         产品名称   销售额
    电视机       100           收音机     200    
    冰箱         400           洗衣机     600  本页合计       1,300                  (如何显示?现在显示不了)
     
    单位:AAA      填开人:Zilo             (每页离开太远?)
                  产品销售报表                2/2 页产品名称   销售额         产品名称   销售额
    自行车       150           录相机     1500
    熨斗         450           VCD机       600  
    本页合计     2,700                                   
    总  计       4,000                     (末页才有?)
    单位:AAA      填开人:Zilo             (离开太远?)怎样解决这问题? 
      

  3.   

    不会吧,我这里预览没问题呀,打印我根本就没试。
    你用的哪种方法?如果是你一开始的用法,还是得仔细看看那个i的值到底是如何变化的,你试的时候有没有试过第一次就进行预览而不是打印?(我怀疑你是先打印过一次之后i的值没有重置)先解决你上一个问题吧。可以用ChildBand来处理,不要用PageFooter或是SummaryBand。
    给DetailBand加一个ChildBand,名为ChildBand1,作为本页合计;
    给ChildBand1再加一个ChildBand2,作总计用;
    再给ChildBand2加一个ChildBand3,作页脚。你看一下下面的代码应该就明白怎么做了,注意为了简便,我把ChildBand1的BeforePrint事件指向了ChildBand3的BeforePrint事件。也就是说你只要控制住每个Band打印的时机就可以了。procedure TForm1.ChildBand2BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    begin
      PrintBand := QuickRep1.RecordNumber = QuickRep1.RecordCount;//全部记录打印完毕
    end;procedure TForm1.ChildBand3BeforePrint(Sender: TQRCustomBand;
      var PrintBand: Boolean);
    begin
      PrintBand := (QuickRep1.RecordNumber mod 7 = 0)//这里还是假定每页打7条记录
        or (QuickRep1.RecordNumber = QuickRep1.RecordCount);
    end;procedure TForm1.ChildBand3AfterPrint(Sender: TQRCustomBand;
      BandPrinted: Boolean);
    begin
      if BandPrinted and (QuickRep1.RecordNumber < QuickRep1.RecordCount) then QuickRep1.NewPage;
    end;