这样的数据如何生成一个目录树?

fleamboy 2004-07-26 11:14:11
有这样的数据:
11000000 A
11010000 AA
11010001 AAA
11010002 AAB
11010003 AAC
11020000 AB
11020001 ABA
12000000 B
12010000 BA
12010001 BAA
........ ...

如何生成这样的目录树
A+
|+AA+
| |+AAA
| |+AAB
| |+AAC
|+AB+
| |+ABA
| |+ABB
B+
|+BA+
|+BAA

如何判断数据自动生成树形?
...全文
149 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fesel 2004-07-27
赫赫,我也不会。慢慢学。
回复
iknowwn 2004-07-27
看你左边的编码还是很有规律的,生成树就根据编码来好了。
但我想还是分字段比较好,象上面的SN(NN-NN-NNNN)可以分成SN1(NN),SN2(NN),SN3(NNNN),这样的话设条件就很容易了,而且层次也很清楚,生成树就不成问题了。
在生成每一层节点的每一个节点时,也要生成下一层节点,循环就OK了
回复
fleamboy 2004-07-27
我这个编码就是固定的长度,就和邮政编码差不多,主要标识地名,如何生成目录树啊?
看了这么多,还是不明白啊?
bm dm
-------------------------
620100000000 甘肃省
620101000000 兰州市
620101001000 城关区
620101001001 雁滩乡
620101001002 东岗镇
620101002000 七里河区

620102000000 嘉峪关市

大家给帮个忙啊!!!多谢了!
回复
ls212 2004-07-27
with TreeView1.Items do
begin
i:=0;
TreeView1.Items.Clear;
Add(nil, ziduan);

MyTreeNode1 := TreeView1.Items[i];
while not adoquery1.Eof do
begin
AddChild(MyTreeNode1,adoquery1.fieldbyname('ziduanming').AsString);
i:=i+1;
MyTreeNode1 := TreeView1.Items[i];
adoquery1.next;
end;
你可以稍微改一下
回复
pangxie 2004-07-27
你必须确定每一级的长度,这样才可以生成树型结构
回复
fleamboy 2004-07-27
select like 'xx000000'//这是一级节点
select like 'xxxx0000'//这是二级节点
select like 'xxxxxxxx'//这是3 级节点
用3个sql查出,然后加节点就好了

使用这个方法,我如何知道那个3级节点属于那个2级节点的下级啊?
请各位给个代码示列号码?
回复
ln521 2004-07-27
能写啊
还 是要你自己 写了
上面的大虾给你思路了
自己在实现不就行了
回复
fleamboy 2004-07-27
我得这个数据不一定是3级,并且有好多这样的数据表.
能不能写一个通用的函数,完成这个功能?
回复
iknowwn 2004-07-27
给个列子:我的层次是单位——部门——人员
strsql := 'select DISTINCT CompanyCode,Company from Code_Company '
+' where CompanySort+CompanySequence='''+fcomID+''' and deptcode=''0'' order by Company '//第一层

ADoDS := Persist.OpenDataset(strsql) ;
with ADoDS do
begin
last ;
first ;
while not eof do
begin
newnode := tvdept.Items.addchild(cnode,fieldbyname('Company').AsString);
adddatatorec(FieldByname('CompanyCode').asstring,FieldByname('Company').AsString,newnode) ;

AddDeptItem(NewNode) ; //第二层
next ;
end ;
end ;
end ;

procedure tSelPersonForm.adddeptitem(cNode:TTreeNode) ;
var
strsql: string ;
newnode:ttreenode ;
AdoDS:Tadodataset ;
begin
strsql := 'select DISTINCT CompanyCode,Company from code_company where '
+' companycode in (select distinct dep_id from personnel_set '
+' where com_id='''+pMyRec(cNode.Data)^.no+''')'
+' order by CompanyCode' ;
ADoDS := Persist.OpenDataset(strsql) ;
with ADoDS do
begin
last ;
first ;
while not eof do
begin
newnode := tvdept.Items.addchild(cnode,fieldbyname('Company').AsString);
adddatatorec(FieldByname('CompanyCode').asstring,FieldByname('Company').AsString,newnode) ;

AddManItem(NewNode) ; //第三层
next ;
end ;
end ;
end ;

procedure TSelPersonForm.AddManItem(cNode:TTreeNode);
var
strsql: string ;
AdoDS : TAdoDataSet ;
newnode : TTreeNode ;
begin
strsql := 'select Per_id,Per_Name from personnel_set where dep_ID='''+pMyRec(cnode.data)^.no+''' '
+' order by Per_no' ;
AdoDs := Persist.OpenDataSet(strsql) ;
with AdoDs do
begin
last ;
first ;
while not eof do
begin
newnode := tvdept.Items.addchild(cnode,fieldbyname('per_name').AsString);
adddatatorec(FieldByname('per_id').asstring,FieldByname('per_name').AsString,newnode) ;

next ;
end ;
end ;
end ;
回复
fleamboy 2004-07-27
to: iknowwn(changle[滨滨]_二级厨师)
不知道具体改如何做啊,我还是不明白,能不能给个相对具体的列子啊!
多谢了!
回复
JavaD 2004-07-26
select like 'xx000000'//这是一级节点
select like 'xxxx0000'//这是二级节点
select like 'xxxxxxxx'//这是3 级节点
用3个sql查出,然后加节点就好了
回复
fleamboy 2004-07-26
在delphi的TreeView空间中.
回复
发帖
数据库相关
创建于2007-08-02

2451

社区成员

Delphi 数据库相关
申请成为版主
帖子事件
创建了帖子
2004-07-26 11:14
社区公告
暂无公告