Rätt bra verkar den fungera. La in den i en funktion och fixade enkelfnuttsreplace
response.write SearchString("SELECT * from Tabell WHERE ","soekfaelt LIKE '%%'","hej hopp +hoppla")
'grunddelarna i frågan
Function SearchString(ByVal SQL,ByVal Where,ByVal Query)
dim i,j,QueryArr,mAndArr,mNotArr,mOrArr
'loopa igenom allt och ersätt mellanslag inom citattecken med chr(1).
'Denna bit går att göra med reguljära uttryck också
for i=1 to len(Query)
mAsc=asc(mid(Query,i,1))
if mAsc=34 then
mCount=mCount+1
blnInQ=not blnInQ
else
if blnInQ and mAsc=32 then
Query=left(Query,i-1) & chr(1) & mid(Query,i+1)
end if
end if
next
'om antalet citattecken är ojämnt ignoreras de helt
if mCount mod 2 <> 0 then
Query=replace(Query,chr(1)," ")
end if
'ta bort citattecknen
Query=replace(Query,chr(34),"")
'ersätt mellanslag med chr(0) och mellanslag
Query=chr(0) & replace(Query," "," " & chr(0))
'splitta upp i en array
QueryArr=split(Query," ")
response.write Query
'skapa arrayer för AND, AND NOT och OR.
'chr(0) gör det nu möjligt att matcha endast början på strängarna
mAndArr=filter(QueryArr,chr(0) & "+",true)
QueryArr=filter(QueryArr,chr(0) & "+",false)
mNotArr=filter(QueryArr,chr(0) & "-",true)
QueryArr=filter(QueryArr,chr(0) & "-",false)
'återskapa strängarna (ersätt chr(1) med mellanslag) och
'skapa WHERE-satser i arrayerna
for i=0 to ubound(mAndArr)
mAndArr(i)=replace(mAndArr(i),chr(1)," ")
mAndArr(i)=replace(Where,"%%","%" & replace(mid(mAndArr(i),3),"'","''") & "%")
next
for i=0 to ubound(mNotArr)
mNotArr(i)=replace(mNotArr(i),chr(1)," ")
mNotArr(i)=replace(Where,"%%","%" & replace(mid(mNotArr(i),3),"'","''") & "%")
next
for i=0 to ubound(QueryArr)
QueryArr(i)=replace(QueryArr(i),chr(1)," ")
QueryArr(i)=replace(Where,"%%","%" & replace(mid(QueryArr(i),2),"'","''") & "%")
next
'tejpa ihop en färdig fråga
Query=join(QueryArr," OR ")
if Query<>"" then
Query="(" & Query & ")"
if ubound(mAndArr) > -1 then Query=Query & " AND "
end if
Query=Query & join(mAndArr," AND ")
if Query<>"" and ubound(mNotArr) > -1 then Query=Query & " AND NOT "
Query=SQL & Query & join(mNotArr," AND NOT ")
SearchString=Query
End Function