我的报表上面放置
PageHeader
rbDetail
Sub Detail
三个band
在QuickRep1的OnNeedData事件中
procedure TReportForm.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
begin
MoreData:= true;
if ADOQuery1.Eof then
begin
MoreData:= false;
exit;
end
else ADOQuery1.Next;
end;
在Sub Detail band的OnNeedData事件中
procedure TReportForm.SubDetailBandNeedData(Sender: TObject;
var MoreData: Boolean);
var
len: integer;
begin
MoreData:= true;
if len < 50 then
MoreData:= false
** else CreateQRLabel(OffSetStrList);//OffSetStrList是一个TStringList类型
end; //程序执行到这里后报上面的错误???
注销掉**这一句,报表预览没问题。那位能帮我解决这个问题? 分不够可以另开贴再加!!!procedure TSReportForm.CreateQRLabel(OffSetStrList: TStringList);
var
i: integer;
begin
SetLength(SubDetail, OffSetStrList.Count);
for i:= 0 to OffSetStrList.Count - 1 do
begin
ChuK[i]:= TQRLabel.Create(Self);
ChuK[i].Parent:= SubDetail;
ChuK[i].Left:= i * 10;
ChuK[i].Top:= i * 5;
ChuK[i].Caption:= OffSetStrList.Strings[i];
end;
end;运行后预览报表是出现EAccessViolation异常:
'Access Violation at address 005A4C7C in Module 'project.ext'';
请问只是这么回事?怎么解决?
那位能帮我解决这个问题? 分不够可以另开贴再加!!!
PageHeader
rbDetail
Sub Detail
三个band
在QuickRep1的OnNeedData事件中
procedure TReportForm.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
begin
MoreData:= true;
if ADOQuery1.Eof then
begin
MoreData:= false;
exit;
end
else ADOQuery1.Next;
end;
在Sub Detail band的OnNeedData事件中
procedure TReportForm.SubDetailBandNeedData(Sender: TObject;
var MoreData: Boolean);
var
len: integer;
begin
MoreData:= true;
if len < 50 then
MoreData:= false
** else CreateQRLabel(OffSetStrList);//OffSetStrList是一个TStringList类型
end; //程序执行到这里后报上面的错误???
注销掉**这一句,报表预览没问题。那位能帮我解决这个问题? 分不够可以另开贴再加!!!procedure TSReportForm.CreateQRLabel(OffSetStrList: TStringList);
var
i: integer;
begin
SetLength(SubDetail, OffSetStrList.Count);
for i:= 0 to OffSetStrList.Count - 1 do
begin
ChuK[i]:= TQRLabel.Create(Self);
ChuK[i].Parent:= SubDetail;
ChuK[i].Left:= i * 10;
ChuK[i].Top:= i * 5;
ChuK[i].Caption:= OffSetStrList.Strings[i];
end;
end;运行后预览报表是出现EAccessViolation异常:
'Access Violation at address 005A4C7C in Module 'project.ext'';
请问只是这么回事?怎么解决?
那位能帮我解决这个问题? 分不够可以另开贴再加!!!
这句不要行不行?
SetLength(SubDetail, OffSetStrList.Count);// 这句写错了。
应该是
SetLength(ChuK, OffSetStrList.Count);
我的报表上面放置
PageHeader
rbDetail
Sub Detail
三个band
在QuickRep1的OnNeedData事件中
procedure TReportForm.QuickRep1NeedData(Sender: TObject;
var MoreData: Boolean);
begin
MoreData:= true;
if ADOQuery1.Eof then
begin
MoreData:= false;
exit;
end
else ADOQuery1.Next;
end;
在Sub Detail band的OnNeedData事件中
procedure TReportForm.SubDetailBandNeedData(Sender: TObject;
var MoreData: Boolean);
var
len: integer;
begin
MoreData:= true;
if len < 50 then
MoreData:= false
** else CreateQRLabel(OffSetStrList);//OffSetStrList是一个TStringList类型
end; //程序执行到这里后报上面的错误???
注销掉**这一句,报表预览没问题。那位能帮我解决这个问题? 分不够可以另开贴再加!!!procedure TSReportForm.CreateQRLabel(OffSetStrList: TStringList);
var
i: integer;
begin
SetLength(ChuK, OffSetStrList.Count);
for i:= 0 to OffSetStrList.Count - 1 do
begin
ChuK[i]:= TQRLabel.Create(Self);
ChuK[i].Parent:= SubDetail;
ChuK[i].Left:= i * 10;
ChuK[i].Top:= i * 5;
ChuK[i].Caption:= OffSetStrList.Strings[i];
end;
end;运行后预览报表是出现EAccessViolation异常:
'Access Violation at address 005A4C7C in Module 'project.ext'';
请问只是这么回事?怎么解决?
那位能帮我解决这个问题? 分不够可以另开贴再加!!!
MoreData:= false
** else CreateQRLabel(OffSetStrList)
这个地方直接将程序挂上,不要用子程序。
我单步调试,
进入DBGridEh(DBGridEh用于进行选择打印)的源码出错如下
procedure TDBGridEhStyle.StyleWndProc(var Msg: TMessage);
begin
with Msg do
if Msg = WM_SYSCOLORCHANGE then
try
SysColorChanged;
except
Application.HandleException(Self);
end
else
Result := DefWindowProc(FWindowHandle, Msg, wParam, lParam);
end;/////执行到这里出错
EAccessViolation异常:
'Access Violation at address 005A4C7C in Module 'project.ext'',read of Address 00000028.
procedure TSReportForm.CreateQRLabel(OffSetStrList: TStringList);
var
i: integer;
begin
SetLength(ChuK, OffSetStrList.Count);
for i:= 0 to OffSetStrList.Count - 1 do
begin
ChuK[i]:= TQRLabel.Create(Self);
ChuK[i].Parent:= SubDetail;//程序执行到这句出错,屏蔽后程序正常,但不能显示出值
ChuK[i].Left:= i * 10;
ChuK[i].Top:= i * 5;
ChuK[i].Caption:= OffSetStrList.Strings[i];
end;
end;
另外,把创建TQRLabel的操作放在Form的OnCreate事件中,程序正常,如
SetLength(ChuK, 5);
for i:= 0 to 4 do
begin
ChuK[i]:= TQRLabel.Create(Self);
ChuK[i].Parent:= SubDetail;
ChuK[i].Left:= i * 10;
ChuK[i].Top:= i * 5;
ChuK[i].Caption:= Format('%d', [i]);
end;
程序正常,且能显示出来。