请问如何使用递归,能帮我逐条解条解释一下下面的代码吗?Thanks!
SQL中数据表MaterielType有字段no/type/ParentNo,其记录值由用户决定,比如:
no type ParentNo
1 成品
2 半成品
3 面板 1
4 网框 1
5 导相管 1
6 装饰板 2
7 相件 3现要求建立一树TreeView,对应表中的记录。
|--1--3--7
| --4
| --5
|--2--6代码如下:
procedure TForm1.newtreeview(Node:TTreeNode;ParentID:integer);
var
tmpNode : TTreeNode;
ADOquery1 : TADOQuery;
begin
ADOQuery1 := TADOQuery.Create(self);
ADOQuery1.Connection := ADOConnection1;
ADOQuery1.close;
ADOQuery1.SQL.clear;
ADOQuery1.SQL.Text := 'select * from table where Parentno ='+inttostr(ParentID);
ADOQuery1.open;
if ADOQuery1.recordcount > 0 then
begin
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
tmpNode := TreeView1.Items.AddChild(Node,ADOQuery1.FieldByName('type').AsString);
Newtreeview(tmpNode,ADOQuery1.FieldByName('no').AsInteger);
ADOQuery1.next;
end;
end;
ADOQuery1.Free;
end;
//楼主将前两条记录的ParentNo改为0
procedure TForm1.Button1Click(Sender: TObject);
begin
newtreeview(nil,0);
end;
SQL中数据表MaterielType有字段no/type/ParentNo,其记录值由用户决定,比如:
no type ParentNo
1 成品
2 半成品
3 面板 1
4 网框 1
5 导相管 1
6 装饰板 2
7 相件 3现要求建立一树TreeView,对应表中的记录。
|--1--3--7
| --4
| --5
|--2--6代码如下:
procedure TForm1.newtreeview(Node:TTreeNode;ParentID:integer);
var
tmpNode : TTreeNode;
ADOquery1 : TADOQuery;
begin
ADOQuery1 := TADOQuery.Create(self);
ADOQuery1.Connection := ADOConnection1;
ADOQuery1.close;
ADOQuery1.SQL.clear;
ADOQuery1.SQL.Text := 'select * from table where Parentno ='+inttostr(ParentID);
ADOQuery1.open;
if ADOQuery1.recordcount > 0 then
begin
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
tmpNode := TreeView1.Items.AddChild(Node,ADOQuery1.FieldByName('type').AsString);
Newtreeview(tmpNode,ADOQuery1.FieldByName('no').AsInteger);
ADOQuery1.next;
end;
end;
ADOQuery1.Free;
end;
//楼主将前两条记录的ParentNo改为0
procedure TForm1.Button1Click(Sender: TObject);
begin
newtreeview(nil,0);
end;
解决方案 »
- 关于运算的问题(菜鸟)
- 启动速度慢?
- 在Delphi8中还可以使用Ado控件吗?
- F1book高级用法制作复杂报表.
- 我一朋友想要erp软件,能提供者请进。
- 怎样修改一个文件夹的名字?
- 各位高手,有没有写dll时,好的调试方法,现在写太麻烦了!!
- 我想将数据表中的数据导入到EXCEL表格中,采用以下方式却不能实现,哪位朋友帮忙指导一下!
- 急请高手,如何关联两个memo中的内容??????????????
- 请问delphi4中如何用createfile函数调用smartvsd.vxd?
- 如何在DbgridEh中自动跳到下一列、在下拉列表中能用鍵盘输入,回车后自动跳到下一列
- delphi7的代码转成delphi5该怎么转?(在线)
如没有下一节点则程序到ADOQuery1.Free;处,处理上一节点的下一节点,如上循环直到加入所有节点。递归实际是调用本过程的一程方法,程序将自动记住上一层的操作,如第一次执行时newtreeview(nil,0);程序找到两条记录no值为1和2;首先加入1,然后递归加入3,然后递归加入7,再次执行时因7无节点,故返回下一条记录,即加入节点4,4无节点,返回执行加入5,依次返回上一循环,加入2,然后6完成。