zzybbs
20232
|
2005/12/21 18:04:58 |
在实际应用中两种方法各有优缺点,即使是使用ParentID,只要方法得当, 速度也超快,一点也不会比级别编码慢! |
fly_hong_924
20223
|
2005/12/21 16:42:27 |
各有所长,不能一棒子把人家打死!!! |
jmwl77
20220
|
2005/12/21 15:28:44 |
搞技术的人,要保持谦虚的心态,什么烂东西?什么拙劣?我看李维也不曾这样说别人,难道你是顶尖高手? |
wangguol
20218
|
2005/12/21 14:57:52 |
这个烂东西是我见过比较拙劣的。 |
iamdream
20210
|
2005/12/21 13:38:47 |
我想作者之所以说递归慢,原因应该是有些人用递归处理数据库中的树状数据时在每一次递归里都用Query做Close,Open之类的动作;要知道,Query之类的数据集组件Close,Open一下很花时间的!如果没有太多的Close,Open,则递归算法的速度不会慢! |
vvyang
20196
|
2005/12/21 10:16:16 |
To wjp888: 你说是多少?学过 Delphi 的都能写出来。 function GetNodeID(pNode: TTreeNode): string; const STEP = 2; var tn: TTreeNode; i: Integer; begin tn := pNode; while tn <> nil do begin i := 1; while tn.GetPrevSibling <> nil do begin Inc(i); tn := tn.GetPrevSibling; end; Result := Format('%.' + IntToStr(STEP) + 'd', [i]) + Result; tn := tn.Parent; end; end; 实际上这种编码方式有一套添加、删除的方法,有时间也贴上来。 |
wjp888
20190
|
2005/12/21 9:30:42 |
这样加了有什么用? 如果在选择了树的第三个节点,你说对应数据库的‘编号’是多少? |
hotyei
20188
|
2005/12/21 9:28:56 |
晕,这算法是我几年前在YourBase公开的。但这种算法和递归的算法其实是各有各的好处,速度其实也差不多(正如lyz803所说使用时才展开下级目录)。这种方法对于上下级关联性很强的目录树来说,是非常有用的(如会计科目),统计报表非常方便。而递归方式在编写可移动目录树时则很方便。 |
tkdy
20187
|
2005/12/21 9:22:33 |
我并不认为这种方法好,你的创建树在数据是固定的情况下是好的,但是如果目录树不是固定的,是可变的,你的就是那么的好用了 |
9903
20184
|
2005/12/21 9:00:06 |
同意luckypig,我也是用dxdbtree的,不喜欢编码太长的 |
lyz803
20183
|
2005/12/21 8:44:20 |
呵呵,这个算法是不错。我一直使用,不过如果一个树的节点多点,加载的速度很慢,建议首先加在根目录,然后根据用户选择某一个节点后,才加载该节点的子节点,如此速度将会没有太大的影响,并且那些用户不关心的字节点就不用加载。我一直如此使用。请参考。 |
luckypig
20180
|
2005/12/20 23:29:06 |
要求数据库记录的“编码”字段按一定的规则来进行编码。 现在一直用DevExpress的DBTree控件在实现数据树,觉得速度各方面都挺满意的。 |