捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:快速创建树的方法 (抛弃拙劣的数据库结构和算法)
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控件在实现数据树,觉得速度各方面都挺满意的。
第一页 上一页 下一页 最后页 有 52 条纪录 共3页 41 - 52
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表