南
南宫慕容
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)的第一条纪录总是不能打印,它总是从第二条纪录开始打印。
为什么会这样?如何解决?
用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)的第一条纪录总是不能打印,它总是从第二条纪录开始打印。
为什么会这样?如何解决?