• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS!
    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) (\bor\b|\band\b) (\S*\S)\) (and|or) \((\S*\S) (\bor\b|\band\b) (\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) (\bor\b|\band\b) (\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) (\bor\b|\band\b) (\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
    上一篇:结合asp和存储过程做的搜索程序
    下一篇:支持加号空格的查询
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    实现支持逻辑搜索/单词搜索/词组搜索+支持OR/AND关键字的VBS CLASS! 实现,支持,逻辑,搜索,单词,