请教制作报表高手,请给指条明道 ( 积分: 50 )

  • 主题发起人 主题发起人 都当主席谁种地
  • 开始时间 开始时间

都当主席谁种地

Unregistered / Unconfirmed
GUEST, unregistred user!
用QReport制作报表时遇到两个问题
1.在detail部分用QRDBText显示数据,将QRDBText1.frame.drawright:=true;
输出数据时出现第一行竖线与后面竖线错开,出现错位现象,为什么一个控件
反映到不同行却出现不同效果,请高手给予指导,本人不胜感激!
如:
01 | |11 |12 |13 |14
| 02 21| 22| 23| 24|
03| 31| 32| 33| 34|
04| 41| 42| 43| 44|
往下均正常 ,就第一行和第二行第一个竖线不正确 ,清高手给予指正
2.如何实现让QRLabel动态调入表的属性,连接的表不同属性不同,同时让QRDBText动态显示表的内容,连接不同的表显示不同的内容
 
用QReport制作报表时遇到两个问题
1.在detail部分用QRDBText显示数据,将QRDBText1.frame.drawright:=true;
输出数据时出现第一行竖线与后面竖线错开,出现错位现象,为什么一个控件
反映到不同行却出现不同效果,请高手给予指导,本人不胜感激!
如:
01 | |11 |12 |13 |14
| 02 21| 22| 23| 24|
03| 31| 32| 33| 34|
04| 41| 42| 43| 44|
往下均正常 ,就第一行和第二行第一个竖线不正确 ,清高手给予指正
2.如何实现让QRLabel动态调入表的属性,连接的表不同属性不同,同时让QRDBText动态显示表的内容,连接不同的表显示不同的内容
 
以上问题已经解决,新的问题出现了,如何释放组件,我用动态数组创建了组件,而在组件释放事件中出现错误如我想释放组件
procedure TForm1.QuickRep1AfterPreview(Sender: TObject);
var
i:integer;
begin
for i:=0 to ColumnHeaderBand1.ControlCount-1do
begin
ColumnHeaderBand1.RemoveComponent(ColumnHeaderBand1.Components);
end;
end;
异常提示为 project2.exe raise exception class EListError with message 'List
index out of bounds(0)'.process stopped. Use Step or Run to continue.
 
为什么没人呢,我这问题有这么难吗?我是新手请大家帮忙呀,谢谢拉
 
用FastReport吧簡單好用效率不錯
 
不是难,是高手都还在放假,你若是用的fastreport我还能出几招,但我没用过QReport
 
通常做报表用FastReport,问题比较容易解决.建议你可以上www.delphibox.com去查看一些代码
 
to:上不去呀
 
你不能在afterpreview后就释放控件,你可以在创建控件的时候指定本report作为owner,这样让delphi自动帮助你释放。
 
to fausten
我是新手,请多指教怎么指定report作为owner呀
 
就是在TObject.Create(AOwner: TComponent);中的AOwner传入TQuickRep。
 
以下是我用动态创建控件方法创建的报表程序(使用QReport),程序运行后,电击button1将出现报表预览界面,而关闭预览界面就报错:access violation at address 00401D1E
inmodule 'project2.exe'请问大伙如何解决
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
n:integer;
Labels:array of TQRLabel;
texts:array of TQRDBText;
shapes:array of TQRShape;
begin
with adoquery1do
begin
Close;
SQL.Clear;
SQL.Add('select * from b');
open;
end;
n:=adoquery1.FieldCount;
SetLength(Labels,n);
SetLength(texts,n);
setlength(shapes,2*n-1);
for i:=0 to n-1do
begin
Labels:= TQRLabel.Create(self);
with TQRLabel(Labels)do
begin
Name := 'QRlabel' + inttostr(i+3);
Parent :=ColumnHeaderBand1 ;
Left := 30+60*i;
Width := 20;
Height := 14;
Caption:= adoquery1.Fields.FieldName;
end;
texts:=TQRDBText.Create(self);
with TQRDBText(texts)do
begin
name:='QRDBText'+inttostr(i+1);
Parent:=DetailBand1;
Left := 30+60*i;
Width := 20;
Height := 10;
dataset:=adoquery1;
datafield:=adoquery1.Fields.FieldName;
end;
end;
for i:=0 to (2*n-1)do
begin
shapes:=TQRShape.Create(self);
with TQRShape(shapes)do
begin
name:='QRShape'+inttostr(i+1);
if i<n then
begin
parent:=ColumnHeaderBand1;
left:=40+60*i;
shape:=qrsVertLine;
height:=ColumnHeaderBand1.Height;
end
else
begin
parent:=DetailBand1;
left:=40+60*(i-n);
shape:=qrsVertLine;
height:=DetailBand1.Height;
end;
end;
end;
QuickRep1.Preview;
end;
end.
 
接受答案了.
 
后退
顶部