设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 1681|回复: 3
打印 上一主题 下一主题

[宏/菜单/工具栏] 关于树结构层次关系的体现 对SQL感兴趣的进来哦

[复制链接]
跳转到指定楼层
1#
发表于 2003-11-6 20:56:00 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
树 是按照 id,name,idparent 的结构生成的
举例
id        name        idparent               层次结构
10        蓝军                      蓝军
11        A师          10               --A师
12        B师          10                  --18团
13        C师          10                  --19团
21        18团          11                     --1营
22        19团          11                     --2营
23        20团          11                     --3营
24        21团          13                  --20团
41        1营           22               --B师
42        2营           22               --C师
43        3营           22                  --21团

问题一:
如何通过sql语句查询出所有叶节点,即没有 子节点的节点
解决方法:建立自链接,然后判断id is null就可以啦
SELECT tbl单位统计.id, tbl单位统计.name, tbl单位统计_1.id
FROM tbl单位统计 LEFT JOIN tbl单位统计 AS tbl单位统计_1 ON tbl单位统计.id = tbl单位统计_1.idparent
WHERE (((tbl单位统计_1.id) Is Null))

问题二:
如何通过SQL语句查询出三级节点,即军,师,团三级所有节点
解决方法:兔兔这个效率太低,不敢放上来,寻求高手出场

问题三:
如果该表还有一个类别字段,即标识军,师,团,营
那么如何生成单位的类别统计交叉表,比如
         军  师  团  营
蓝军  1  3  4  3
A师  0  1  0  0
........
嘻嘻,这个比较难哦[em12]
解决方法:
这儿是ADAM解决的,思路很妙
http://www.office-cn.net/bbs/dispbbs.asp?boardID=2&ID=12661
范例也可以从上面下载

问题四
对于该单位结构表,如果有1万多条记录,如何有效提高treeview控件装载的速度
兔兔采用的是小漆大侠装载节点方法,但是速度很慢
后来在高手建议下,采用分层装载的方法,即初始装载两层,然后双击哪一层,哪一层装载展开下属节点,并且使用进度条显示装载进度
不知道还有没有其他有效的方法[em05]








[此贴子已经被作者于2003-11-7 9:37:25编辑过]

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
4#
 楼主| 发表于 2003-11-7 06:13:00 | 只看该作者
呵呵,继续领悟ADAM的Join神功
晚上实现啦
使用自链接,解释:将单位表添加两次,然后建立左联结关系,然后加上第二张表的idparent为空的条件就可以啦,嘻嘻,原来SQL语句用好了有这么多方便~!!!

【SELECT tbl单位统计.id, tbl单位统计.name
FROM tbl单位统计 LEFT JOIN tbl单位统计 AS tbl单位统计_1 ON tbl单位统计.id = tbl单位统计_1.idparent
WHERE (((tbl单位统计_1.idparent) Is Null))】


另:报告斑竹:今天晚上发现兔兔有灌水的嫌疑


[此贴子已经被作者于2003-11-6 22:14:22编辑过]

3#
 楼主| 发表于 2003-11-6 22:34:00 | 只看该作者
谢谢阿罗哦

我的树节点就是太多啦,大概一共有1万左右
因为打开这个树太慢啦
所以采用分层装载的办法,form_load只装载第一层节点,然后双击该节点出现所有下级节点

之所以想找出所有叶节点,是因为分支节点的数值都是通过叶节点的汇总产生的
这样把所有叶节点提取出来让用户直接输入
然后直接通过树来查看汇总统计的值,不知道这个思路有没有问题?

树结构的应用参看这个
http://www.office-cn.net/bbs/dispbbs.asp?boardID=2&ID=12661
2#
发表于 2003-11-6 21:48:00 | 只看该作者
至于如何用sql语句,这同具体实施有关系,不能泛泛而谈,通常为了简化必须将表进行针对性的设计。但是在程序中用 node.children=0 倒是可以来判定该节点是否有子节点,这样可能就不需要使用sql语句了:

Dim Node As Node, C As New Collection
For each Node In treeview1
       If Node.Children = 0 Then
             C.Add Node, Cstr(Node.Key)
       End IF
Next Node

这样就获得了一个所有叶的node集合。数据不多的时候用用还可以。成千上万的就很慢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-12-2 04:55 , Processed in 0.109902 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表