我的报表上面放置
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 ADOQuery.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'';
请问只是这么回事?怎么解决?ps: **这一句执行通过。

解决方案 »

  1.   

    在QuickRep1的OnNeedData事件中
    procedure TReportForm.QuickRep1NeedData(Sender: TObject;
      var MoreData: Boolean);
    begin
        MoreData:= true;
        if ADOQuery1.Eof then
        begin
          MoreData:= false;
          exit;
        end
        else ADOQuery.Next;//写错了,是ADOQuery1.Next;
    end;
      

  2.   

    预览报表时
    //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; //程序执行到这里后报上面的错误???
    注销掉**这一句,报表预览没问题。那位能帮我解决这个问题? 分不够可以另开贴再加!!!
      

  3.   

    SetLength(SubDetail, OffSetStrList.Count); //这一句吧。
      

  4.   

    抱歉,是我写错了。应该是SetLength(ChuK, OffSetStrList.Count); 
      

  5.   

    重新整理如下:
    我的报表上面放置
    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'';
    请问只是这么回事?怎么解决?
      

  6.   

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

  7.   

    我单步调试,
    进入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.