一个自己写的有关数据库的treeview.
自己写的一个有关树形结构的函数,与大家共享.
procedure MakeTreeEx(Query: TadoQuery; TreeView: TTreeView;
DisplayName:string;Id:string;pid:string);
type
recNode=record
Id:string;
Name:string;
PId:string;
end;
PRecNode=^recnode;
{递归算法要有终止的条件}
procedure AppendChild(var treeview:TTreeView;node:TTreeNode;
var strlst:TStringList);
var
strTmp:string;
i:Integer;
nodeTmp:TTreeNode; {子结点}
ps:pstring;
begin
//ShowMessage(strlst.Text+'要查找的PID是:'+pstring(node.Data)^);
while strlst.IndexOf(trim(pstring(node.Data)^))<>-1 do
begin
i:=strlst.IndexOf(pstring(node.Data)^);
ps:=NewStr(precnode(strlst.Objects[i])^.Id);
nodetmp:=TreeView.Items.AddChildObject(node,precnode(strLst.Objects[i])^.Name,
ps);
Dispose(precnode(strlst.objects[i]));
strlst.Delete(i);
{原先此处误写成node,让我调试了半天,郁闷}
AppendChild(treeview,nodetmp,strlst);
end;
end;
var
List: TStringList;
Node: TTreeNode;
Index: Integer;
ps:pstring;//指针
prec:PRecNode;
i:Integer;
begin
TreeView.Items.BeginUpdate;
try
TreeView.Items.Clear;
List := TStringList.Create;
try
List.Sorted := True;
{此句非常重要,默认为dupIgnore,如有重复记录则忽略}
list.Duplicates:=dupAccept;
{先遍历一边query,获取所有记录}
Query.First;
while not Query.Eof do
begin
{保存数据}
New(prec); {每删除一条记录时,要保证将其保存的数据也一同删除}
prec^.Id:=Query.fieldbyname(Id).AsString;
prec^.PId:=Query.fieldbyname(pid).asstring;
prec^.Name:=Query.fieldbyname(DisplayName).asstring;
List.AddObject(Query.FieldByName(pid).AsString,TObject(prec));
Query.Next;
end;
showint(list.count);
while List.IndexOf('0')<>-1 do
begin
i:=List.IndexOf('0');
ps:=NewStr(Trim(precnode(List.Objects[i])^.Id));
node:=TreeView.Items.AddChildObject(nil,precnode(List.Objects[i])^.Name,
ps);
Dispose(precnode(List.Objects[i]));
List.Delete(i);
AppendChild(TreeView,node,list);
//AppendChild(list,node);
end;
finally
for i:=0 to List.Count-1 do
begin
Dispose(precnode(List.objects[i]));
end;
List.Free;
end;
finally
TreeView.Items.EndUpdate;
end;
end;
一个自己写的有关数据库的treeview.相关推荐
- shell备份mysql思路_写一个shell脚本备份mysql数据库的步骤
写一个shell脚本备份mysql数据库的步骤 发布时间:2020-05-25 15:47:41 来源:51CTO 阅读:221 作者:三月 下文我给大家简单讲讲关于写一个shell脚本备份mysql ...
- 一个好用的ODBC数据库类CMYODBC
一个好用的ODBC数据库类CMYODBC 一.引言 感觉MFC的CRecordset类不是很好用,因为我们要想使用的话必须为每个查询从CRecordset类派生出一个新类,或者进行动态数据交换.在VC ...
- PolarFS :一个用于共享存储云数据库的超低延迟和容错分布式文件系统
目录 1. 简介 2. 背景 3. 架构 4. I/O 执行模型 5. 一致性模型 6. FS中层的实现 7. 设计选择和经验教训 8. 价值评估 9. 相关工作 10. 结论 PolarFS : A ...
- 数据库创建(利用写好的数据库表生成创建表的sql语句+利用生成的数据库创建表加同步数据sql)
一.利用写好的数据库表生成创建表的sql语句 1.简单创建一个数据库,并建一个表,并编辑数据. a.建库 b.建表 c.编辑表,保存时输入表名 d.刷新一下,出来了 e.转存导出sql文件. 二.利用 ...
- TiFlash:并非另一个 T + 1 列存数据库
摘要:TiFlash 是配合 TiDB 体系的列存引擎,它和 TiDB 无缝结合,在线 DDL.无缝扩容.自动容错等等方便运维的特点也在 TiFlash 中得到继承,此外,TiFlash 可以实时与行 ...
- 数据库表TreeView树的快速生成
数据库表TreeView树的快速生成 根据数据表的内容生成TreeView树状结构,通常的做法就是从顶级开始,然后逐项递归查询遍历生成.这种方法在实现上容易做到,也很容易想到,但是效率比较低,因为数据 ...
- 破解一个已经连接好的数据库密码
如果想要破解一个已经连接好的数据库密码,可以参考这个方法. 一.查看navicat保存的密码 1. 进入注册表 win + R 输入 regedit 回车 2.找到 navicat 中存储的密码 HK ...
- 匪夷所思!意念「返生」熟鸡蛋论文引争议,新华社:一个敢写一个敢发
来源|雷锋网 文|付静 近日,一篇来自郑州市春霖职业培训学校的研究成果引发网友热议.该校一篇题为<熟鸡蛋变成生鸡蛋(鸡蛋返生)-孵化雏鸡的实验报告>的论文,收录在 2020 年 6 月第 ...
- redis进阶:mysql,redis双写一致性,数据库更新后再删除缓存就够了吗?
0. 引言 最近线上的一个状态修改功能出现了问题,一开始是运营找了过来,运营告知某条数据的状态已经开启了的,但是实际使用起来还是没有生效,于是拿到这个问题后,首先就去数据库查了这条数据,发现确实如他所 ...
最新文章
- 汇编语言---冒泡排序
- 算法-----最大子序和(Java 版本)
- ML_Random_Forests
- Introduction to the Service Provider Interfaces--官方文档
- Tip:强制执行exchange DAG节点之间的数据库副本移动
- [NodeJs] 如果发现node_modules中有个模块代码有bug,你该怎么办?
- visual c++ 技术资料(网络收集)
- Spring MVC重定向和转发
- 字符数组的初始化与赋值
- python爬虫菜鸟教程-Python 应该怎么学?
- python 正则表达式语法大全_Python正则表达式知识汇总
- CIO如何计算信息化的投资回报率?
- Horner规则求多项式
- java 判断域密码到期提醒_域帐号密码过期邮件提醒
- mac中idea使用createNewFile创建文件
- ESC云服务器搭建自己的图床
- 手动设置网页cookie的值
- 浅析多元回归中的“三差”:离差(Deviation)、残差(Residual)与误差(Error)
- 计算机启动如何改变默认硬盘,如何把硬盘设置为第一启动项怎么修改的
- ATX安装及简单使用