基于VB程序和SQL Server数据库的多条件模糊查询的实现

时间:2022-03-24 09:58:26

基于VB程序和SQL Server数据库的多条件模糊查询的实现

摘要:当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统原因。VB和SQLServer分别是微软公司推出的面向对象的程序设计语言和大型数据库管理系统,具有广大的用户群,二者的接合可开发出功能强大的C/S应用程序。该文就在VB中访问SQLServer数据库的实现多条件模糊查询进行了讨论,主要介绍在数据库管理系统中实现多条件模糊查询的方法与技巧。

关键词:数据库;多条件;模糊查询

中图分类号:TP311文献标识码:A文章编号:1009-3044(2009)35-9904-03

Based on VB Programs and SQL Server Database, Multi-condition of the Realization of Fuzzy Query

WANG Da-long

(Dalian 91550 units 94 units,Dalian 116023,China)

Abstract: The present era is the rapid development of the information age,information processing in all walks of life can not be separated,which is widely used in computer information management system for the reasons.VB and SQLServer are Microsoft's object-oriented programming languages and large database management systems,with large user base,both of the joints can be developed a powerful C/S applications.This access SQLServer in VB database multi-fuzzy query conditions were discussed,mainly introduced in the database management system,multi-conditions,methods and techniques fuzzy queries.

Key words: database; multi-condition; fuzzy query

1 数据库概述及应用

1)数据库概述

数据库应用系统开发的目标是建立一个满足拥护长期需要的产品。开发的主要过程为理解用户需求,然后,把它们转变为有效的数据库设计。把设计转变为实际的数据库,并且这些数据库带有功能完备、高效能的应用。

数据库技术在计算机软件领域研究中一直是非常重要的主题,产生于20世纪60年代,30多年来数据库技术得到了迅速发展,并已经成较为完整的理论体系和一大批实用系统。

2)数据库系统

数据库系统本质上是一个用计算机存储查询记录的系统。数据库本身可被看作为一种电子文件柜也就是说,它是收集计算机数据文件的仓库或容器。系统用户可以对这些文件执行插入数据、检索数据、更改数据、删除数据等一系列操作。

数据库系统是一个计算机存储记录的系统,即它是一个计算机系统,该系统的目标存储信息并支持用户检索和更新所需要的信息。

2 VB简要概述

Visual Basic是Microsoft公司在1991年推出的用于开发Windows应用程序的开发工具,是基于DOS平台下 Basic编程语言的可视化的程序设计语言。它继承了 Basic所具有的程序设计语言简单易用的特点,同时在其编程系统中采用了面向对象、事件驱动的编程机制,开创了可视化编程的一代先河。

Visual是可视化的意思,Visual Basic的命名就表示它是一套可视化的程序开发工具。在设计过程中,可以用可视化的方法编排一个窗口程序在执行时的外观,同时也可以采用易学易懂的Basic语言,并且把界面操作的细节部分事先封装起来,使得初学程序设计的人也可以轻而易举的编写出想象的程序。

通过VB实现对数据库的一些功能有数据和数据说明的醒目显示;匹配查询、模糊查询。

3 VB访问SQL Server数据模糊查询方法

在进行数据库查询时,有完整查询和模糊查询之分。

一般模糊语句如下:

SELECT 字段 FROM 表 WHERE 某字段 Like 条件

其中关于条件,SQL提供了四种匹配模式:

1)%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。

比如 SELECT * FROM [user] WHERE u_name LIKE '%三%'

将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。

另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件

SELECT * FROM [user] WHERE u_name LIKE '%三%' AND u_name LIKE '%猫%'

若使用 SELECT * FROM [user] WHERE u_name LIKE '%三%猫%'

虽然能搜索出“三脚猫”,但不能搜索出符合条件的“张猫三”。

2)_: 表示任意单个字符。匹配单个任意字符,它常用来限制表达式的字符长度语句:

比如 SELECT * FROM [user] WHERE u_name LIKE '_三_'

只找出“唐三藏”这样u_name为三个字且中间一个字是“三”的;

再比如 SELECT * FROM [user] WHERE u_name LIKE '三__';

