CLASS功能.替换传入的字符串成为SQL语句Where关键字后面的表达式: 词语搜索 [例如: 小明] 词组搜索 词组里面每一个词都将被检索 例如: 小强1 小名1 小强强 小小强 逻辑搜索 支持 And 和 Or 运算符. 例如: 小明 And 小强 And 小小强 复合条件: 例如:(小小明 Or 小明) And (小强 Or 小小强) 例如:(小小明 Or 小名) And 小小强 例如: ROOT1 And (广东人 Or 北京人) ----------------------------------------------------------- 复制代码 代码如下:Class CreateQueryString Public objReg Public intStart Public strField Private objNode2 Private strText Public Property Let QueryString( strValue ) strText = Lcase( strValue ) End Property Private Sub Class_Initialize() Set objReg = new RegExp strField = "(标题+文章)" End Sub Private Sub Class_Terminate() Set objReg = Nothing End Sub Public Default Function GetText() Dim blnRes Dim strSky With objReg .IgnoreCase = true .Global = True .Pattern = "s" blnRes = .Test( strText ) End With If (Not blnRes) Then intStart = 2 GetText = strField & " like '%" & strText & "%'" Else objReg.Pattern = "sand|sor" blnRes = objReg.Test( strText ) If blnRes Then strSky = check() If strSky = False Then GetText = wahaha() Else GetText = strSky End if Else GetText = wahaha() End if End If End Function Private Function wahaha() Dim strTer Dim strLikes Dim strOrs Dim strI Dim objRe strTer = "" strLikes = " or (" & strField & " like '%" strOrs = "%')" objReg.Pattern = "(S*S)" Set objRe = objReg.Execute(strText) For Each strI In objRe strTer = strTer & strLikes & strI & strOrs Next wahaha = Mid( strTer , 4 ) intStart = 3 End Function Private Function CheckYes( strMode , intCount) Dim objNode1 objReg.Pattern = strMode Set objNode1 = objReg.Execute( strText ) If objNode1.Count < 1 Then CheckYes = True Else Set objNode2 = objNode1( 0 ) If objNode2.subMatches.Count < intCount Then CheckYes = True End If End If End Function Private Function ORAND() Dim strSSS Dim strCCC Dim strAAA Dim a143 Dim i Dim objN Dim blnTru Dim blnBBB strSSS = "(" & strField & " like '%" strCCC = "%')" strAAA = "" n1 = 0 blnTru = True blnBBB = True objReg.Pattern = "(S*S)" Set objN = objReg.Execute( strText ) a143 = objN.Count - 1 If (objN.Item( a143 ) = "and") Or (objN.Item( a143 ) = "or") Then ORAND = False Exit Function End if For Each i In objN If blnTru Then If (i <> "and") And (i <> "or") Then blnTru = False strAAA = strAAA & strSSS & i & strCCC Else blnBBB = false Exit for End if Else If (i = "and") Or (i = "or") Then blnTru = True strAAA = strAAA & i Else blnBBB = False Exit For End if End if Next If (Not blnBBB) Then ORAND = False Else ORAND = strAAA intStart = 4 End if End Function Private Function check() Dim re Dim re1 Dim re2 Dim re3 Dim str Dim str1 Dim a1 Dim a2 Dim a3 Dim a4 str = strField & " like '%" str1 = "%'" With objReg .Pattern = "^(.+)s(and|or)s" re = .Test( strText ) .Pattern = "s(and|or)s(.+)$" re3 = .Test( strText ) End With If re And re3 Then If CheckYes( "^((S*S) (borb|bandb) (S*S)) (and|or) ((S*S) (borb|bandb) (S*S))$" , 6 ) Then check = False Else With objNode2 a1 = .submatches(0) a2 = .submatches(2) a3 = .submatches(4) a4 = .submatches(6) check = "(" & str & a1 & str1 & " " & .submatches(1) & " " & str & a2 & str1 & ") " &_ .submatches(3) & " (" & str & a3 & str1 & " " & .submatches(5) & " " & str & a4 & str1 & ")" intStart = 5 End With End If ElseIf re Then If CheckYes( "^((S*S) (borb|bandb) (S*S)) (and|or) (.+)" , 4 ) Then check = False Else With objNode2 a1 = .submatches(0) a2 = .submatches(2) a3 = .submatches(4) check = "(" & str & a1 & str1 & " " & .submatches(1) & " " & str & a2 & str1 & ") " &_ .submatches(3) & " (" & str & a3 & str1 & ")" intStart = 5 End With End If ElseIf re3 Then If CheckYes( "(.+) (and|or) ((S*S) (borb|bandb) (S*S))$" , 4 ) Then check = False Else With objNode2 a1 = .submatches(0) a2 = .submatches(2) a3 = .submatches(4) check = "(" & str & a1 & str1 & ") " & .submatches(1) & " (" & str & a2 & str1 & " " &_ .submatches(3) & " " & str & a3 & str1 & ")" intStart = 5 End With End If Else check = ORAND() End If End Function End Class -------------------------注意----------------------------- 替换好的字符串并不是完整的SQL语句.只是生成SQL语句的WHERE关键字后面的表达式.发送到ASP程序的时候.你可以在前面加上 "select id,标题,name,TableName from SearchAll where " 这样类似的SQL语句 -------------------------VBScript例子----------------------------- Dim objROOT1 Set objROOT1 = new CreateQueryString objROOT1.QueryString = strText '====传入要替换的字符串 objROOT1.strField = "要查询的字段名字" '===如果不设置.默认值是"(标题+文章)" strText = objROOT1() '=========得到替换好的SQL语句 If (objQueryString.intStart = 4) Then Call Msgbox("启动按逻辑搜索") End If Set objROOT1 = Nothing
推荐阅读
各种存储过程使用指南
<% '---开始链接数据库 Dim strConnString strConnString = "driver={SQL Server};server=songhp;uid=sa;pwd=;database=XVZDemo" set Conn = Server.CreateObject("ADODB.Connection") Conn.Open strConnstring '->>>详细阅读
本文标题:实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS!
地址:http://www.17bianji.com/kaifa2/ASP/33184.html
1/2 1