delphi中递归算法构建treeView(查询数据库在递归函数内部)

原创 2006年05月17日 09:20:00

delphi中递归算法构建treeView

过程:
通过读取数据库中table1的数据,来构建一颗树。table1有两个字段:ID,preID,即当前结点标志和父结点标志。所以整个树的表示为父母表示法。本递归算法不难写,但是要注意:程序内部的变量都应使用局部变量!比如当Query是外部变量(函数外定义或者直接通过控件拖拽得来)时就会得到错误的结果。代码如下:

 


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DB, ADODB, ComCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    tree: TTreeView;
    Query1: TADOQuery;
    procedure Button1Click(Sender: TObject);
    procedure CreateTree;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  PTNodeInfo=^TNodeInfo;
  TNodeInfo=record
   id,preId:string;
   end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.CreateTree;

  procedure CreateTree(Pre:string;preNode:TTreeNode);
  var
    pInfo:PTNodeInfo;
    node:TTreeNode;
    sql:string;
    Query:TADOQUery;
  begin
    Query:=TADOQuery.Create(nil);
    Query.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/实验/递归父母表示/新建 Microsoft Office Access 应用程序.mdb;Persist Security Info=False';
    sql:= Format('select * from table1 where preId=%s', [QuotedStr(pre)]);
    Query.Close;
    Query.SQL.Clear;
    Query.SQL.Add(sql);
    Query.Open;
    Query.First;
    while not Query.Eof do
    begin
      new(pInfo);
      pInfo.id:=Query.Fields[0].AsString;
      pInfo.preId:=Query.Fields[1].AsString;
      node:=tree.Items.AddChild(preNode,pInfo.id);
      node.Data:=pInfo;
      CreateTree(pInfo.id,node);
      Query.Next;
    end;
    Query.Close;
    Query.Free;
  end;
begin
  createTree('000',nil);
  tree.FullExpand;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  createtree;
end;

end.

 

createTree函数也可以这么写:
procedure TForm1.CreateTree;
var
  p:pTNodeInfo;
  procedure CreateTree(Pre:PTNodeInfo;preNode:TTreeNode);
  var
    pInfo:pTNodeInfo;
    node:TTreeNode;
    sql:string;
    Query:TADOQuery;
  begin
    Query:=TADOQuery.Create(nil);
    Query.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:/实验/递归父母表示/新建 Microsoft Office Access 应用程序.mdb;Persist Security Info=False';
    sql:= 'select * from table1';
    Query.Close;
    Query.SQL.Clear;
    Query.SQL.Add(sql);
    Query.Open;
    Query.First;
    while not Query.Eof do
    begin
      new(pInfo);
      pInfo.id:=Query.Fields[0].AsString;
      pInfo.preId:=Query.Fields[1].AsString;
      if pInfo.preId=pre.id then
      begin
        node:=tree.Items.AddChild(preNode,pInfo.id);
        node.Data:=pInfo;
        CreateTree(pInfo,node);
      end;
      Query.Next;
    end;
  end;
begin
  new(p);
  p.id:='000';
  createTree(p,nil);
  tree.FullExpand;
end;

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Delphi 中递归生成TreeView节点的方法

在数据库中建一张表,包含:NodeName,NodeId,ParentId 3个字段,具体什么含义,一看就知了。 过程如下: procedure TFRM_channel.formtreenode...

delphi TREEVIEW的简单使用

.1.添加、删除、修改节点: 静态的方法可以在设计时通过Items的编辑器设置各节点的内容。 在添加和删除前必须保证有节点被选中(Treeview.Selected = nil) 用AddFir...

delphi中Treeview的使用介绍

今天重点学习了TreeView的使用方法,基本的已经写了,现在主要想说的是如何显示数据库的资料,今天只是做了个较简单的例子,一个父节点下显示数据库中某个field的值。代码如下:    proc...

Delphi中根据分类数据生成树形结构的最优方法

一、 引言:     TreeView控件适合于表示具有多层次关系的数据。它以简洁的界面,表现形式清晰、形象,操作简单而深受用户喜爱。而且用它可以实现ListView、ListBox所无法实现的很多...

DelPhi Treeview 操作实例 onclick节点 treeview1.Selected.Level

怎么改变Treeview中的图标? OnClick事件Click获取Node.text 批量处理及实现TreeView结点拖拽的实例 //这个过程根据你的要求选择图标 procedure TF...

delphi 递归遍历TreeView树节点

/以下全部调试通过,你在窗体扔一个Treeview就行了 procedure GetRootNodes(ATreeView:TTreeView);//得到所有根节点 var vNode:TTr...

winform treeview checkbox----递归算法利用

现勒,请看 using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat...

delphi编写的数独递归算法

  • 2017-07-04 00:03
  • 499KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)