zoukankan      html  css  js  c++  java
  • 数据集+树的一种最简单高效的算法

    此法可用于设计功能模块树,用户权限树,类别树以及一切需要TREE来表示之层级关系的。。。

    此法只需要遍历一次数据集即生成了整棵树。

    读取数据生成树的算法:

    procedure CreateTree(DataSet: TADOQuery; Tree: TTreeView;
      const table, aid, aname: string; idname: Boolean);
    const
      ID_DEPT = 2;
    var
      nLevel: Integer;
      pNodes: array[0..1023] of TTreeNode;
      lpID, lpName, s: string;
    begin
      if DataSet = nil then Exit;
      if Tree = nil then Exit;
      if table = '' then Exit;
      pNodes[0] := nil;
      Tree.Items.Clear;
      with DataSet do
      begin
        Close;
        SQL.Clear;
        s := Format('select %s, %s from %s order by %s', [aid, aname, table, aid]);
        SQL.Text := s;
        Open;
        if IsEmpty then Exit;
        First;
        while not Eof do
        begin
          lpID := FieldByName(aid).AsString;
          lpName := FieldByName(aname).AsString;
          nLevel := Length(lpID) div ID_DEPT;
          if not idname then
            pNodes[nLevel] := Tree.Items.AddChild(pNodes[nLevel - 1], lpName)
          else
            pNodes[nLevel] := Tree.Items.AddChild(pNodes[nLevel - 1],
              lpID + '-' + lpName);
          Next;
        end;
      end;
    end;

    数据表设计样式,ID字段升序:

    生成树
  • 相关阅读:
    CEAA自动汇编脚本常用命令
    PIC之拉电流和灌电流
    CHARRANGE 结构
    汇编中的lodsb和stosb、lodsd和stosd指令
    汇编中的STOSB与STOSD指令
    汇编中的CLD指令
    SQL中distinct的用法
    SQL union介绍
    【项目排期】测试排期问题思考
    SQL join的介绍
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/2940688.html
Copyright © 2011-2022 走看看