我的报表上面放置
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'';
请问只是这么回事?怎么解决?
那位能帮我解决这个问题? 分不够可以另开贴再加!!!

解决方案 »

  1.   

    SetLength(SubDetail, OffSetStrList.Count);
    这句不要行不行?
      

  2.   

    楼上:不行啊!我要通过这句来确定数组的数目(即:程序得动态创建多少个TQRLabel)。
      

  3.   

    抱歉!!!
    SetLength(SubDetail, OffSetStrList.Count);// 这句写错了。
    应该是
    SetLength(ChuK, OffSetStrList.Count);
      

  4.   

    重新整理如下:
    我的报表上面放置
    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'';
    请问只是这么回事?怎么解决?
    那位能帮我解决这个问题? 分不够可以另开贴再加!!!
      

  5.   

    if len < 50 then
        MoreData:= false
    **  else CreateQRLabel(OffSetStrList)
    这个地方直接将程序挂上,不要用子程序。
      

  6.   

    楼上:如果这样,程序可以预览,但是TQRLabel没能显示出来!
      

  7.   

    To taogou(遭受致命错误,正在初始化.....) :
    我单步调试,
    进入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.
      

  8.   

    最新发现:
    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;
    程序正常,且能显示出来。