问题出在在递归函数中又用了同样的ADO2,所以要将ADO的结果集保存在动态数组中然后再递归
//先定义一个和字段数一样的记录
Arec = Record
  id int,
  fieldname string[30]
endprocedure TForm1.nexttree(var pid:integer;current_node:ttreenode);
var one_node,two_node,oldnode:ttreenode;
var oldpid,mypid,i:integer;
var myname:string;
//var recar = array of Arec;  记录数组
begin
                one_node:=current_node;
                ADO2.close;
                ADO2.sql.clear;
                ADO2.sql.Add('select id,fieldname from test where pid='+inttostr(pid));
                ADO2.open;
                //把所有记录存入数组recar中
                 
                for i:=Low(recar) to High(recar)  do
                begin
                        //mypid:=ADO2.fieldbyname('id').asinteger;
                        mypid := recar[i].id;
                        //myname:=ADO2.fieldbyname('fieldname').asstring;
                        myfieldname = recar[i].fieldname;
                        two_node:=TreeView1.items.addchild(one_node,myname);
                        if overzero(mypid) then nexttree(mypid,two_node);
                        ADO2.next;
                end;
end;