liuly :帮忙!关于明细报表的问题(Up有分)。(100分)

  • 主题发起人 主题发起人 kds
  • 开始时间 开始时间
K

kds

Unregistered / Unconfirmed
GUEST, unregistred user!
困扰我好久了 :(
控件: QuickRep
首先说一下,主表和从表的形成。
每天两个表都形成一些记录,主表中形成3条记录,其中一条记录中的各字段的值是从表中改天相应字段的值的累计和。从表中每天形成20条记录,是主表中刚提到的那条记录的明细。两个表相同的只有日期字段。
最后报表显示的时候,需要按照日期显示,同一天的显示在同一页,该页上面包含的内容如下(我以图例表示):
明细表报表
状态 次数 //----------主表
原状态 100
现状态 200
变化量 100
明细 次数 //----------从表
早餐 20
午餐 50
晚餐 30
合计 100
假如这是2003-08-03 这一天的数据,显示在了第一页,不管该页还有多少空白都强制把2003-08-04 那一天的数据显示在第二页。
表中的数据其实都是已经存在的只是显示在报表上面即可。
 
设置detail的forcenewpage为true即可
 
这样只是实现了分页,但是最终的报表形式怎么来实现呀?
 
detail下加一个subdetail,设置关联字段为时间。
 
关联我设置了,但是显示的时候是 主表的每一条记录对应从表的所有记录,如何能够实现我问题中的,主表的三条记录对应从表的所有记录?
 
帮帮你,顶以下
 
出微薄之力,帮你顶一下
 
好。。我帮你顶一下。
 
Please give me your email address~
 
To: dx2527
我的邮箱 : kdsyrh@163.com
 
Hi~Kds:
不好意思,因我的是繁体操作系统,在论坛上很多繁体字输不了,所以想在邮件上说一下我对这个问题的想法,但前几天我找到了一个方法能在这里输入,我做了个例子,可以实现你的要求,但是方法比较笨,可能有其它更好的办法:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, QuickRpt, QRCtrls, DB, ADODB, ExtCtrls;
type
TForm2 = class(TForm)
QuickRep1: TQuickRep;
QRBand1: TQRBand;
QRBand2: TQRBand;
ADOConnection1: TADOConnection;
ADOQuery1: TADOQuery;
ADOQuery2: TADOQuery;
QRDBText1: TQRDBText;
QRDBText2: TQRDBText;
QRDBText3: TQRDBText;
QRSubDetailOrders: TQRSubDetail;
QRLabel8: TQRLabel;
QRLabel9: TQRLabel;
QRLabel10: TQRLabel;
QRLabel11: TQRLabel;
QRLabel13: TQRLabel;
QRLabel14: TQRLabel;
QRShape5: TQRShape;
QRSubDetailItems: TQRSubDetail;
QRDBText6: TQRDBText;
QRDBText8: TQRDBText;
QRDBText9: TQRDBText;
QRLabel1: TQRLabel;
procedure QRBand2BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
procedure QRBand2AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form2: TForm2;
sDate: String;
implementation
{$R *.dfm}
procedure TForm2.QRBand2BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
sDate:= DateTimeToStr(ADOQuery1.Fields.FieldByName('T_Date').AsDateTime);
end;

procedure TForm2.QRBand2AfterPrint(Sender: TQRCustomBand;
BandPrinted: Boolean);
var
sSQL: String;
begin
ADOQuery1.Next;
if not ADOQuery1.Eof then
begin
if DateTimeToStr(ADOQuery1.Fields.FieldByName('T_Date').AsDateTime) = sDate then
begin
ADOQuery2.Close;
QRSubDetailOrders.Height:= 0;
QRSubDetailItems.Height:= 0;
ADOQuery1.Prior;
QRBand2.ForceNewPage:= False;
end
else
begin
ADOQuery1.Prior;
QRBand2.ForceNewPage:= True;
QRSubDetailOrders.Height:= 29;
QRSubDetailItems.Height:= 29;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
sSQL:= 'Select * From Table2 where T2_TID=''' + sDate+'''';
ADOQuery2.SQL.Add(sSQL);
ADOQuery2.Open;
end;
end
else
begin
QRSubDetailOrders.Height:= 29;
QRSubDetailItems.Height:= 29;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
sSQL:= 'Select * From Table2 where T2_TID=''' + sDate+ '''';
ADOQuery2.SQL.Add(sSQL);
ADOQuery2.Open;
end;
end;

end.
 
To dx2527
这个问题我已经解决了,一直在等你的回复,看看有什么更好的方法,要不我就结贴了 :)
方法类似,都是先取到时间作为判断条件来决定换页。
非常感谢你!
 
还忘了问 dx2527 你各问题
QRSubDetailOrders.Height
QRSubDetailItems.Height
的用法,作用
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
791
DelphiTeacher的专栏
D
D
回复
0
查看
826
DelphiTeacher的专栏
D
后退
顶部