当前位置: 首页 > 图文教程 > 网络编程 > ASP > DBTree 1.3.2

ASP
asp调用存储过程
利用批处理文件和 vbs 脚本实现网站视频自动录制
ASP、vbscript编码模板
FileSystem对象常用的文件操作函数有哪些?
asp显示日历效果
sql语句的一些集合
ASP语法注释
函数名称 函数功能
万能数据库连接程序
记录集内随机取记录的代码
分页代码
如何在数据库中用好Transaction?
用Command对象和RecordSet对象向数据库增加记录哪一个更好
为什么在存储过程中用OLEDB方式不能返回记录集
如何查询日期类型的数据?
ASP如何获取真实IP地址
两种小偷程序的比较
使用xmlHttp结合ASP实现网页的异步调用
用ASP开"多线程"
整理了一个editplus的剪辑文件(ASP方面的内容)

ASP 中的 DBTree 1.3.2


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 54 ::
收藏到网摘: n/a

1.3.2的修改

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

许可:GUN LGPL


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

DBTreeDBTree使用说明

目录

  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