unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, StdCtrls, Grids, DBGrids;type
Tnodedata=Record
flag:string;
f_name:string;
Fid:string;
end;
PNodeData = ^TNodeData; TForm1 = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
ADOQuery1: TADOQuery;
conn: TADOConnection;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
Procedure Buildtree(Node: TTreeNode; PN: PNodeData);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
Procedure Tform1.Buildtree(Node: TTreeNode; PN: PNodeData);
var adoQuery: TADOQuery;
nNode: TTreeNode;
PNode: PNodeData;
begin
try
adoQuery := TADOQuery.Create(nil);
adoQuery.Connection := conn;
adoQuery.SQL.Text := 'Select * from main_db where flag='''+pn^.flag+'''and Fid='''+Pn^.Fid+'''';
adoQuery.Open;
adoQuery.First;
while adoQuery.Eof = False do
begin
New(PNode);
PNode^.flag := adoQuery.FieldByName('flag').AsString;
PNode^.f_name := adoQuery.FieldByName('F_name').AsString;
Pnode^.Fid:=adoquery.fieldbyname('Fid').AsString;
nNode := Treeview1.Items.AddChildObject(Node, PNode^.f_name, PNode);
buildtree(nNode, PNode);
adoQuery.Next;
end;
finally
adoQuery.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var Pnode:PNodeData;
begin
new(Pnode);
Pnode^.flag:='1';
Pnode^.f_name:='123';
Pnode^.Fid:='世界';
buildtree(Treeview1.Items[0], PNode);
dispose(pnode);
end;end.
数据库结构如下
flag F-name fid(对应父节点)
1 世界 树根
2 中国 世界
3 河南省 中国
2 美国 世界
1 法国 世界
4 郑州 河南省
5 新郑 郑州
。
。
。
。
帮我看看为什么不能建树
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, ComCtrls, StdCtrls, Grids, DBGrids;type
Tnodedata=Record
flag:string;
f_name:string;
Fid:string;
end;
PNodeData = ^TNodeData; TForm1 = class(TForm)
Button1: TButton;
TreeView1: TTreeView;
ADOQuery1: TADOQuery;
conn: TADOConnection;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
Procedure Buildtree(Node: TTreeNode; PN: PNodeData);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
Procedure Tform1.Buildtree(Node: TTreeNode; PN: PNodeData);
var adoQuery: TADOQuery;
nNode: TTreeNode;
PNode: PNodeData;
begin
try
adoQuery := TADOQuery.Create(nil);
adoQuery.Connection := conn;
adoQuery.SQL.Text := 'Select * from main_db where flag='''+pn^.flag+'''and Fid='''+Pn^.Fid+'''';
adoQuery.Open;
adoQuery.First;
while adoQuery.Eof = False do
begin
New(PNode);
PNode^.flag := adoQuery.FieldByName('flag').AsString;
PNode^.f_name := adoQuery.FieldByName('F_name').AsString;
Pnode^.Fid:=adoquery.fieldbyname('Fid').AsString;
nNode := Treeview1.Items.AddChildObject(Node, PNode^.f_name, PNode);
buildtree(nNode, PNode);
adoQuery.Next;
end;
finally
adoQuery.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var Pnode:PNodeData;
begin
new(Pnode);
Pnode^.flag:='1';
Pnode^.f_name:='123';
Pnode^.Fid:='世界';
buildtree(Treeview1.Items[0], PNode);
dispose(pnode);
end;end.
数据库结构如下
flag F-name fid(对应父节点)
1 世界 树根
2 中国 世界
3 河南省 中国
2 美国 世界
1 法国 世界
4 郑州 河南省
5 新郑 郑州
。
。
。
。
帮我看看为什么不能建树
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, ADODB, StdCtrls, ComCtrls, Grids, DBGrids;type
TForm1 = class(TForm)
ADOConnection1: TADOConnection;
Button1: TButton;
ADOQuery1: TADOQuery;
Button2: TButton;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TreeView1: TTreeView;
TabSheet2: TTabSheet;
DataSource1: TDataSource;
ADOQuery1ID: TAutoIncField;
ADOQuery1ParentID: TIntegerField;
ADOQuery1Name: TWideStringField;
DBGrid1: TDBGrid;
Memo1: TMemo;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure FillTreeView(TreeView: TTreeView);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;procedure TForm1.FillTreeView(TreeView: TTreeView);
procedure CreateSubTree(FNodeName: string; Node: TTreeNode = nil);
var
mLocalName: string;
TreeNode: TTreeNode;
Ads_Tmp: TADODataSet;
begin
ADS_Tmp := TADODataSet.Create(Self);
ADS_Tmp.Connection := ADOConnection1;
with ADS_Tmp do
try
Close;
CommandText := 'Select * from Type Where ParentID =' + FNodeName;
Open;
First;
while not Eof do
begin
mLocalName := FieldbyName('ID').Asstring;
TreeNode := TreeView.Items.AddChild(Node, FieldByName('Name').AsString);
CreateSubTree(mLocalName, TreeNode); // 此处循环递归
Next;
end;
finally
ADS_Tmp.Free;
end;
end;
begin
TreeView.Items.BeginUpdate;
TreeView.Items.Clear;
with TreeView.Items.Add(nil, '所有目录') do
begin
ImageIndex := 1;
SelectedIndex := 1;
end;
CreateSubTree('0', TreeView.Items[0]);
TreeView.Items.EndUpdate;
TreeView.Items[1].Selected := True;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
FillTreeView(TreeView1);
end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ADOQuery1.Close;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
ADOQuery1.Open;
end;end.