各位大虾,小女子有礼了,希望不吝赐教。
问题是:根据查询的数据库中每个考场的考生人数,打印预览每个考场的桌贴,每张A4的纸打印10个桌贴,即1、2、3、4、5……。
我使用adoquery1查询数据库,quickrep1上放置了一个qrband1(类型是rbdetail),在qrband1上放了10个qrlabel,在adoquery1afterscroll中实现分页和桌贴的赋值。为什么运行报错呢?而且分页后只有空白页,没有qrlabel了?
procedure TtabletagForm.ADOQuery1AfterScroll(DataSet: TDataSet);
var
  i,total,pages,max:integer;
begin
max:=2;
total:=adoquery1.fieldbyname('pcnumber').AsInteger ;//把每个考场的人数赋值给total
pages:=total div max;
for i:=1 to pages do
begin
  qrlabel1.caption:=inttostr((i-1)*max+1);
  qrlabel2.caption:=inttostr((i-1)*max+2);
  qrlabel3.caption:=inttostr((i-1)*max+3);
  qrlabel4.caption:=inttostr((i-1)*max+4);
  qrlabel5.caption:=inttostr((i-1)*max+5);
  qrlabel6.caption:=inttostr((i-1)*max+6);
  qrlabel7.caption:=inttostr((i-1)*max+7);
  qrlabel8.caption:=inttostr((i-1)*max+8);
  qrlabel9.caption:=inttostr((i-1)*max+9);
  qrlabel10.caption:=inttostr((i-1)*max+10);
  if i<pages then
  begin
    quickrep1.NewPage;
  end;
end;
if (total mod max>0) then
begin
  quickrep1.NewPage;
  if ((pages*max+1)<=total) then
    qrlabel1.caption:=inttostr(pages*max+1)
  else
    qrlabel1.Caption :='';
  if ((pages*max+2)<=total) then
    qrlabel2.caption:=inttostr(pages*max+2)
  else
    qrlabel2.Caption :='';
  if ((pages*max+3)<=total) then
    qrlabel3.caption:=inttostr(pages*max+3)
  else
    qrlabel3.Caption :='';
  if ((pages*max+4)<=total) then
    qrlabel4.caption:=inttostr(pages*max+4)
  else
    qrlabel4.Caption :='';
  if ((pages*max+5)<=total) then
    qrlabel5.caption:=inttostr(pages*max+5)
  else
    qrlabel5.Caption :='';
  if ((pages*max+6)<=total) then
    qrlabel6.caption:=inttostr(pages*max+6)
  else
    qrlabel6.Caption :='';
  if ((pages*max+7)<=total) then
    qrlabel7.caption:=inttostr(pages*max+7)
  else
    qrlabel7.Caption :='';
  if ((pages*max+8)<=total) then
    qrlabel8.caption:=inttostr(pages*max+8)
  else
    qrlabel8.Caption :='';
  if ((pages*max+9)<=total) then
    qrlabel9.caption:=inttostr(pages*max+9)
  else
    qrlabel9.Caption :='';
  if ((pages*max+10)<=total) then
    qrlabel10.caption:=inttostr(pages*max+10)
  else
    qrlabel10.Caption :='';
end;
end;

解决方案 »

  1.   

    没必要加10个qrlabel呀,还要来动态赋值这么麻烦。只用一个qrdbtext连接上查询结果就可以了,在quickrep中设置列数,你打10个可能是设成2列,设成自动分页,用行高大小来调节每页的行数,一下就搞定了。
    还有,你要的这个功能,用EXCEL就可以完成了,没必要搞到要用编程这么复杂吧。
      

  2.   

    我的QuickRep中只有一个DetailBand,  
      现在要时行分页,每页3条记录,  
       
      代码如下:  
       
      全局变量:  
      i:integer;  
       
      QuickRep1的BeforePrint事件:  
      i:=0;  
       
      DetailBand1的AfterPrint事件:  
       
          i:=i+1;  
          if   i   =   3   then  
          begin  
              i:=0;  
              //QuickRep1.NewPage;  
                DetailBand1.ForceNewPage   :=   true;  
          end;  
                DetailBand1.ForceNewPage   :=   false;  
      

  3.   

    http://topic.csdn.net/t/20041008/09/3432363.html看看这个是否有帮助。
      

  4.   


      sSql := 'if exists (SELECT name FROM sysobjects WHERE name = 'tmpTable' AND type   = 'U ') drop table tmpTable create table tmpTable(ID int) select * from tmpTable';
      with ADOQuery1 do
      begin
        Close;
        SQL.Clear;
        SQL.Add(sSql);
        Open;
        for I := 1 to total do
        begin
          Append;
          FieldByName('ID').Value := I;
          Post;
        end;
      end;只要一个qrDBText
    把qrDBText的DataSet设为ADOQuery1,DataField设为ID;
    如果要打多列把QuickRep1的page的columns设为n;
      

  5.   

    谢谢各位,我昨天用了个临时数据表已经解决问题了,基本和luckyhh的差不多,再次感谢!