博文
用SQL实现树的查询(2005-11-15 01:17:00)
摘要:树形结构是一类重要的非线性结构,在关系型数据库中如何对具有树形结构的表进行查询,从而得到所需的数据是一个常见的问题。本文笔者以 SQL Server 2000 为例,就一些常用的查询给出了相应的算法与代码,颇值得读者借鉴。
树型结构
关系型数据库将数据按表结构形式进行组织。它对表格的处理方便灵活,且易学易用,因而得到广泛的应用。关系型数据库所处理的表格是线性结构的,表的每一行对应着一个数据元素,称做一条记录。记录与记录之间呈线性排列,彼此间没有联系, 然而,在解决实际问题时,常常会遇到非线性结构的数据。如下表所示,每一条纪录中的上级代码,就和其他纪录有着联系,这样就形成了一棵具有层次结构的树,它可以用下面的图来形象地表示:
树形结构是一种结点之间有分支,并具有层次关系的结构,它非常类似于自然界中的树。 树结构在客观世界中大量存在,例如家谱、行政组织机构都可用树形象地表示。树在计算机领域中也有着广泛的应用,例如在编译程序中,用树来表示源程序的语法结构;在数据库系统中,用树来组织信息;在分析算法的行为时,用树来描述其执行过程。
在关系型数据库中如何对具有树形结构的表进行查询,从而得到所需的数据是一种常见的需求。下面以SQL Server 2000 为例,就三种常用的查询给出相应的算法与代码:
1.节点 A 的位于第 n 层的父结点信息,如:员工黄菁菁的上两级上司的名称。
2.某棵子树的统计信息,如:员工余顺景及其所有下属员工的工资总额。
3.某棵子树的结点信息,如:员工郑可可及其所有下属员工的名称。
某节点的父节点信息
要实现这样的查询,常使用递归的方法。我们可以用SQL Server 2000 增加的用户定义函数 (UDF, User Defined Function)这个新特性来实现递归函数调用。下面是函数的定义:
CREATE FUNCTION dbo.GetManager
( @employee_id AS char(5),
@level AS int = 1 -- 缺省值为1
)
RETURNS char(5)
其中,employee_id表示要查询的员工号码,level表示高于该员工的级别数,返回的结果是上司的员工号码。
该函数的递归定义为: 如果 level = 0,则......
VB入门教程(2005-11-15 01:16:00)
摘要:第一章:事件、属性及数据类型 以后两章可能会比较枯燥,但不可否认也很重要,所以为了学好VB,我们一定要打好基础才行。
一、事件
通过上一章的例子,你可能对“面向对象的编程”已经有了一定了解,它是由事件驱动的,对于不同的对象,所能感应到的事件也会不同,譬如说当你把鼠标移进某一区域时就会触发MouseMove事件,这很直观,也容易理解,但也有些事件比较抽象,下面我来对一般的事件进行一下解释。
窗体和图象框类事件 Paint事件:当某一对象在屏幕中被移动,改变尺寸或清除后,程序会自动调用Paint事件。注意:当对象的AutoDraw属性为True(-1)时,程序不会调用Paint事件。 Resize事件:当对象的大小改变时触发Resize事件。 Load事件:仅适用于窗体对象,当窗体被装载时运行。 Unload事件:仅适用于窗体对象,当窗体被卸载时运行。
当前光标(Focus)事件
GotFocus事件:当光标聚焦于该对象时发生事件。 LostFocus事件:当光标离开该对象时发生事件。 注意:Focus英文为“焦点”、“聚焦”之意,最直观的例子是,比如有两个窗体,互相有一部分遮盖,当你点下面的窗体时,它就会全部显示出来,这时它处在被激活的状态,并且标题条变成蓝色,这就是GotFocus事件,而相反,另外一个窗体被遮盖,并且标题条变灰,称为LostFocus事件。上面所说的“光标”并非指鼠标指针。
鼠标操作事件
Click事件:鼠标单击对象。 DbClick事件:鼠标双击事件。 MouseDown、MouseUp属性:按下/放开鼠标键事件。 MouseMove事件:鼠标移动事件。 DragDrop事件:拖放事件,相当于MouseDown、MouseMove和MouseUp的组合。 DragOver事件:鼠标在拖放过程中就会产生DragOver事件。 键盘操作属性
KeyDown、KeyUp事件:按键的按下/放开事件。 KeyPress事件:按键事件。 改变控制项事件
Change事件:当对象的内容发生改变时,触发Change事件。最典型的例子是文本框(TextBox)。 DropDown事件:下弹事件,仅用于组合框(ComboBox)对象。 PathChange事件:路径改变事件,仅用于文件列表框(FileBox)对象。 其他......
如何编写高质量的VB代码(2005-11-15 01:01:00)
摘要:简介: 本文描述了如何通过一些技术手段来提高VB代码的执行效率。这些手段可以分为两个大的部分:编码技术和编译优化技术。在编码技术中介绍了如何通过使用高效的数据类型、减少外部引用等编程手段来提高代码执行速度,减少代码消耗的系统资源。在编译优化技术中介绍了如何正确地利用VB提供的编译选项对在编译时最后生成的可执行文件进行优化。 前言 什么是一个高效的软件?一个高效的软件不仅应该比实现同样功能的软件运行得更快,还应该消耗更少的系统资源。这篇文章汇集了作者在使用VB进行软件开发时积累下来的一些经验,通过一些简单的例子来向你展示如何写出高效的VB代码。其中包含了一些可能对VB程序员非常有帮助的技术。在开始之前,先让我陈清几个概念。 让代码一次成型:在我接触到的程序员中,有很多人喜欢先根据功能需求把代码写出来,然后在此基础上优化代码。最后发现为了达到优化的目的,他们不得不把代码再重新写一遍。所以我建议你在编写代码之前就需要考虑优化问题。 把握好优化的结果和需要花费的工作之间的关系:通常当完成了一段代码,你需要检查和修改它。在检查代码的过程中,也许你会发现某些循环中的代码效率还可以得到进一步的改进。在这种情况下,很多追求完美的程序员也许会立马修改代码。我的建议是,如果修改这段代码会使程序的运行时间缩短一秒,你可以修改它。如果只能带来10毫秒的性能改进,则不做任何改动。这是因为重写一段代码必定会引入新的错误,而调试新的代码必定会花掉你一定的时间。程序员应该在软件性能和开发软件需要的工作量之间找一个平衡点,而且10毫秒对于用户来说也是一个不能体会到的差异。 在需要使用面向对象方法的时候尽量使用它;VB提供的机制不完全支持面向对象的设计和编码,但是VB提供了简单的类。大多数人认为使用对象将导致代码的效率降低。对于这一点我个人有些不同的意见;考察代码的效率不能纯粹从运行速度的角度出发,软件占用的资源也是需要考虑的因素之一。使用类可以帮助你在整体上提升软件的性能,这一点我会在后面的例子中详细说明。 当你编写VB代码的时候,希望你能把上面几点作为指导你编码的原则。我把文章分为两个部分:如何提高代码的运行速度和编译优化。 如何提高代码的运行速度 下面的这些方法可以帮助你提高代码的运行速度: 1. 使用整数(Integer)和长整数(Long) 提高代......
VB中的模块,类,ActiveX与API的使用(2005-11-15 00:43:00)
摘要:这几天搞了点c/s结构的程序设计, 由于ASP用得比较熟练,所以VB6.0自然成为我首选的开发工具. 在学习过程中,我结合自己的经验总结下VB中的一些高级应用,并且体会这种应用给我们所带来的好处.
一、模块 (Module)
在VB中,模块会优先执行,其实说白了,模块就象是全局的过程和函数调用.这是初步的提高代码可复用性的途径。我想有经验的ASP(VBSCRIPT,以后都只用VBScript来写Asp程序)程序员都用过<!--#Include file=""-->这条语句吧,这对提高代码的可复用性是比较方便的,在VB里模块就完成了这个功能.值得注意的是在模块中可以定义Sub Main() 过程,并且在启动里面可以让程序从Main()过程进入.这有点象c,c++中的main()函数. 不过模块的代码可重用级别还是停留在过程,函数调用上.
二、类模块
在VB中,可以建立类模块.类模块类似于ASP中的类.我想有经验的Asp程序员应该都有自己的类库吧.一般情况下我们怎么在ASP中引用自己的类库呢?对,还是include,只要把类文件包含进来就行了. 在调用的时候只要 Set xxx= new ClassName 就行了.这个和ASP中也是一样的.用类模块有什么好处呢? 因为使用类可以定义一些公用的方法和过程,可以将代码的可重用行达到一个更高的高度.
三、ActiveX技术
可能大家会想,无论是用模块还是类模块,可能很多功能都会在下一个项目用到.如果这个时候我们需要那些功能的话,可以直接把类模块和模块代码考到Vb项目中.在ASP中,我们只要把类代码做成文件,然后在其他应用include进来就行了.但有一个问题,那就是代码的封装行.因为不论是类模块还是模块,或者ASP中的写有类的.asp文件,代码可以被人看并加以修改.有没有办法能使代码不让人看到呢?答案是肯定的,这个就是ActiveX控件技术. ActiveX 的优点在于可以不同的语言编写ActiveX控件,只要符合约定的规范就行,然后可以被其他语言调用.而且代码是编译好了的.这个对于ASP来说,可以提高运行速度.好了,废话少说,下面看看给出一个实际使用的例子吧:
1.首先建立一个ActiveX dll工程,然后把名字写成TestDll.在类模块里的代码为:
Option E......
VB基础篇(2005-11-15 00:39:00)
摘要:
第二部分 VB基础篇
VB入门
Visual Basic 是 Microsoft Studio 6 的一部分,Visual Basic 有不同的版本,目前的常用版本是6.0。Microsoft 面向中国大陆推出全汉化版的中文 Visual Basic 是我们这个教程使用的基本编程工具,Visual Basic 6.0 本身也有不同的版本,从学习版(Learning edition)、专业版(Professional edition)到企业版(Enterprise edition)含概的功能逐渐增强。除特殊说明外,教程中的示例都将以中文 Visual Basic 6.0 企业版为平台进行分析与讲述。
Visual是“可视化”的意思,Basic是指传统的结构化程序设计语言。Visual Basic就是沿袭了Basic的一些语法,增加了面向对象的特性,增强了很多可视化编程的技术的一种基于对象的编程语言。Visual Basic源于Basic,但功能远远超出了传统Basic,是当今广为流行,容易学习,而且功能强大的软件开发工具。
Visual Basic的功能强大还体现在VBA(Visual Basic for Application)和VB Script上。VB Script是在网站编程上较为流行的一种脚本语言,VBA是微软Office套件的通用宏控制语言,其它的流行软件如AutoCAD也增加了对VBA的支持。Visual Basic6.0在本书中,简称为VB。
一、VB的安装
要使用VB,你首先需要使用安装程序进行安装。VB 对安装的计算机有以下要求:
VB对硬件的要求是:486或更高的处理器;如果全部安装至少需要80M硬空间;当然还要一个CDROM;Microsoft windows支持VGA或更高分辨率的显示器、鼠标或其它定点设备;至少16M内存。
对软件环境要求是: Microsoft Windws 95 及更高版本,或者是 Microsoft Windws NT SP3.51 或更高版本,安装VB前必须先行安装好 Internet Explorer4.01(IE4.01),除非你的机器上已经有了IE的更高版本。 如果你的计算机软硬件都符合要求就可启动 Windows ,运行VB 的安装程序setup.exe开始安装了。
对......
