各位大虾,小女子有礼了,希望不吝赐教。
问题是:根据查询的数据库中每个考场的考生人数,打印预览每个考场的桌贴,每张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;
问题是:根据查询的数据库中每个考场的考生人数,打印预览每个考场的桌贴,每张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;
解决方案 »
- Dephi 如何制作作何控件????
- 求救!跨局域网的数据库连接应该注意什么?我的程序为什么连接不上???
- (100分)请教个双网卡的问题,有点麻烦,看看各位搞过Delphi网络方面程序的仁兄,给指点指点???谢谢了
- 我已经成功用socket应用ftp协议下载,但是通过代理服务器时,还有技术问题没解决,请高手进来!!!
- 回复人:Taken(铁拳)来收剩下的80分
- 请教简单问题,谢谢帮忙
- 菜鸟的关于BDE的问题 来者有分!!
- 请问分页控件是什么名字,假如我需要分5页,这个5怎么设置?谢谢!!!
- 如何在局域网中侦听???
- install shield for delphi4作出的安装程序怎么老是配不上别名
- 紧急求救!!richviewedit导入word文档后部分乱码的问题???
- 用Delphi做个自动发邮件的Demo
还有,你要的这个功能,用EXCEL就可以完成了,没必要搞到要用编程这么复杂吧。
现在要时行分页,每页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;
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;