问题出在在递归函数中又用了同样的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;
//先定义一个和字段数一样的记录
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;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货