表:
id nodeid description
2 01 一二階文件
3 01 三階文件
4 02 客戶特殊規格書
5 02 產品規格
6 02 燒結半成品規格書
7 02 副材料規格書
8 02 成品包裝規格書
9 02 三廠一致性作業標准
10 02 高安各單位作業標准
11 01 外來文件
代碼:
procedure TOneTwoLevelForm.LoadSubNode(snode:TTreeNode;nodekind:String);
var
subnode:TTreeNode;
nname,nid:String;
p1:Pint;
begin
with ADOQuery1 do
begin
Close;
SQL.Add('select * from FMC_Category where nodeid=:a');
Parameters.ParamByName('a').Value:=nodekind;
Open;
ExecSQL;
First;
while not eof do
begin
nid:=FieldByName('nodeid').AsString;
nname:=FieldByName('description').AsString;
new(p1);
p1^.nodeid:=nid;
p1^.nodename:=nname;
subnode:=TreeView1.Items.AddChildObject(snode,nname,p1);
LoadSubNode(subnode,nid);
next;
end;
end;
end;
//調用:
procedure TOneTwoLevelForm.FormShow(Sender: TObject);
var
rootnode:TTreeNode;
p1:Pint;
begin
new(p1);
p1^.nodeid:='00';
p1^.nodename:='公司';
rootnode:=TreeView1.Items.AddChildObject(nil,'AA',p1);
LoadSubNode(rootnode,'00');
end; 我想實現的是:+一二階文件
+三階文件
|-客戶特殊規格書
|-產品規格
|-...
|-xx各單位作業標准
+外來文件
請問各位高手,那個遞歸錯在哪?遞歸我不是很懂啊!
謝謝大家了!
id nodeid description
2 01 一二階文件
3 01 三階文件
4 02 客戶特殊規格書
5 02 產品規格
6 02 燒結半成品規格書
7 02 副材料規格書
8 02 成品包裝規格書
9 02 三廠一致性作業標准
10 02 高安各單位作業標准
11 01 外來文件
代碼:
procedure TOneTwoLevelForm.LoadSubNode(snode:TTreeNode;nodekind:String);
var
subnode:TTreeNode;
nname,nid:String;
p1:Pint;
begin
with ADOQuery1 do
begin
Close;
SQL.Add('select * from FMC_Category where nodeid=:a');
Parameters.ParamByName('a').Value:=nodekind;
Open;
ExecSQL;
First;
while not eof do
begin
nid:=FieldByName('nodeid').AsString;
nname:=FieldByName('description').AsString;
new(p1);
p1^.nodeid:=nid;
p1^.nodename:=nname;
subnode:=TreeView1.Items.AddChildObject(snode,nname,p1);
LoadSubNode(subnode,nid);
next;
end;
end;
end;
//調用:
procedure TOneTwoLevelForm.FormShow(Sender: TObject);
var
rootnode:TTreeNode;
p1:Pint;
begin
new(p1);
p1^.nodeid:='00';
p1^.nodename:='公司';
rootnode:=TreeView1.Items.AddChildObject(nil,'AA',p1);
LoadSubNode(rootnode,'00');
end; 我想實現的是:+一二階文件
+三階文件
|-客戶特殊規格書
|-產品規格
|-...
|-xx各單位作業標准
+外來文件
請問各位高手,那個遞歸錯在哪?遞歸我不是很懂啊!
謝謝大家了!
解决方案 »
- 将memo 中的文字保存到txt文档中
- 关于停靠的问题
- 万事惧备.只欠东风
- 公司里收到borland盗版律师公函,请问大家如何处理啊?
- d6,fastreport2.47 不预览直接打印在2003下老提示保存一个文件然后打印
- 如何在DELPHI中以隐含方式打开PowerPoint文稿
- 如何读写“.bin”格式的文件?
- 关于Query与Sql的问题
- 请教如何判断udp端口号是否被占用?
- 为什么编译的时候老是提示'file not found '***.dcu''??????急救。。。。。。
- FastRepor交叉报表的问题:怎么把报表左上角那个缺口填补上??
- IdFtp取得ftp站点文件的日期时间和文件大小
with ADOQuery1 do
begin
Close;
SQL.Add('select * from FMC_Category where nodeid=:a');
Parameters.ParamByName('a').Value:=nodekind;
Open;
ExecSQL;
First;
等等这些代码写在递归的函数里面,因为你每次递归调用都会重复执行close open(顺便说一句,这段代码也是不规范的,select的时候不要用execsql,open就可以了)个人意见:递归用不好反而不如不用。
你每次递归的时候,ADOQuery1里的数据早就面目全非了
你的需要定义一个TADOQuery变量 每次递归创建一个query实例
SQL.Add('select * from FMC_Category where nodeid=:a');
Parameters.ParamByName('a').Value:=nodekind;
Open;
ExecSQL; //把这句话去掉先,根本不需要
First;
var
subnode:TTreeNode;
nname,nid:String;
p1:Pint;
ADOQuery : TAdoQuery
begin
ADOQuery := TAdoQuery.Create(self);
ADOQuery.Connection:=...;
with ADOQuery1 do
begin
Close;
SQL.Add('select * from FMC_Category where nodeid=:a');
Parameters.ParamByName('a').Value:=nodekind;
Open;
ExecSQL;
First;
while not eof do
begin
nid:=FieldByName('nodeid').AsString;
nname:=FieldByName('description').AsString;
new(p1);
p1^.nodeid:=nid;
p1^.nodename:=nname;
subnode:=TreeView1.Items.AddChildObject(snode,nname,p1);
LoadSubNode(subnode,nid);
next;
end;
end;
Freeandnil(ADOQuery);
end;
var
subnode:TTreeNode;
nname,nid:String;
p1:Pint;
ADOQuery : TAdoQuery
begin
ADOQuery := TAdoQuery.Create(self);
ADOQuery.Connection:=...;
with ADOQuery do
begin
Close;
SQL.Add('select * from FMC_Category where nodeid=:a');
Parameters.ParamByName('a').Value:=nodekind;
Open;
ExecSQL;
First;
while not eof do
begin
nid:=FieldByName('nodeid').AsString;
nname:=FieldByName('description').AsString;
new(p1);
p1^.nodeid:=nid;
p1^.nodename:=nname;
subnode:=TreeView1.Items.AddChildObject(snode,nname,p1);
LoadSubNode(subnode,nid);
next;
end;
end;
Freeandnil(ADOQuery);
var
subnode:TTreeNode;
nname,nid:String;
p1:Pint;
ADOQuery1:TADOQuery;
begin
ADOQuery1:=TADOQuery.Create(self);
ADOQuery1.Connection:=F_DMSQL.DM_SQL.UT_SORT;
with ADOQuery1 do
begin
Close;
SQL.Add('select * from FMC_Category where nodeid=:a');
Parameters.ParamByName('a').Value:=nodekind;
Open;
First;
while not eof do
begin
nid:=FieldByName('nodeid').AsString;
nname:=FieldByName('description').AsString;
new(p1);
p1^.nodeid:=nid;
p1^.nodename:=nname;
subnode:=TreeView1.Items.AddChildObject(snode,nname,p1);
LoadSubNode(subnode,nid);
next;
end;
end;
FreeAndNil(ADOQuery1);
end;//加載01
procedure TOneTwoLevelForm.Button1Click(Sender: TObject);
var
rootnode:TTreeNode;
p1:Pint;
begin
new(p1);
p1^.nodeid:='01';
p1^.nodename:='公司';
rootnode:=TreeView1.Items.AddChildObject(nil,'AA',p1);
LoadSubNode(rootnode,'01');
end;