只找出“三脚猫”这样name为三个字且第一个字是“三”的;

3)[ ]:表示括号内所列字符中的一个(类似正则表达式)。指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。

比如 SELECT * FROM [user] WHERE u_name LIKE '[张李王]三'

将找出“张三”、“李三”、“王三”(而不是“张李王三”);

如 [ ] 内有一系列字符(01234、abcde之类的)则可略写为“0-4”、“a-e”

SELECT * FROM [user] WHERE u_name LIKE '老[1-9]'

将找出“老1”、“老2”、……、“老9”;

4)[^ ] :表示不在括号所列之内的单个字符。其取值和 [] 相同,但它要求所匹配对象为指定字符以外的任一个字符。

比如 SELECT * FROM [user] WHERE u_name LIKE '[^张李王]三'

将找出不姓“张”、“李”、“王”的“赵三”、“孙三”等;

SELECT * FROM [user] WHERE u_name LIKE '老[^1-4]';

将排除“老1”到“老4”,寻找“老5”、“老6”、……

5)查询内容包含通配符时

由于通配符的缘故,导致我们查询特殊字符“%”、“_”、“[”的语句无法正常实现,而把特殊字符用“[ ]”括起便可正常查询。据此我们写出以下函数:

function sqlencode(str)

str=replace(str,"[","[[]") '此句一定要在最前

str=replace(str,"_","[_]")

str=replace(str,"%","[%]")

sqlencode=str

end function

在查询前将待查字符串先经该函数处理即可。

①利用比较操作符"="进行模糊查询

先把SET EXACT的设置置为OFF,这时,"="用于两个字符表达式之间作比较,其规则是:"="右边的字符逐个与"="左边相同位置的字符进行比较,只要遇到其中一个字符不相等,或者"="右边的字符表达式结束,比较操作就结束。所以,"abc"="abc","abc"="ab","ab_"="ab","ab"=""的比较结果均为逻辑真(.T.)。可见,这种方法的模糊性是不能令人满意的。

②利用"$"进行包含比较,其模糊查询的效果就比用"="时好得多

这种方法是在"$"右边的字符表达式中查找"$"左边的字符表达式,若找到返回逻辑真(.T.),否则返回逻辑假(.F.)。用这种方法只要"$"左边的字符表达式的每一个字符在"$"右边的字符表达式中存在且位置不间断,查找就能成功。

由此可见,直接利用"="和"$"进行比较操作是不能太"模糊"的。

4 缩略语或多条件的模糊查询方法

通常,缩略语或简称是由全称中的某些排列位置不连续的字符组成的,因此,通过设置不同长度的字符串进行比较的规则,或者利用包含比较符"$",是不能对缩略语或简称进行模糊查询的。这时可编写一通用的自定义函数,将用户输入的查询条件()与字符型字段变量()进行逐字比较,如果是的缩略语或简称,则返回逻辑真(.T.)否则返回逻辑假(.F.),从而实现多条件的模糊查询。

下面所编写的自定义函数以供参考。

设计思想:此函数必须是一个通用代码。为此,执行时可先接受二个参数和。从的左边开始取其第一、二个字符X1,用AT( )函数测试X1在中的位置S1,如果S1不为0,就将中包含X1以及左边部分的字符截掉,并取中的第三、四个字符X2,用AT( )函数测试X2在的剩余部分中的位置S2,若S2不为0,就将的剩余部分中包含X2以及左边部分的字符截掉……,直到将中的字符取完并在中测试完为止,最后本函数返回逻辑真(.T.)。在这个过程中只要有一次测试不成功(即Sn=0),则退出本函数并返回逻辑假(.F.)。因为一个汉字占二个ASCII字符,所以每次取二个相邻字符进行测试(让ZFBJ.PRG中的K=2)。这样做,一是可以减少测试比较的次数,提高程序运行速度。二是当中含有数字、字母等半角字符时,可以减少满足条件的记录数目,提高查询的命中率。然而,若查询条件中含有英文缩写,则每次只能取一个ASCII字符进行测试,多条件模糊查询的通用代码:

str_query1 = "select * from table";

string key1 = "";

string key2 = "";

string key3 = "";

string key4 = ""; // 有几个条件就加几个key,我这里有四个

if (textBox1.Text.Trim() != "")

key1 = " column1 like '%" + textBox1.Text.Trim() + "%'";

if (textBox2.Text.Trim() != "")

key2 = " column2 like '%" + textBox2.Text.Trim() + "%'";

if (textBox3.Text.Trim() != "")

key3 = " column3 like '%" + textBox3.Text.Trim() + "%'";

if (textBox4.Text.Trim() != "")

key4 = " column4 like '%" + textBox4.Text.Trim() + "%'";

if (key1 != "" || key2 != "" || key3 != "" || key4 != "" )

{ str_query1 = "select * from table where";

if(key1!="") // 这些条件是个递增的过程,有几个条件就加几个if语句

{ str_query1 += key1;}

if (key1 != "" && key2 != "")

{ str_query1 += "and" + key2; }

else

{ str_query1 += key2;}

if ((key1 != "" || key2 != "") && key3 != "")

{ tr_query1 += "and" + key3;}

else

{ str_query1 += key3;}

if ((key1 != "" || key2 != "" || key3 != "") && key4 != ""){ str_query1 += "and" + key4;}

else

{ str_query1 += key4;}

上面这些代码的主要核心是但有一个条件不为空时肯定会有查询语句加上where,然后当前n-1个条件有一个不为空时,肯定要在keyN之前加上and,这一点相信大家都知道,否则的话就是前n-1个条件都为空那么直接查询语句直接加keyN就行了,因为前面没有条件所以不用加and了,就这样依次类推,可以逐渐的把查询条件增加,又不会让代码的可读性下降,当然了这个可以任意的添加修改key的数目,非常容易。通过上面介绍的代码实现了真正的多条件模糊查询,然而令人遗憾的是它的速度表现总使人感到美中不足,幸好在vb中引入了结构化查询语言SELECT-SQL。

5 利用vb中SELECT-SQL语句的模糊查询方法

利用SQL的SELECT语句,可以非常方便、极其快速地进行十分复杂的查询操作。特别值得推荐的是ELECT-SQL语句中的WHERE参数支持通配符"%(百分符号)"和"_(下划线符号)",因此,对于查询条件为缩略语或简称的情况,可以非常简单地实现真正的模糊查询。这里,百分符号"%"代表0个或0个以上的任意字符,下划线符号"_"代表1个任意字符,它们只能与运算符LIKE搭配使用。

例如:设内存变量m.field,其值为用户输入的用户名称的简称,如"京师专",现在要在KTJBK.DBF中查询用户名称(字段名)为"北京师范高等专科学校",或为"北京师专",或为"京师专"的全部记录,可以用下面的一段程序实现:

m. field="京师专"

mc_cxtj="%"

FOR i=1 TO LEN(ALLTRIM(m.field)) STEP 2

mc_cxtj=mc_cxtj+SUBSTR(ALLTRIM(m.field),i,2)+"%"

ENDFOR

SELECT * ;

FROM KTJBK ;

WHERE KTJBK.用户名称 LIKE (mc_cxtj) ;

INTO CURSOR TEMP

利用VB中的结构化查询语言SELECT-SQL可以编写出很漂亮的通用查询程序。在数据库管理系统的开发实践中,用VB的屏幕生成器编写过一通用查询程序,其库的通用性和执行速度表现都非常好。

6 总结

在数据库管理系统中vb访问SQL实现查询是一个很重要的内容。然而,在多数情况下人们不能准确知道作为查询条件的字段内容,为保证能查到满足条件的数据记录,进行多条件的模糊查询能达到很好的效果。

参考文献:

[1] 崔德友,刘卉媚,朱小平.在VB应用程序中访问SQL Server数据库的实现方法[J].吉林广播电视大学学报,2003(4).

[2] 朱可云.多条件模糊查询的实现[J].信息工程学院学报,1999(3).

[3] 谢红,李江华,解武,等.基于VB程序和SQL Server数据库的多条件模糊查询的实现[J].应用科技,2003,30(9).

上一篇:RFID中间件关键模块的研究与实现 下一篇:一种基于改进的粒子系统的烟花模拟