procedure Listzd_Item(code,sortcode:string;CurNode:TTreeNode);
  var
    SNode1:TTreeNode;
  begin
    try
      with cdszd_item1 do
      begin
        Close;
        CommandText:='select * from rs_zd_item where code<>parentid and parentid=:A and sortcode=:B order by code';
        Params.ParamByName('A').AsString:=Trim(code);
        Params.ParamByName('B').AsString:=Trim(sortcode);
        Open;
        if not IsEmpty then
        begin
          while not Eof do
          begin
            New(SZdNode);
            SZdNode.code:=Trim(FieldByName('code').AsString);
            SZdNode.name:=Trim(FieldByName('name').AsString);
            SNode1:=tvzd.Items.AddChildObject(CurNode,FieldByName('name').AsString,SZdNode);
            Listzd_Item(FieldByName('code').AsString,FieldByName('sortcode').AsString,SNode1);
            Next;
          end;
        end
        else
          Exit;
      end;
    finally
      //cdszd_item1.Close;
    end;
  end;大家帮我看一下,这个递归树有什么问题??怎么树显示不正确??

解决方案 »

  1.   

    需要动态创建adodataset  试试
    procedure Listzd_Item(code,sortcode:string;CurNode:TTreeNode);
      var
        SNode1:TTreeNode;
        cdszd_item1:Tadodataset;//动态创建数据集
      begin
        try
          cdszd_item1:=Tadoquery.create(nil);
          with cdszd_item1 do
          begin
            Close;
            CommandText:='select * from rs_zd_item where code<>parentid and parentid=:A and sortcode=:B order by code';
            Params.ParamByName('A').AsString:=Trim(code);
            Params.ParamByName('B').AsString:=Trim(sortcode);
            Open;
            if not IsEmpty then
            begin
              while not Eof do
              begin
                New(SZdNode);
                SZdNode.code:=Trim(FieldByName('code').AsString);
                SZdNode.name:=Trim(FieldByName('name').AsString);
                SNode1:=tvzd.Items.AddChildObject(CurNode,FieldByName('name').AsString,SZdNode);
                Listzd_Item(FieldByName('code').AsString,FieldByName('sortcode').AsString,SNode1);
                Next;
              end;
            end
            else
              Exit;
          end;
        finally
          cdszd_item1.free;  //释放数据集
          //cdszd_item1.Close;
        end;
      end;里面代码没错的话应该可以了
      

  2.   

    qizhanfeng(glacier)说的对,你只要对你原有的代码跟踪一下就知道错在哪里了,要动态建立dataset