根据数据库结构生成RzCheckTree

Posted Li Essay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据数据库结构生成RzCheckTree相关的知识,希望对你有一定的参考价值。

现在大多数的方法是采用递归,但这种操作会频繁的去select数据库,降低了执行效率,稍微改动一些,效果会好不少,这里介绍一种方法,即一次性select出所有数据,然后按照ParentID排序,逐条添加到TreeView,添加前,先遍历TreeView,查找他的上一级节点,遍历Treeview可比select数据快啊,下面看代码:
 
数据表结构,最顶级parentid值我用的是-1,大家也可以用其他值,但要保证最顶级parentid值最小,层次越深,

  

procedure TUIOperate.FillTree(RzCheckTree: TRzCheckTree);
var
  findq: TADOQuery;
  node: TTreeNode;

  //这个方法是根据记录的id字段值,查找RzCheckTree上的父节点
  function FindParentNode(id:Integer):TTreeNode;
  var
    i:Integer;
  begin
    Result := nil;
    for i := 0 to RzCheckTree.Items.Count - 1 do
    begin
      //比较Node的Data值和记录的id值
      if Integer(RzCheckTree.Items[i].Data) = id then
      begin
        Result := RzCheckTree.Items[i];
        Break;
      end;
    end;
  end;

begin
  findq := TADOQuery.Create(nil);
  findq.Connection := controler.DataConnect.Connection; //这里的Connection指向你的数据连接
  try
    RzCheckTree.Items.BeginUpdate;
    RzCheckTree.Items.Clear;
    //选出所有记录,并按parentid排序,这样可以保证先添加顶级节点,在下级记录添加时,总能找到父节点
    findq.SQL.Text := \'SELECT * FROM [Catalog] order by parentid,id\';
    findq.Open;
    while not findq.Eof do
    begin
      //如果是最顶级,直接添加到RzCheckTree
      if findq.FieldByName(\'parentid\').AsInteger = -1 then
        //将id值,保存在Node的Data中,以便查找用
        RzCheckTree.Items.AddObject(nil,findq.FieldByName(\'CatalogName\').AsString,Pointer(findq.FieldByName(\'id\').AsInteger))
      else
      begin
        //查找上级节点
        node := FindParentNode(findq.FieldByName(\'parentid\').AsInteger);
        if node <> nil then
          RzCheckTree.Items.AddChildObject(node,findq.FieldByName(\'CatalogName\').AsString,Pointer(findq.FieldByName(\'id\').AsInteger));
      end;
      findq.Next;
    end;
  finally
    findq.Free;
    RzCheckTree.Items.EndUpdate;
  end;
end;

 

以上是关于根据数据库结构生成RzCheckTree的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat根据JSP生成Servlet机制解析

java中如何根据查询出来的表结构自动生成bean

数据结构一道题 根据最小生成树的Mst性质,可以得出 A最长边不包含于任一棵最小生成树 B最短边闭

根据业务规则分析业务对象,然后生成表结构

从零开始配置vim(27)——代码片段

DbTool 2.0.0 Released