当前位置:主页>销售管理软件> 列表

请教制作报表高手,请给指条明道

仓库管理软件版1楼: 用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动态显示表的内容,连接不同的表显示不同的内容

2楼: 以上问题已经解决,新的问题出现了,如何释放组件,我用动态数组创建了组件,而在组件释放事件中出现错误如我想释放组件
procedure TForm1.QuickRep1AfterPreview(Sender: TObject);
var
i:integer;
begin
for i:=0 to ColumnHeaderBand1.ControlCount-1 do
begin
ColumnHeaderBand1.RemoveComponent(ColumnHeaderBand1.Components[i]);


end;
end;
异常提示为 project2.exe raise exception class EListError with message ''List
index out of bounds(0)''.process stopped. Use Step or Run to continue. 如jsp进销存管理系统

3楼: 为什么没人呢,我这问题有这么难吗?我是新手请大家帮忙呀,谢谢拉

4楼: 用FastReport吧簡單好用效率不錯

5楼: 不是难,是高手都还在放假,你若是用的fastreport我还能出几招,但我没用过QReport

6楼: 通常做报表用FastReport,问题比较容易解决.建议你可以上www.delphibox.com去查看一些代码

仓库管理软件版7楼: to:上不去呀

8楼: 你不能在afterpreview后就释放控件,你可以在创建控件的时候指定本report作为owner,这样让delphi自动帮助你释放。

9楼: to fausten
我是新手,请多指教怎么指定report作为owner呀

10楼: 就是在TObject.Create(AOwner: TComponent);中的AOwner传入TQuickRep。

11楼: 以下是我用动态创建控件方法创建的报表程序(使用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 adoquery1 do
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-1 do
begin
Labels[i]:= TQRLabel.Create(self);
with TQRLabel(Labels[i]) do
begin
Name := ''QRlabel'' + inttostr(i+3);
Parent :=ColumnHeaderBand1 ;
Left := 30+60*i;
Width := 20;
Height := 14;
Caption:= adoquery1.Fields[i].FieldName;
end;
texts[i]:=TQRDBText.Create(self);
with TQRDBText(texts[i]) do
begin
name:=''QRDBText''+inttostr(i+1);
Parent:=DetailBand1;
Left := 30+60*i;
Width := 20;
Height := 10;
dataset:=adoquery1;

datafield:=adoquery1.Fields[i].FieldName;
end;
end;
for i:=0 to (2*n-1) do
begin
shapes[i]:=TQRShape.Create(self);
with TQRShape(shapes[i]) do
begin
name:=''QRShape''+inttostr(i+1);
if i 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.

12楼: 接受答案了. 如用友财务软件破解