999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于VB程序和SQL Server數據庫的多條件模糊查詢的實現

2009-04-29 00:00:00王大龍
電腦知識與技術 2009年35期

摘要:當今時代是飛速發展的信息時代,在各行各業中離不開信息處理,這正是計算機被廣泛應用于信息管理系統原因。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 縮略語或多條件的模糊查詢方法

通常,縮略語或簡稱是由全稱中的某些排列位置不連續的字符組成的,因此,通過設置不同長度的字符串進行比較的規則,或者利用包含比較符\"$\",是不能對縮略語或簡稱進行模糊查詢的。這時可編寫一通用的自定義函數,將用戶輸入的查詢條件(<字符串2>)與字符型字段變量(<字符串1>)進行逐字比較,如果<字符串2>是<字符串1>的縮略語或簡稱,則返回邏輯真(.T.)否則返回邏輯假(.F.),從而實現多條件的模糊查詢。

下面所編寫的自定義函數以供參考。

設計思想:此函數必須是一個通用代碼。為此,執行時可先接受二個參數<字符串1>和<字符串2>。從<字符串2>的左邊開始取其第一、二個字符X1,用AT( )函數測試X1在<字符串1>中的位置S1,如果S1不為0,就將<字符串1>中包含X1以及左邊部分的字符截掉,并取<字符串2>中的第三、四個字符X2,用AT( )函數測試X2在<字符串1>的剩余部分中的位置S2,若S2不為0,就將<字符串1>的剩余部分中包含X2以及左邊部分的字符截掉……,直到將<字符串2>中的字符取完并在<字符串1>中測試完為止,最后本函數返回邏輯真(.T.)。在這個過程中只要有一次測試不成功(即Sn=0),則退出本函數并返回邏輯假(.F.)。因為一個漢字占二個ASCII字符,所以每次取二個相鄰字符進行測試(讓ZFBJ.PRG中的K=2)。這樣做,一是可以減少測試比較的次數,提高程序運行速度。二是當<字符串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).

主站蜘蛛池模板: 亚洲综合日韩精品| 国产小视频a在线观看| 国产欧美日韩一区二区视频在线| 在线日本国产成人免费的| 日韩毛片基地| 久久人午夜亚洲精品无码区| 国产精品污视频| 91一级片| 久久精品这里只有国产中文精品 | 又粗又大又爽又紧免费视频| 日韩精品毛片人妻AV不卡| 久久无码av一区二区三区| 无码一区18禁| 91久久精品日日躁夜夜躁欧美| 日韩精品高清自在线| 2021国产乱人伦在线播放| 无码啪啪精品天堂浪潮av| 色屁屁一区二区三区视频国产| 五月激情婷婷综合| 国产精品护士| 久久久91人妻无码精品蜜桃HD | 国产精品亚洲一区二区在线观看| 国产高清在线观看| 亚洲国产亚综合在线区| 日韩精品成人在线| 日韩无码白| 免费人成在线观看成人片| 一级在线毛片| 欧美丝袜高跟鞋一区二区| 精品三级在线| 热思思久久免费视频| 午夜视频免费试看| 国产又黄又硬又粗| 97人人做人人爽香蕉精品| 亚洲无线国产观看| 天堂在线www网亚洲| 亚洲va欧美va国产综合下载| 国产导航在线| 日韩高清中文字幕| 免费可以看的无遮挡av无码| 欧美成a人片在线观看| 在线播放精品一区二区啪视频| 91精品国产丝袜| 国产后式a一视频| 国产福利2021最新在线观看| 青青极品在线| 亚洲免费黄色网| 首页亚洲国产丝袜长腿综合| 国产欧美日韩va| 天天色综网| 色网站在线视频| 欧美国产日韩在线观看| 国产精品第页| 18禁色诱爆乳网站| 人妻一区二区三区无码精品一区| 美女扒开下面流白浆在线试听 | 久久精品免费国产大片| 国产乱子伦无码精品小说| 亚洲人成人伊人成综合网无码| 亚洲欧洲天堂色AV| 国产午夜福利亚洲第一| 国产91成人| 亚洲三级色| 亚洲中字无码AV电影在线观看| 欧美成人A视频| 亚洲 日韩 激情 无码 中出| 婷婷成人综合| 久久公开视频| 久久a毛片| 一级一毛片a级毛片| 一区二区三区精品视频在线观看| 四虎影院国产| 伊人激情久久综合中文字幕| 国产av无码日韩av无码网站| 国产真实乱子伦视频播放| 伊人五月丁香综合AⅤ| av手机版在线播放| 粗大猛烈进出高潮视频无码| 国产成人无码AV在线播放动漫| 中国精品自拍| 黄色网页在线观看| 99热线精品大全在线观看|