不知道为什么第三层不可以在第二层上展开?我所要展开的层跑到第一层去了?请高手帮我看一下语句,谢谢~~~/////////////////   以下第三层procedure TForm2.AddWorker1(var Node1:TTreeNode);
var
  List:TADOQuery;
begin
  List:=TAdoQuery.Create(nil);
  List.Connection:=dm.ado;
  with List do
  begin
    Close;
    Sql.Clear;
    Sql.Add('select * from malatamobille.dbo.ICBom where fbomnumber=:par');
    parameters.ParamByName('par').Value:=Node1.text;
    Prepared;
    open;
    While not Eof do
    begin
     TreeView1.Items.AddChild(node1,FieldbyName('fbomnumber').AsString);
      next;
    end;
  end;
  List.Free;
end; /////////////////   以下第二层
procedure TForm2.AddWorker(var Node:TTreeNode);
var
  List:TADOQuery;
  //////
  node1:TTreeNode;
begin
  List:=TAdoQuery.Create(nil);
  List.Connection:=dm.ado;
  with List do
  begin
    Close;
    Sql.Clear;
    Sql.Add('exec gbom :par');
    parameters.ParamByName('par').Value:=Node.text;
    Prepared;
    open;
    While not Eof do
    begin
     TreeView1.Items.AddChild(node,FieldbyName('fname').AsString);
     node1:=TreeView1.Items.Add(nil,Fieldbyname('fname').AsString);//dept_id
      AddWorker1(node1);
      next;
    end;
  end;end;
 /////////////////   以下第一层
Procedure TForm2.addDepartment;
var
  node:TTreeNode;
begin
  With AQlist do
  begin
    Close;
    sql.Clear;
    Sql.Add('select * from malatamobille.dbo.ICBomGroup where fparentid=0 order by fname');
    Prepared;
    open;
    While not Eof do
    begin
      node:=TTreeNode.Create(nil);
      node:=TreeView1.Items.Add(nil,Fieldbyname('fnumber').AsString);//dept_id
      AddWorker(node);
      next;
    end;
  end;
end;

解决方案 »

  1.   

    node1:=TreeView1.Items.Add(nil,Fieldbyname('fname').AsString);//dept_id 
    这里有问题
    在一个函数中用循环就可以了,没必要写在三个,而且好像你的可以用递归直接实现了
      

  2.   

    不知道为什么第三层不可以在第二层上展开?我所要展开的层跑到第一层去了?请高手帮我看一下语句,谢谢~~~ /////////////////  以下第三层 procedure TForm2.AddWorker1(var Node1:TTreeNode); 
    var 
      List:TADOQuery; 
    begin 
      List:=TAdoQuery.Create(nil); 
      List.Connection:=dm.ado; 
      with List do 
      begin 
        Close; 
        Sql.Clear; 
        Sql.Add('select * from malatamobille.dbo.ICBom where fbomnumber=:par'); 
        parameters.ParamByName('par').Value:=Node1.text; 
        Prepared; 
        open; 
        While not Eof do 
        begin 
        TreeView1.Items.AddChild(node1,FieldbyName('fbomnumber').AsString); 
          next; 
        end; 
      end; 
      List.Free; 
    end; /////////////////  以下第二层 
    procedure TForm2.AddWorker(var Node:TTreeNode); 
    var 
      List:TADOQuery; 
      ////// 
      node1:TTreeNode; 
    begin 
      List:=TAdoQuery.Create(nil); 
      List.Connection:=dm.ado; 
      with List do 
      begin 
        Close; 
        Sql.Clear; 
        Sql.Add('exec gbom :par'); 
        parameters.ParamByName('par').Value:=Node.text; 
        Prepared; 
        open; 
        While not Eof do 
        begin 
        TreeView1.Items.AddChild(node,FieldbyName('fname').AsString); 
        node1:=TreeView1.Items.Add(nil,Fieldbyname('fname').AsString);//dept_id 
          AddWorker1(node1); 
          next; 
        end; 
      end; end; 
    /////////////////  以下第一层 
    Procedure TForm2.addDepartment; 
    var 
      node:TTreeNode; 
    begin 
      With AQlist do 
      begin 
        Close; 
        sql.Clear; 
        Sql.Add('select * from malatamobille.dbo.ICBomGroup where fparentid=0 order by fname'); 
        Prepared; 
        open; 
        While not Eof do 
        begin 
          node:=TTreeNode.Create(nil); 
          node:=TreeView1.Items.Add(nil,Fieldbyname('fnumber').AsString);//dept_id 
          AddWorker(node); 
          next; 
        end; 
      end; 
    end; 
    注意红色部分:第二层中的node1是局部变量,第三层根本访问不到怎么能够显示正确啊,设置为全局变量。
      

  3.   

    procedure TForm2.AddWorker(var Node:TTreeNode); 
    var 
      List:TADOQuery; 
      ////// 
      node1:TTreeNode; 
    begin 
      List:=TAdoQuery.Create(nil); 
      List.Connection:=dm.ado; 
      with List do 
      begin 
        Close; 
        Sql.Clear; 
        Sql.Add('exec gbom :par'); 
        parameters.ParamByName('par').Value:=Node.text; 
        Prepared; 
        open; 
        While not Eof do 
        begin 
        TreeView1.Items.AddChild(node,FieldbyName('fname').AsString); 
        node1:=TreeView1.Items.Add(nil,Fieldbyname('fname').AsString);//dept_id 
          AddWorker1(node1); 
          next; 
        end; 
      end; end; 红色部分已经将node1置为第一层了
      

  4.   

    procedure TForm2.AddWorker(var Node:TTreeNode); 
    var 
      List:TADOQuery; 
      ////// 
      node1:TTreeNode; 
    begin 
      List:=TAdoQuery.Create(nil); 
      List.Connection:=dm.ado; 
      with List do 
      begin 
        Close; 
        Sql.Clear; 
        Sql.Add('exec gbom :par'); 
        parameters.ParamByName('par').Value:=Node.text; 
        Prepared; 
        open; 
        While not Eof do 
        begin 
        node1:=TreeView1.Items.AddChild(node,FieldbyName('fname').AsString); 
        //node1:=TreeView1.Items.Add(nil,Fieldbyname('fname').AsString);//dept_id 

          AddWorker1(node1); 
          next; 
        end; 
      end; end; 
      

  5.   

    按楼上bdmh改动 还是在第二层展不出第三层
      

  6.   

    你跟踪一下,看看第三层中node1取值对不对