打印列数不固定的报表有什么好办法?急!!! (200分)

J

jammi

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(]1、报表问题,急!!!打印主 明细表问题,要求打出5行,不够为空。(200分)

QRk:主表 'select * from rk'
QRk_d 细表 QRk_d.sql.text='select * from rk_d where id=rk.id'

按照大富翁上的回答:
在DetailBand是画出五行表格,每一行都加上一组相同的DBText
在每一组的最后一个DBText的OnPrint事件中加上DetailTable.Next;最后一行的不设!
设DetailBand的DetailBand.ForceNewPage:=True;
注意:同一组的明细DBText应该按顺序建立
在每行的第一个QrDBText的OnPrint事件上加上一个判断
begin
if DetailTabel.Eof then
Abort;//如果数据表到头则退出。
end;

procedure TRkFrm.ToolButton2Click(Sender: TObject);
begin
if not assigned(QrrkFrm) then
QrrkFrm := TQrrkFrm.Create(Application);
QrrkFrm.QuickRep1.Preview;
end;
不同的是我把所有报表控件都放在PageHeaderBand上,第一次预览可以,第二次点击就
没反应,请帮忙,特急!!!谢谢!!!
2、另外打印列数不固定的报表各位有什么好办法?(200分)
 
PreView完,关闭QrrkFrm吗?如果Close,那么最好Free一下,不知道是否这个毛病。
另外试过Group了么?看一下。
 
procedure TQrrkFrm.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
action:=cafree;
end;
procedure TQrrkFrm.FormDestroy(Sender: TObject);
begin
QrrkdFrm:=nil;
end;
Free过了
 
固定行數﹐好做﹗如符合條件的記錄剛好不能印滿一頁﹐采取在數據集尾加空記錄的做法
其它設定完全無需象你說的那樣改動。
麻煩一點就是要自已寫几句話來計算添加空記錄的條數。
 
这个问题很简单,在BeforePrint里面将数据集First一下就可以了[:D][:D][:D]
就是Query1.First!因为你是动态给那些东西赋值的,而不是使用QickReport的DataSet
 
First;我用了,没用。估计问题在:
在每行的第一个QrDBText的OnPrint事件上加上一个判断
begin
if DetailTabel.Eof then
Abort;//如果数据表到头则退出。
end;
Abort后,没有关闭form,而若是在这句话后加form.close语句则出错。
 
是Quickreport没有退出内存的问题,我采用清除后重载,就能打印。
各位还有什么好办法?打印列数不固定的报表?
 
手工算
只有这种办法
 
你的办法不是特别好,其实完全可以放置一组DB控件,在DetailBand里面。
然后在程序中设置一个全局变量,来判断打印的行数。
在QuickReport的OnNeedData里面来进行打印控件的赋值,同时计算打印行数,如果查过5,则
换页(NewPage),同时初始化行数,如果没有到5,且Query已经到Eof了,则打印空行。
记住,在Before Print里面添加Query.First语句。
这样就可以了。
 
我是用dxDBGrid控件直接将数据保存为Excel文件,调用Excel的打印功能来打印,爽呆了。
 
to yzhshi:我的报表上连接3个Query,一个打印当前纪录,另外两个都是Grid式的
有明细数据的表格,但都不会超过5条纪录,能给点详细一些提示吗?
另外各位对打印列数不固定的报表有什么好方法???
 
不固定的列用动太生成TQRDBText.
dttext:=TQRDBText.Create(self);
with dttextdo
begin
parent:=qr_bb.DetailBand1;
left:=dtleft+10;
top:=4;
width:=wwDBGrid1.ColWidths[t];
name:='dtte'+wwqry_ygpgb.Fields.FieldName;
dataset:=wwqry_ygpgb;
datafield:=wwqry_ygpgb.Fields.FieldName;
// alignment:=taCenter;
autosize:=true;
end;
 
>>另外各位对打印列数不固定的报表有什么好方法???
一般都是采用动态生成的办法。
要注意宽度。
 
多人接受答案了。
 
顶部