错误提示如下:Exception EAccessViolation in module Wgqp.exe at 0002752A.Access Violation at address 0042752A in module'Wgqp.exe'.Read of address FBC0E9D2。
代码如下:
procedure TFrmInfoM.MakeTree(TreeView:TTreeView);
var
 Root:TTreeNode;
begin
 Root:=TreeView.Items.AddFirst(nil,'文档资料');
 MakeFirstLayer(TreeView);
end;procedure TFrmInfoM.MakeFirstLayer(TreeView:TTreeView);
var
 Sql:string;
 rs:_Recordset;
 ObjNode:TNodeObject;
 ChildNode:TTreeNode;
 CName:string;
begin
 Sql:='select distinct CataName from zlInfo';
 rs:=Database.ADOC.Execute(Sql);
 while not rs.EOF do
 begin
  CName:=rs.Fields['CataName'].Value;
  ChildNode:=TreeView.Items.AddChild(TreeView.Items.GetFirstNode,CName);
  ObjNode:=TNodeObject.Create;
  ObjNode.CName:=CName;
  ChildNode.Data:=ObjNode;
  MakeSecondLayer(TreeView,ChildNode);
  rs.MoveNext;
 end;
 rs.Close;
end;procedure TFrmInfoM.MakeSeCondLayer(TreeView:TTreeView;FatherNode:TTreeNode);
var
 Sql:&string;
 Rs:_Recordset;
 ObjNode:TNodeObject;
 ChildNode:TTreeNode;
 CName,FName:&string;
begin
 CName:=TNodeObject(FatherNode.Data).CName;
 Sql:='select distinct Name from zlinfo where cataName="'+trim(CName)+'"';
 Rs:=Database.ADOC.Execute(Sql);
 while not Rs.EOF do
 begin
  FName:=Rs.Fields['Name'].Value;
  ChildNode:=TreeView.Items.AddChild(FatherNode,FName);
  ObjNode.CName:=TNodeObject(FatherNode.Data).CName;
  ObjNode.FName:=FName;
  ChildNode.Data:=ObjNode;
  Rs.MoveNext;
 end;
 Rs.Close;
end;

解决方案 »

  1.   

    to xiaoluzhu0420(小露珠) 
     谢谢你的回答。但是没有以独占的方式打开。有谁能来解答一下吗?
      

  2.   

    多谢各位。
    我先来说明一下:上面的程序,我都在FormShow中调用。但是一关闭程序,就会出现上面的错误。
      

  3.   

    就只有这个提示了。我用单步追踪没发现什么问题,但是一关闭Form,就会出现这个错误提示
      

  4.   

    procedure TFrmInfoM.MakeTree(TreeView:TTreeView);
    var
     Root:TTreeNode;
    begin
     Root:=TreeView.Items.AddFirst(nil,'文档资料'); //pass
     MakeFirstLayer(TreeView);//pass
    end;procedure TFrmInfoM.MakeFirstLayer(TreeView:TTreeView);
    var
     Sql:string;
     rs:_Recordset;
     ObjNode:TNodeObject;
     ChildNode:TTreeNode;
     CName:string;
    begin
     Sql:='select distinct CataName from zlInfo';//pass
     rs:=Database.ADOC.Execute(Sql);//pass
     while not rs.EOF do//pass
     begin
      CName:=rs.Fields['CataName'].Value;//pass
      ChildNode:=TreeView.Items.AddChild(TreeView.Items.GetFirstNode,CName);//pass
      ObjNode:=TNodeObject.Create;//pass
      ObjNode.CName:=CName;//pass
      ChildNode.Data:=ObjNode;//pass
      MakeSecondLayer(TreeView,ChildNode);//pass
      rs.MoveNext;//pass
     end;
     rs.Close;
    rs:=nil;  <<<<<<<<<<<<<<<<記得釋放!!!
    end;procedure TFrmInfoM.MakeSeCondLayer(TreeView:TTreeView;FatherNode:TTreeNode);
    var
     Sql:&string; <<<<<????Sql:&string????
     Rs:_Recordset;
     ObjNode:TNodeObject;
     ChildNode:TTreeNode;
     CName,FName:&string;
    begin
    <<<FatherNode對象在那里創建???
     CName:=TNodeObject(FatherNode.Data).CName; <<<<<<<<<<<<<<<<這行最有可能報地址錯!!! Sql:='select distinct Name from zlinfo where cataName="'+trim(CName)+'"';
     Rs:=Database.ADOC.Execute(Sql);//pass
     while not Rs.EOF do//pass
     begin
      FName:=Rs.Fields['Name'].Value;//pass
      ChildNode:=TreeView.Items.AddChild(FatherNode,FName);//pass
      ObjNode.CName:=TNodeObject(FatherNode.Data).CName;//pass
      ObjNode.FName:=FName;//pass
      ChildNode.Data:=ObjNode;//pass
      Rs.MoveNext;//pass
     end;
     Rs.Close;
     
    rs:=nil<<<<<<<<<<<<<<<<<<<<end;
      

  5.   

    我用的是delphi2005。加上Rs:=nil,还是有错误提示:Exception EAccessViolation in module Wgqp.exe at 00000000.Access Violation at address 00000000 .Read of address 00000000。
      

  6.   

    如果出現at 00000000.Access Violation at address 00000000 這個錯誤那是
    你操作一個nil指針, 純粹的是指針錯誤!你只要一步步跟蹤就能找出答案!
      

  7.   

    >>>>
    就只有这个提示了。我用单步追踪没发现什么问题,但是一关闭Form,就会出现这个错误提示.最常見的一個種情況是你在窗體中引用了 Interface 對象. 
    你將rs:_Recordset;換成 rs:TAdoDataSet也許能排除問題!
      

  8.   

    多谢各位。我发现,如果都改为:maketree,makefirstLayer,MakesecondLayer(FatherNode:TTreenode);就没有这个错误了
      

  9.   

    不是的,我是说过程makeTree后面不带参数