空行打印问题(100分)

  • 主题发起人 主题发起人 南宫慕容
  • 开始时间 开始时间

南宫慕容

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi5/oracle7
用delphi5自带的quickrep做报表。为了要实现如果记录不满一页,就用空行补满一页。
quickrep的数据源为ADOQuery。在quickrep的detail里放几个QRLabel。
quickrep的OnNeedData事件里写如下代码:
procedure TForm1.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
begin

with ADOQuerydo

begin

if not eof then

begin

MoreData := True;
i:=i+1;
//i为判断当前页是否达到指定纪录的标志
next;
end
else
if i<8 then
//一页最多能打印8条纪录
begin

MoreData := true;
i:=i+1;
end
else

MoreData :=false;
end;


procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin

i:=0;
adoquery.first;
end;


在各个QRlabel的OnPrint事件里代码如下:
procedure TForm1.QRLabel2Print(sender: TObject;
var Value: String);
begin

if not ADOQuery.Eof then
value:=adoquery.Fields[0].text
else
value:='';
end;


现在问题是:数据源(adoquery)的第一条纪录总是不能打印,它总是从第二条纪录开始打印。
为什么会这样?如何解决?
 
使用OnNeedData的时候QuickReport的DataSet不连接任何数据源
所有元素数值均在OnNeedData里面赋值
 
to yzhshi:
我已经这样做的.quickrep的dataset属性置空。还有什么别的办法吗?
 
不用在各个QRlabel的OnPrint事件里写代码,统一在OnNeedData里面写。
在BeforePrint里面数据First是完全正确的。
别的没有看出还有问题。
 
谢谢!问题已经解决。不过不是用循环,是用插入空纪录的办法,QR真的是不太好用。
不过也谢谢yzhshi的解答,分都给你吧
 
后退
顶部