procedure TUIOperate.FillTree(treeview: TTreeView);
var
  findq: TADOQuery;
  node: TTreeNode;
 
  //这个方法是根据记录的id字段值,查找TreeView上的父节点
  function FindParentNode(id:Integer):TTreeNode;
  var
    i:Integer;
  begin
    Result := nil;
    for i := 0 to treeview.Items.Count - 1 do
    begin
      //比较Node的Data值和记录的id值
      if Integer(treeview.Items[i].Data) = id then
      begin
        Result := treeview.Items[i];
        Break;
      end;
    end;
  end;
 
begin
  findq := TADOQuery.Create(nil);
  findq.Connection := controler.DataConnect.Connection; //这里的Connection指向你的数据连接
  try
    treeview.Items.BeginUpdate;
    treeview.Items.Clear;
    //选出所有记录,并按parentid排序,这样可以保证先添加顶级节点,在下级记录添加时,总能找到父节点
    findq.SQL.Text := 'SELECT * FROM [Catalog] order by parentid,id';
    findq.Open;
    while not findq.Eof do
    begin
      //如果是最顶级,直接添加到Treeview
      if findq.FieldByName('parentid').AsInteger = -1 then
        //将id值,保存在Node的Data中,以便查找用
        treeview.Items.AddObject(nil,findq.FieldByName('CatalogName').AsString,Pointer(findq.FieldByName('id').AsInteger))
      else
      begin
        //查找上级节点
        node := FindParentNode(findq.FieldByName('parentid').AsInteger);
        if node <> nil then
          treeview.Items.AddChildObject(node,findq.FieldByName('CatalogName').AsString,Pointer(findq.FieldByName('id').AsInteger));
      end;
      findq.Next;
    end;
  finally
    findq.Free;
    treeview.Items.EndUpdate;
  end;
end;

delphi 根据数据库结构生成TreeView的更多相关文章

  1. 根据数据库结构生成TreeView

    procedure TUIOperate.FillTree(treeview: TTreeView); var findq: TADOQuery; node: TTreeNode; //这个方法是根据 ...

  2. 根据数据库结构生成RzCheckTree

    现在大多数的方法是采用递归,但这种操作会频繁的去select数据库,降低了执行效率,稍微改动一些,效果会好不少,这里介绍一种方法,即一次性select出所有数据,然后按照ParentID排序,逐条添加 ...

  3. PowerDesigner反向工程,根据Oracle数据库结构生成ER图(2014-3-25记)

    01.添加数据服务端 02. PowerDesigner 1. 新建PDM:选择菜单File->New Model,[Model type]选择Physical Data Model,[DBMS ...

  4. sqlalchemy根据数据库结构生成映射的实体

    # !/usr/bin/python # -*- coding: UTF-8 -*- from sqlalchemy import * from sqlalchemy.orm import sessi ...

  5. c# winform结合数据库动态生成treeview的父节点和子节点方法和思路

    tb_food表的结构如图一: tb_foodtype表的结构如图二: //获取tb_foodtype表中的所有数据 private void InitDataTable() { SqlConnect ...

  6. delphi 中如何从数据库中读取数据自生成TreeView,只有两个字段,数据库结构如下。急急!!

    我的数据库结构如下:UnitId      UnitName01          中国 (根节点)0101        河北省(二级树)010101      河北省沧州市(三级树)0101010 ...

  7. 利用powerdesigner反向数据库结构,生成ER图

    参考月下狼~图腾~:<利用powerdesigner反向数据库结构,生成ER图> https://www.zybuluo.com/Jpz/note/123582 首先新建一个"P ...

  8. 如何将excel 数据库表结构生成powerdesign物理模型

    Option Explicit Dim mdl ' the current model Set mdl = ActiveModel If (mdl Is Nothing) Then MsgBox &q ...

  9. DjangoORM创建表结构以及生成数据库结构

    1. ORM的两种 DB first: 创建表结构--根据表结构生成类-----根据类来操作数据库 Code first: 先写代码------再写类----执行命令(一个类生成一个表)当前主流的用法 ...

随机推荐

  1. tcpdump和windump

    Tcpdump简介 tcpdump命令是一款sniffer工具,它可以打印所有经过网络接口的数据包的头信息, tcpdump,就是:dump the traffic on a network,根据使用 ...

  2. Ubuntu系统---系统驱动丢失、Kernel内核卸载、禁止更新

    Ubuntu系统---系统驱动丢失.Kernel内核卸载.禁止更新 一早开机发现,ubuntu字体异常,字体很大,直接反应是驱动坏了.一查,确实丢失英伟达驱动,为什么呢?莫名的消失.想知道:1.英伟达 ...

  3. Pycharm----设置背景颜色和字体的样式

    编辑器默认显示的样式背景为白色,看着会刺眼,也不方便查找我们写的某些参数等,通过设定,可以对页面的样式进行选择更改,方便直观的在编辑器中查看自己所写的代码, 设置前: 设置后 操作方式:

  4. Java并发包--ArrayBlockingQueue

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3498652.html ArrayBlockingQueue介绍 ArrayBlockingQueue是数 ...

  5. PHP---反射--继续剖析

    首先定义一个类 <?phpInterface trainning{ public function exec();}class mma implements trainning{ public ...

  6. 0、Spring 注解驱动开发

    0.Spring注解驱动开发 0.1 简介 <Spring注解驱动开发>是一套帮助我们深入了解Spring原理机制的教程: 现今SpringBoot.SpringCloud技术非常火热,作 ...

  7. animation-timing-function

    animation-timing-function 语法: animation-timing-function:<single-animation-timing-function>[,&l ...

  8. keydown([[data],fn]) 当键盘或按钮被按下时,发生 keydown 事件。

    keydown([[data],fn]) 概述 当键盘或按钮被按下时,发生 keydown 事件. 注释:如果在文档元素上进行设置,则无论元素是否获得焦点,该事件都会发生.直线电机滑台 参数 fnFu ...

  9. PHP mysqli_close() 函数

    关闭先前打开的数据库连接: <?php $con=mysqli_connect("localhost","my_user","my_passwo ...

  10. 数据库学习之三--Select查询及运算符

    一.SELECT语句:用于从表中选取数据:语法如下: 1. 列查询: SELECT 列名称1,  列名称2 FROM 表名称: 2. 查询所有数据: SELECT * FROM 表名称: 3. 使用A ...