通过一数据库.
生成一颗树.. 树级树未知..故不能用TTreeNode来生成..
哪位高手有办法..
生成一颗树.. 树级树未知..故不能用TTreeNode来生成..
哪位高手有办法..
解决方案 »
- DELPHI关于浮点型数据的比较
- 穷人求助:怎样编辑Mask
- delphi很简单的问题,马上结贴!
- 有没有像QQ聊天记那样显示文本控件啊
- 使用indy.异常断开后,怎么恢复连接
- 我用delphi开发,如何实现对ACCESS数据库的远程访问(数据库在同一局域网的另一台机器)
- ===关于MSHTML的一个问题===
- rad studio中有没有办法设定新建程序时的模板
- 如何使用CreateThread
- 请问如何下载csdn的离线浏览数据包?在什么地方?
- 同一sql语句,分别显示在dbgrid,dbgrideh中,执行后的结果不相同!!!
- 寻找Delphi创业合伙人!!!!!!!!!!!!!!!!!!!
按条件查询再用递归的办法添加树节点不就可以了....
我不清楚数据库里到底有多少个下级目录..Sql:String;
Mod_Id:String;
Node,Node1,Node2,Note3:TTreeNode;
begin
Node:=Tree.Items.Add(Tree.TopItem,'模块管理');
Sql:='Select * from Base_Module where PARENT_ID="0000"';
SendSqlQuery(TShare_MainCon,ADOQuery1,Sql);
while Not ADOQuery1.eof Do
begin
Node1:=Tree.Items.AddChild(Node,ADOQuery1.fieldbyname('NAME').AsString);
Mod_Id:=ADOQuery1.FieldByName('MODULE_ID').AsString;
Sql:='Select * From Base_Module Where PARENT_ID='''+Mod_Id+'''';
SendSqlQuery(TShare_MainCon,ADOQuery2,Sql);
While Not ADOQuery2.Eof Do
Begin
Node2:=Tree.Items.AddChild(Node,ADOQuery2.fieldbyname('NAME').AsString);
..........
ADOQuery2.Next;
End;
ADOQuery1.Next;
end;
每条记录都要有一个ID,一个父ID,通过父ID来查找这条记录是属于哪个的子记录,比如
id parentid name
1 0 a
2 1 b
3 1 c
4 2 d
5 2 e
6 3 f
那么在树中就这样表示
a
|__b
| |_d
| |_e
|
|__c
|_f
通过递归来查询记录...不然你怎么知道查到哪里时没有符合条件的记录了,
可惜用這個方法還是沒有解決.
數據庫設計沒錯..一個ID,一個NAME,一個PARENT_ID; 現在的問題就是出現在這:
他可能會出這樣的情況
a
|__b
| |_d
|__|_|_e
|__|_|_|_f
|__|_|_|_|_g
.
.
.
我不知道他有多少級..那麼我每查詢一次都會要有個判斷..如:
Sql:String;
Mod_Id:String;
Node,Node1,Node2,Note3:TTreeNode;
begin
Node:=Tree.Items.Add(Tree.TopItem,'模块管理');
Sql:='Select * from Base_Module where PARENT_ID="0000"';
SendSqlQuery(TShare_MainCon,ADOQuery1,Sql);
while Not ADOQuery1.eof Do
begin
Node1:=Tree.Items.AddChild(Node,ADOQuery1.fieldbyname('NAME').AsString);
Mod_Id:=ADOQuery1.FieldByName('MODULE_ID').AsString;
Sql:='Select * From Base_Module Where PARENT_ID='''+Mod_Id+'''';
if SendSqlQuery(TShare_MainCon,ADOQuery2,Sql) then
begin
While Not ADOQuery2.Eof Do
Begin
Node2:=Tree.Items.AddChild(Node,ADOQuery2.fieldbyname('NAME').AsString);
Mod_Id:=ADOQuery2.FieldByName('MODULE_ID').AsString;
Sql:='Select * From Base_Module Where PARENT_ID='''+Mod_Id+'''';
if SendSqlQuery(TShare_MainCon,ADOQuery3,Sql) then
begin
.........
如此下去..那我應該定義多少個TTREENODE..多少個TADOQuery控件吖.
procedure TCompanyOpenB.AddParentNode; //添加父节点
var aParentNode:TTreeNode;
aParentquery:TSQLquery;
begin
aParentquery:=TSQLquery.Create(nil);
aParentquery.SQLConnection:=DMdp_mid.SQLConnection1;
with aParentquery do
begin
SQL.Clear;
SQL.Text:='select * from dp_companytype where parentid=0';
Open;
while not Eof do
begin
aParentNode:=treeview1.Items.AddChild(node,aParentquery.fieldbyname('name').AsString);
AddChildNode(aParentNode,aParentquery);
Next;
end;
end;
aParentquery.Free;
end;
//添加子节点
procedure TCompanyOpenB.AddChildNode(ChildNode: TTreeNode; //添加二级子节点
Childquery: TSQLquery);
var aChildNode:TTreeNode;
aChildquery:TSQLquery;
begin
aChildquery:=TSQLquery.Create(nil);
aChildquery.SQLConnection:=DMdp_mid.SQLConnection1;
with aChildquery do
begin
close;
SQL.Clear;
SQL.Text:='select * from DP_CompanyType where ParentID='''+Childquery.fieldbyname('CompanyTypeID').AsString+'''';
open;
while not eof do
begin
aChildNode:=treeview1.Items.AddChild(ChildNode,aChildquery.fieldbyname('name').asstring);
AddChildNode(aChildNode,aChildquery);
next;
end;
end;
aChildquery.Free;
end;