侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

DBTree 1.3.2

数据库  /  管理员 发布于 5年前   213

1.3.2的修改

  1. 对 InsertNode进行了修改,不会再发生传送的节点id有错误而默认插入到根下的行为。 (出于安全考虑而去掉)
  2. 完善了SubTree函数
  3. 添加了path函数可以得到路径
  4. 添加了alterNode可以修改节点名称以及在兄弟节点中的位置。

许可:GUN LGPL


测试地址:http://lxbzj.com/product/dbtree/index.asp

DBTree使用说明

目录

  1. 简介
  2. 特点
  3. 如何使用

 

简介

DBTree是database tree的缩写。意思是数据库中的树形结构。

DBTree是一个勇于数据库服务器环境中的,在数据库中记录树形数据结构的快速解决方案,即人们通常说的无限级目录问题,本文档统称为树,而且是树结构在数据库中的实现。

DBTree包含了各种不同的版本:asp+access、等等。

特点

通常情况下,树在数据库中实现的时候采用的是树的双亲表示法,设一个编号字段id,和一个父亲编号字段parent_id,来实现树形结构。这种数据结构的特点是:操作简单,几乎不用维护,然而优点带来的问题是对树进行遍历的时候系统开销极大,需要进行递归操作,因此不能够无限制的增加树的深度。普遍采用了异步读取的方式来减少系统开销。一些改进的方法也避免不了这一问题。

在绝大多数情况下,服务器上要求对树的遍历任务占据了对树的操作的任务的大部分,可见如果针对数遍历来做优化能极大地提高效率减轻服务器负担。

或者还是采用双亲表示法,采用异步读取才减轻系统开销,但是这样依然不能解决例如树的深度、路径、删除等的问题

在本程序中采用了更适应遍历的数的表示结构。能极大地降低系统开销,也能很优秀的解决一些树的高级操作,更适应于数据库。

如何使用

使用本程序,需要预先准备一个数据库,且设置好数据库联接。

1.数据库的定义:

数据库中表(Tree)的定义(access)
字段名字段类型必填默认值其他索引说明
id数字  自动编号有(无重复)节点的唯一编号
p_id长整型是0  节点父亲编号值
name文本新建文件夹不允许为空字符串 节点名称
porder长整型  有(有重复)节点的先序排序号
dep长整型1  节点深度值
del布尔Flase  是否删除
附注:字段名仅仅为默认的字段名,如果您不指定其他的字段名的话,程序就假定您的字段和表名名为默认的。

2.在需要使用的页面使用服务器包含命令:<!--#include file="dbtree.asp" -->

3.初始化一个对象实例,然后初始化数据库联接字符串和其他变量

<%@ LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<% option explicit 'TRANSACTION = Required%>
<!--#include file="dbtree.asp" -->
<%
Dim MM_btree_STRING '数据库联接字符串
MM_btree_STRING = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= "&server.mappath("tree.mdb")
%>
<%
dim tree
set tree=new DBtree
tree.conn=MM_btree_STRING '指定联接字符串
tree.table="tree"'制定表名
tree.id="id"'制定列名
tree.p_id="p_id"
tree.porder="porder"
%>

4接下来就可以对树进行各种操作了:

实例:

1.将树显示为列表:

<%
Dim arr1(1,0),arr2(1,0),cache
arr1(0,0) = "<ul>"
arr1(1,0) = "</ul>"
arr2(0,0) = "<li>{name}"
arr2(1,0) = "</li>"
cache = tree.display(0,-1,arr1,arr2,"relative")
response.write(cache)
%>

2.插入,删除等

select case request.Form("submit")
case "移动"
msg =tree.moveNode(request.Form.Item("src"),request.Form.Item("des"))
case "删除"
msg =tree.delNode(request.Form("node"),false)
case "永久删除"
msg =tree.delNode(request.Form("node"),true)
case "恢复"
msg =tree.undel(request.Form("undel"))
end select

3.其他的操作请参见实例

4.API

整个程序是一个类,提供插入、移动、删除、显示、输出为列表控件等接口,以后功能还会不断完善。


API
函数名 功能
insertNode(int node_pid, str node_name)
插入一个节点作为给出节点的孩子节点。

参数:

  • node_pid 树中节点的id,0表示插入到根下
  • str节点的名称默认为新建文件夹;
MoveNode(src_id,des_id)移动节点和他的子树,参数:src_id源节点id;des_id:目标节点id(注意暂时不能将一个节点移动到根下(0)) 
DelNode(id,confirm) 删除节点和子树,参数:id节点id;confirm:是否直接删除true/false。
undel(id) 恢复没有直接删除的节点
string OutPutOption(root_id,selected_id,show_root,rel_deep) 

将树输出为类表控件的选项,即<option>标签

参数:

  • root_id 树根(Root)编号,默认值为0
  • selected_id 列表选项的默认中选项
  • show_root 是否允许显示根(Root)这一行记录
  • rel_deep 显示的相对深度 -1 显示所有 0 :只显示根 1 显示1层
Display(root_id,rel_deep,menu_tag,item_tag,options)  功能:读出并且按模板标签生成显示内容,替换标签有:{id},{name},{porder},{auto},{pid}
  • 参数:root_id 根的id ,0表示全部显示
  • rel_deep 要显示的相对深度。1层2层等等
  • menu_tag 菜单标签 数组
  • item_tag 项目标签 数组
  • menu_tag 与item_tag 必须为形如arr(1,n)的数组,即必须都是二维数组、第一维必须是1第二维存储各级标签
  • arr(0,n)存储开始标签,arr(1,n)存储结束标签,结束标签不能含有需要替换的内容
  • menu_tag(x,0),item_tag(x,0)用来存储默认的模板标签参见使用实例
  • option:参数 ,可用值:relative
SubTree(node_id,order,rel_deep,with_root,with_del)  取得子目录记录集
  • node_id 节点id
  • 排序: "asc" "desc"
  • rel_deep 相对要显示的深度 1仅显示1层 -1显示所有深度 0 仅显示根 如此类推
  • with_root(true/false) 记录集是否包含根
  • with_del(true/false) 记录集是否包含标记为删除的记录
AlterNode(node_id,new_name,step)

修改节点信息

  • node_id节点id
  • new_name新的名称
  • step 要移动的位置
程序还在改进中,有些接口还待调整

 

©linzsoft.com2006-05-26


  • 上一条:
    用ODBC的分页显示
    下一条:
    将ACCESS转化成SQL2000要注意的问题
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客