要达到你想要的功能,最简单办法为建立临时表,把查询结果导入到临时表,然后插入空记
录进临时表。用完后,把临时表清除。如果非不用临时表,自己绘制,将会涉及到非常麻烦
的单元格绘制。你要单独绘制每一个QRLABLE,而不是QRDBTEXT。同时要注意每个QRLABLE的
高度,宽度,起始位置,换行等问题,而且要处理预览过程中,比例缩放问题。
你也可以考虑,换其他专门处理这种情况的其他报表工具。如fastreport,reportmachine。
实现起来非常简单。不需要写代码。
还有一种方法,这是seaflyboy的方法。我没有试。在quickreport中可以实现:
在mainform中:
uses printunit;
{$R *.DFM}
var i,k:integer;
procedure TmainForm.SpeedButton1Click(Sender: TObject);
var m,n:integer;
begin
printform.QRLabel11.Caption:=inttostr(i);
m:=i*34-k;//注:一页34条纪录
if m<>0 then begin
table1.DisableControls;
for n:=1 to m do
begin
table1.Insert;
table1.FieldByName('dwbm').asstring:='9999';//dwbm为所用数据表中一合适字段.
table1.Post;
end;
table1.Refresh;
table1.EnableControls;
end;
printform.QuickRep1.Preview;
end;
procedure TmainForm.FormShow(Sender: TObject);
var j:integer;
begin
k:=table1.RecordCount;
if (k mod 34)=0 then j:=0
else j:=1;
i:=((k-(k mod 34)) div 34)+j;
end;
end.
//以下为报表窗体的程序,printform
procedure TprintForm.QuickRep1AfterPreview(Sender: TObject);
var h:boolean;
begin
h:=true;
while h=true do begin
with mainform.Table1 do
begin
EditKey;
FieldByName('dwbm').AsString := '9999';
GotoKey;
if gotokey=true then delete
else h:=false;
end;
end;
end;
end.