我做了一个动态查询,查出的结果在form1的dbgrid中,我想做打印,就想生成报表,由于动态,所以就得动态释放一系列tqrshape,tqrdbtext,
我用的语句是
qrshape:array of tqrshape;
qrdbtext:array of tqrdbtext; qrshape[i]:=tqrshape.Create(form1);
qrshape[i].Parent:=form2.quickrep1.Bands.DetailBand;
qrdbtext[i]:=tqrdbtext.Create(form1);
qrdbtext[i].Parent:=form2.quickrep1.Bands.DetailBand;
我在form2中放了quickrep控件,可运行时第三,第五creat语句总是'access violation'错误,请高手指点!
我用的语句是
qrshape:array of tqrshape;
qrdbtext:array of tqrdbtext; qrshape[i]:=tqrshape.Create(form1);
qrshape[i].Parent:=form2.quickrep1.Bands.DetailBand;
qrdbtext[i]:=tqrdbtext.Create(form1);
qrdbtext[i].Parent:=form2.quickrep1.Bands.DetailBand;
我在form2中放了quickrep控件,可运行时第三,第五creat语句总是'access violation'错误,请高手指点!
qr:array[0..19] of Tqrlabel;
qrt:array[0..19] of TQRdbText;
qs:array[0..19] of tqrshape;
qst:array[0..19] of tqrshape;
begin
qr[0]:=tqrlabel.Create(QuickRep.ColumnHeaderBand1 );
qr[0].Parent :=QuickRep.ColumnHeaderBand1 ;
qr[0].Caption :=dbgrid.Columns [0].FieldName;
qr[0].Width :=dbgrid.Columns [0].Width;
qr[0].Top :=8;
qr[0].Left :=8;
for i:=1 to dbgrid.FieldCount-1 do
begin
qr[i]:=tqrlabel.Create(QuickRep.ColumnHeaderBand1 );
qr[i].Parent :=QuickRep.ColumnHeaderBand1 ;
qr[i].Caption :=dbgrid.Columns [i].FieldName;
qr[i].Width :=dbgrid.Columns [i].Width ;
qr[i].Top :=8;
qr[i].Left :=qr[i-1].Left +qr[i-1].Width +4 ;
end;
for i:=0 to dbgrid.FieldCount-1 do
begin
qs[i]:=tqrshape.Create(QuickRep.ColumnHeaderBand1);
qs[i].Parent :=QuickRep.ColumnHeaderBand1;
qs[i].Top :=0;
qs[i].Width :=1;
qs[i].Height :=30;
qs[i].Left :=qr[i].Left +qr[i].Width +2;
//
qrt[i]:=tqrdbtext.Create(QuickRep.DetailBand1 ) ;
qrt[i].Parent :=QuickRep.DetailBand1;
qrt[i].DataSet :=DM_temp.qy_qy;
qrt[i].DataField :=qr[i].Caption ;
qrt[i].top:=8;
qrt[i].Left :=qr[i].Left;
//
qst[i]:=tqrshape.Create(QuickRep.DetailBand1 );
qst[i].Parent :=QuickRep.DetailBand1;
qst[i].Top :=0;
qst[i].Width :=1;
qst[i].Height :=30;
qst[i].Left :=qs[i].Left ;
//
QuickRep.PreviewModal;
我的动态报表已经可以运行,可是没有columheaderd,只有detailband,我想照楼上那样释放qrlabel,可又出错了,源代码如下:(这次是全的了)
for i:=0 to dbgrid1.Columns.Count-1 do
begin
qrlabel[i]:=tqrlabel.Create(form1);
qrlabel[i].Parent:=form2.QuickRep1.Bands.ColumnHeaderBand;
qrlabel[i].Caption:=dbgrid1.Columns[i].FieldName;
end;
这次我是单点调试的,错误在qrlabel[i]:=tqrlabel.Create(form1);
还是'access violation',为什么不让我创建qrlabel?
麻烦了!
qrlabel[i]:=tqrlabel.Create(form1);又怎么可以呢
你说没有columheaderd 是不是也要先创建然后在
qrlabel[i]:=tqrlabel.Create(form2.QuickRep1.mnHeaderBand1);
我这机器上没装DELPHI 也不能试
唉 有高手看见指点一下嘛
------------------------------------------------------------------------
procedure TFormDataView.BitBtn3Click(Sender: TObject);
var
aLabel: TQRLabel;
aText:TQRDBText;
FieldCount,i,LeftValue:integer;
begin
FieldCount:=ADOQueryPianQu.SQL.Count;
LeftValue:=0;
for i:=0 to FieldCount-1 do //循环FieldCount次,生成ADOQueryPianQu查询产生的所有列
begin
aLabel:=TQRLabel.Create(FormPrintZD);
with FormPrintZD do
aLabel.Parent:= HeaderBand1; //放在HeaderBand里
with aLabel do //设置属性
begin
AutoSize:=True; //好像这个值必须为True
AutoStretch:=True;
Alignment:=taLeftJustify;
Left:=LeftValue;
Top:=8;
Height:=14;
LeftValue:=Width+LeftValue+10;
end;
end;
...
FormPrintZD 是一个放置QuickRep的Form
用这种方式可以在报表中动态生成字段名,可是我想用aText(TQRDBText)在QRSubDetail1生成字段值得报表就不成了,只能生成第一条记录的报表,郁闷!向大伙求救啊!十二分感谢!
------------------------------------------------------------------------
procedure TFormDataView.BitBtn3Click(Sender: TObject);
var
aLabel: TQRLabel;
aText:TQRDBText;
FieldCount,i,LeftValue:integer;
begin
FieldCount:=ADOQueryPianQu.SQL.Count; LeftValue:=0;
for i:=0 to FieldCount-1 do //循环FieldCount次,生成ADOQueryPianQu产生的所有列
begin
aLabel:=TQRLabel.Create(FormPrintZD);
with FormPrintZD do
aLabel.Parent:= HeaderBand1; //放在HeaderBand(rbDetail)里
with aLabel do //设置属性
begin
AutoSize:=True; //好像这个值必须为True
AutoStretch:=True;
Alignment:=taLeftJustify;
Left:=LeftValue;
Top:=8;
Height:=14;
LeftValue:=Width+LeftValue+10;
end;
end; LeftValue:=0;
for i:=0 to FieldCount-1 do
begin
aText:=TQRDBText.Create(FormPrintZD);
with FormPrintZD do
aText.Parent:= QRSubDetail1;
with aText do
begin
Dataset:=ADOQueryDataView;
DataField:=ADOQueryDataView.Fields[i].FieldName;
AutoSize:=True;
AutoStretch:=True;
Alignment:=taLeftJustify;
Left:=LeftValue;
Top:=8;
Height:=14;
LeftValue:=Width+LeftValue+10;
end;
end; FormPrintZD.QuickRep1.Preview;
end;