我认为如果不是主细表结构,那就用代码实现一个QRTabel,QRDBText的实现 比如: var myQrl:TQRlabel; while not ADowuye.Eof do begin rm:=ADowuye.fieldbyname('unitno').AsString ; str:=ADowuye.fieldbyname('rmno').AsString ; roomno:=ADowuye.fieldbyname('roomno').AsString; MyQrl:=TQRlabel.Create(self); MyQrl.Parent :=QRband11; MyQrl.name :='R'+rm+'_'+str; MyQrl.Caption :=str; Orientation(rm,str,MyQrl); if ADowuye.FieldByName('Isfinish').AsString ='0' then myqrl.Font.Style:=[] else myqrl.Font.Style :=[fsBold,fsItalic,fsUnderline,fsStrikeOut]; ADowuye.Next; end; 这样用循环写完它
procedure TForm1.QuickRep1NeedData(Sender: TObject; var MoreData: Boolean); var I: integer; begin MoreData := True; for I:= 1 to 2 do begin if Table1.Eof then Break; case I of 1: QRLabel1.Caption := Table1.FieldByName('Name').AsString; 2: QRLabel2.Caption := Table1.FieldByName('Name').AsString; end; Table1.Next; end; if Table1.Eof then MoreData := False; end; 为了保证打印或者打印预览开始时Table1指针在第一条记录,在quickReport1的 BeforePrint事件中写如下代码: procedure TForm1.QuickRep1BeforePrint (Sender: TCustomQuickRep; var PrintReport: Boolean); begin Table1.First; end;
比如:
var myQrl:TQRlabel;
while not ADowuye.Eof do
begin
rm:=ADowuye.fieldbyname('unitno').AsString ;
str:=ADowuye.fieldbyname('rmno').AsString ;
roomno:=ADowuye.fieldbyname('roomno').AsString;
MyQrl:=TQRlabel.Create(self);
MyQrl.Parent :=QRband11;
MyQrl.name :='R'+rm+'_'+str;
MyQrl.Caption :=str;
Orientation(rm,str,MyQrl);
if ADowuye.FieldByName('Isfinish').AsString ='0' then
myqrl.Font.Style:=[]
else
myqrl.Font.Style :=[fsBold,fsItalic,fsUnderline,fsStrikeOut];
ADowuye.Next;
end;
这样用循环写完它
不是明细表 我只是想在qrdetail里显示两个不同table的字段列,就样子。但qrdetail只能连一个dataset、、、、、
现在要实现一个Table1中Name项两栏打印,在窗口上放TquickReport组件 quickReport1,并在上面放Tband组件band1,将其BandType属性改为Detail,在Tband 组件上并排放两个QRLabel组件QRLabel1和QRLabel2,在quickReport1的OnNeedData事件中写如下代码:
procedure TForm1.QuickRep1NeedData(Sender:
TObject; var MoreData: Boolean);
var
I: integer;
begin
MoreData := True;
for I:= 1 to 2 do
begin
if Table1.Eof then Break;
case I of
1: QRLabel1.Caption :=
Table1.FieldByName('Name').AsString;
2: QRLabel2.Caption :=
Table1.FieldByName('Name').AsString;
end;
Table1.Next;
end;
if Table1.Eof then MoreData := False;
end;
为了保证打印或者打印预览开始时Table1指针在第一条记录,在quickReport1的 BeforePrint事件中写如下代码:
procedure TForm1.QuickRep1BeforePrint
(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
Table1.First;
end;
这样程序调用QuickRep1.Preview或者QuickRep1.Print便能预览或者打印到一个关于 Name的从左至右,从上到下的多栏报表。