---
title: "Hjälp med detta"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/5698-hjälp-med-detta"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "AG"
published: "2000-05-07T18:09:00.000Z"
updated: "2000-05-20T15:52:00.000Z"
replies: 11
views: 473
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/5698-hjälp-med-detta"
---

# Hjälp med detta

## #1 — AG, 2000-05-07T18:09Z

Fick denna del utav en vänlig själ.
Detta skulle hjälpa mig med min sökmaskin men jag behöver hjälp med vidarutvecling, helst komplett.
Om du vill splita följande sträng: 
'+asp -php +dåligt'

vi säger att den ligger i en variabel som heter strSok, så gör du följande:

\<%
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (\*.mdb)};dbq=" & Server.MapPath("cgi-bin/databas.mdb")
'-- skapar början på din SQLFRÅGA
strSql = "SELECT \* FROM Tabell WHERE "
'-- splitar din strSok till 3 st mindre strängar som läggs i arrayn sokArray
sokArray = split(strSok," ")
If InStr(sokArray(i),"+") \> 0 then 
strSql = strSql & "(ORD_SOK like '" & sokArray(i) &"') "
elseif InStr(sokArray(i),"-") \> 0 then
strSql = strSql & "(ORD_SOK NOT like '" & sokArray(i) &"') "
end if

for iIndex = 1 to Ubound(sokArray)
If InStr(sokArray(i),"+") \> 0 then 
strSql = strSql & "AND (ORD_SOK like '" & sokArray(i) &"') "
elseif InStr(sokArray(i),"-") \> 0 then
strSql = strSql & "AND (ORD_SOK NOT like '" & sokArray(i) &"') "
end if
next
'-- Kör din sqlSats mot databasen --
objRs.open strSql,objConn
%\>

Hoppas någon är villig att hjälpa, finns ju många experter här.
Andreas

Permalänk: https://www.webforum.nu/p/5698

## #2 — emission, 2000-05-07T18:51Z

Vad är det du behöver hjälp med? Parsningen av sökformuläret eller visningen av sökresultatet?

Permalänk: https://www.webforum.nu/p/243047

## #3 — AG, 2000-05-08T14:13Z

Parsningen av sökformuläret är det. Vore kanon ifall du kunde hjälpa.
Vore bra ifall man kunde söka på hur många ord som helst.

Tack på förhand
Andreas

Permalänk: https://www.webforum.nu/p/243048

## #4 — emission, 2000-05-08T19:18Z

Okej, det var en intressant fråga när man funderade lite på det, men detta har jag kommit fram till.

```
dim i,j,mQuery,mQueryArr,mAndArr,mNotArr,mOrArr,mSQL,mWhere

'grunddelarna i frågan
mSQL="SELECT * from Tabell WHERE " 
mWhere="soekfaelt LIKE '%%'"

'sökfältets värde
mQuery=request.querystring("query")

'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(mQuery)
   mAsc=asc(mid(mQuery,i,1))
   if mAsc=34 then
      mCount=mCount+1
      blnInQ=not blnInQ
   else
      if blnInQ and mAsc=32 then
         mQuery=left(mQuery,i-1) & chr(1) & mid(mQuery,i+1)
      end if
   end if

next

'om antalet citattecken är ojämnt ignoreras de helt
if mCount mod 2 <> 0 then
   mQuery=replace(mQuery,chr(1)," ")
end if

'ta bort citattecknen
mQuery=replace(mQuery,chr(34),"")

'ersätt mellanslag med chr(0) och mellanslag
mQuery=chr(0) & replace(mQuery," "," " & chr(0))

'splitta upp i en array
mQueryArr=split(mQuery," ")

'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(mQueryArr,chr(0) & "+",true)
mQueryArr=filter(mQueryArr,chr(0) & "+",false)
mNotArr=filter(mQueryArr,chr(0) & "-",true)
mQueryArr=filter(mQueryArr,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(mWhere,"%%","%" & mid(mAndArr(i),3) & "%")
next
for i=0 to ubound(mNotArr)
   mNotArr(i)=replace(mNotArr(i),chr(1)," ")
   mNotArr(i)=replace(mWhere,"%%","%" & mid(mNotArr(i),3) & "%")
next
for i=0 to ubound(mQueryArr)
   mQueryArr(i)=replace(mQueryArr(i),chr(1)," ")
   mQueryArr(i)=replace(mWhere,"%%","%" & mid(mQueryArr(i),2) & "%")
next

'tejpa ihop en färdig fråga
mQuery=join(mQueryArr," OR ")
if mQuery<>"" then 
   mQuery="(" & mQuery  & ")"
   if ubound(mAndArr) > -1 then mQuery=mQuery & " AND "
end if
mQuery=mQuery & join(mAndArr," AND ")
if mQuery<>"" and ubound(mNotArr) > -1 then mQuery=mQuery & " AND NOT "
mQuery=mSQL & mQuery & join(mNotArr," AND NOT ")

'frågan är klar! Ligger i mQuery
```

Med detta kan du söka precis som på Altavista, med +, - och meningar inom citattecken.

Prova på, och fråga gärna om det är något du inte hänger med på.

mvh

Permalänk: https://www.webforum.nu/p/243049

## #5 — AG, 2000-05-11T20:50Z

TAckar för all hjälp men det vill ändå inte fungera. Får error på följande rader: mSQL="SELECT \* FROM Nyheter WHERE " 
mWhere="artikel LIKE '%%'" 
,så jag bifogade hela koden

\<%
Response.Cachecontrol="Public"
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (\*.mdb)};dbq=" & Server.MapPath("\\cgi-bin/news.mdb")
dim i,j,mQuery,mQueryArr,mAndArr,mNotArr,mOrArr,mSQL,mWhere
'grunddelarna i frågan
mSQL="SELECT \* FROM Nyheter WHERE " 
mWhere="artikel LIKE '%%'"
'sökfältets värde
mQuery=request.querystring("search")

'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(mQuery)
mAsc=asc(mid(mQuery,i,1))
if mAsc=34 then
mCount=mCount+1
blnInQ=not blnInQ
else
if blnInQ and mAsc=32 then
mQuery=left(mQuery,i-1) & chr(1) & mid(mQuery,i+1)
end if
end if

next

'om antalet citattecken är ojämnt ignoreras de helt
if mCount mod 2 \<\> 0 then
mQuery=replace(mQuery,chr(1)," ")
end if

'ta bort citattecknen
mQuery=replace(mQuery,chr(34),"")

'ersätt mellanslag med chr(0) och mellanslag
mQuery=chr(0) & replace(mQuery," "," " & chr(0))

'splitta upp i en array
mQueryArr=split(mQuery," ")

'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(mQueryArr,chr(0) & "+",true)
mQueryArr=filter(mQueryArr,chr(0) & "+",false)
mNotArr=filter(mQueryArr,chr(0) & "-",true)
mQueryArr=filter(mQueryArr,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(mWhere,"%%","%" & mid(mAndArr(i),3) & "%")
next
for i=0 to ubound(mNotArr)
mNotArr(i)=replace(mNotArr(i),chr(1)," ")
mNotArr(i)=replace(mWhere,"%%","%" & mid(mNotArr(i),3) & "%")
next
for i=0 to ubound(mQueryArr)
mQueryArr(i)=replace(mQueryArr(i),chr(1)," ")
mQueryArr(i)=replace(mWhere,"%%","%" & mid(mQueryArr(i),2) & "%")
next

'tejpa ihop en färdig fråga
mQuery=join(mQueryArr," OR ")
if mQuery\<\>"" then 
mQuery="(" & mQuery & ")"
if ubound(mAndArr) \> -1 then mQuery=mQuery & " AND "
end if
mQuery=mQuery & join(mAndArr," AND ")
if mQuery\<\>"" and ubound(mNotArr) \> -1 then mQuery=mQuery & " AND NOT "
mQuery=mSQL & mQuery & join(mNotArr," AND NOT ")

'frågan är klar! Ligger i mQuery
%\>
\<html\>
\<head\>
\</head\>
\<body background="bilder/pagebg.gif" text="black"\>
\<center\>
\<!--#include file="annons/impressions.txt"--\>\<p\>
\<table width="590" cellpadding="0" cellspacing="0" border="0" align="center"\>
\<th colspan="5" valign="top"\>\<!--#include file="scripts/logo.txt"--\>\</th\>
\<tr\>\<th colspan="5" valign="top"\>\<!--#include file="scripts/meny.txt"--\>\</th\>\</tr\>
\<tr\>\<td width="115" background="bilder/leftcolumgroblo.gif" valign="top"\>\<!--#include file="scripts/vanstermeny.txt"--\>\</td\>
\<td width="10" bgcolor="white"\>\<hr width="10" color="white" noshade\>\</td\>
\<td width="340" height="1000" bgcolor="white" valign="top"\>\<!--#include file="scripts/datum.txt"--\>\<br\>
\<font face="arial" size="2"\>
\<%
If mQuery.EOF Then
Response.write("Vi sökte, men hittade inte vad du ville ha.")
Else
%\>

\<%
Do until mQuery.EOF
%\>

\<a href="nyheter.asp?id=\<%=mQuery("Id")%\>"\>\<%= mQuery("Rubrik") %\>\</a\>
\<br\>

\<%
mQuery.MoveNext
Loop
End If
%\>

\<td width="10" bgcolor="white"\>\<hr width="10" color="white" noshade\>\</td\>
\<td width="115" background="bilder/rightcolumn.gif" valign="top"\>
\<!--#include file="scripts/hogermeny.txt"--\>
\</td\>\</tr\>
\<th colspan="5" valign="top"\>\<!--#include file="scripts/nedermeny.txt"--\>\</th\>
\</table\>
\<p\>\<!--#include file="annons/annat.txt"--\>
\</body\>
\</html\>

Erroret är: 
Microsoft VBScript runtime error '800a01a8' 
Object required: 'SELECT \* FROM Nyhete' 

Hoppas nån kan
Andreas

Permalänk: https://www.webforum.nu/p/243050

## #6 — emission, 2000-05-11T21:45Z

mQuery är inte ett recordset, utan bara en sträng som innehåller den färdiga SQL-frågan. Du måste först exekvera den frågan, så att du får tillbaka ett recordset.

```
<%
Response.Cachecontrol="Public"
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("\cgi-bin/news.mdb")
dim i,j,mQuery,mQueryArr,mAndArr,mNotArr,mOrArr,mSQL,mWhere
'grunddelarna i frågan
mSQL="SELECT * FROM Nyheter WHERE " 
mWhere="artikel LIKE '%%'"
'sökfältets värde
mQuery=request.querystring("search")

'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(mQuery)
mAsc=asc(mid(mQuery,i,1))
if mAsc=34 then
mCount=mCount+1
blnInQ=not blnInQ
else
if blnInQ and mAsc=32 then
mQuery=left(mQuery,i-1) & chr(1) & mid(mQuery,i+1)
end if
end if

next

'om antalet citattecken är ojämnt ignoreras de helt
if mCount mod 2 <> 0 then
mQuery=replace(mQuery,chr(1)," ")
end if

'ta bort citattecknen
mQuery=replace(mQuery,chr(34),"")

'ersätt mellanslag med chr(0) och mellanslag
mQuery=chr(0) & replace(mQuery," "," " & chr(0))

'splitta upp i en array
mQueryArr=split(mQuery," ")

'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(mQueryArr,chr(0) & "+",true)
mQueryArr=filter(mQueryArr,chr(0) & "+",false)
mNotArr=filter(mQueryArr,chr(0) & "-",true)
mQueryArr=filter(mQueryArr,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(mWhere,"%%","%" & mid(mAndArr(i),3) & "%")
next
for i=0 to ubound(mNotArr)
mNotArr(i)=replace(mNotArr(i),chr(1)," ")
mNotArr(i)=replace(mWhere,"%%","%" & mid(mNotArr(i),3) & "%")
next
for i=0 to ubound(mQueryArr)
mQueryArr(i)=replace(mQueryArr(i),chr(1)," ")
mQueryArr(i)=replace(mWhere,"%%","%" & mid(mQueryArr(i),2) & "%")
next

'tejpa ihop en färdig fråga
mQuery=join(mQueryArr," OR ")
if mQuery<>"" then 
mQuery="(" & mQuery & ")"
if ubound(mAndArr) > -1 then mQuery=mQuery & " AND "
end if
mQuery=mQuery & join(mAndArr," AND ")
if mQuery<>"" and ubound(mNotArr) > -1 then mQuery=mQuery & " AND NOT "
mQuery=mSQL & mQuery & join(mNotArr," AND NOT ")

'frågan är klar! Ligger i mQuery

set rs=Connection.execute mQuery

%>
<html>
<head>
</head>
<body background="bilder/pagebg.gif" text="black">
<center>
<!--#include file="annons/impressions.txt"--><p>
<table width="590" cellpadding="0" cellspacing="0" border="0" align="center">
<th colspan="5" valign="top"><!--#include file="scripts/logo.txt"--></th>
<tr><th colspan="5" valign="top"><!--#include file="scripts/meny.txt"--></th></tr>
<tr><td width="115" background="bilder/leftcolumgroblo.gif" valign="top"><!--#include file="scripts/vanstermeny.txt"--></td>
<td width="10" bgcolor="white"><hr width="10" color="white" noshade></td>
<td width="340" height="1000" bgcolor="white" valign="top"><!--#include file="scripts/datum.txt"--><br>
<font face="arial" size="2">
<%
If rs.EOF Then
Response.write("Vi sökte, men hittade inte vad du ville ha.")
Else
%>

<%
Do until rs.EOF
%>

<a href="nyheter.asp?id=<%=rs("Id")%>"><%= rs("Rubrik") %></a>
<br>

<%
rs.MoveNext
Loop
End If
rs.close
set rs=nothing
Connection.close
set Connection=nothing
%>

<td width="10" bgcolor="white"><hr width="10" color="white" noshade></td>
<td width="115" background="bilder/rightcolumn.gif" valign="top">
<!--#include file="scripts/hogermeny.txt"-->
</td></tr>
<th colspan="5" valign="top"><!--#include file="scripts/nedermeny.txt"--></th>
</table>
<p><!--#include file="annons/annat.txt"-->
</body>
</html>
```

Permalänk: https://www.webforum.nu/p/243051

## #7 — AG, 2000-05-12T17:50Z

Jo jag testade den lokalt med pws, det resulterade i att alla poster listades, alltså inte de som var releterande.

Nån lösning?
Andreas

Permalänk: https://www.webforum.nu/p/243052

## #8 — emission, 2000-05-14T11:39Z

Kolla vad du har för värde i mQuery...

Response.Write mQuery

...så tar vi problemte därifrån.

PS. Åker utomlands i en vecka, så du kanske får ha lite tålamod med lösningen. DS

mvh

Permalänk: https://www.webforum.nu/p/243053

## #9 — AG, 2000-05-14T13:42Z

Jag lade in följande snutt:
\<%
Response.Write mQuery
%\>
och den skrev då ut:
SELECT \* FROM Nyheter WHERE (rubrik LIKE '%%') 

Jag blev iaf inte klokare av det :)

Andreas

Permalänk: https://www.webforum.nu/p/243054

## #10 — emission, 2000-05-19T21:12Z

Har du verkligen skickat nagot till skriptet? Du maste ju ha ett sökformulär ocksa.

Kör du bara skriptet ensamt lär det bli som du beskrev. 

\[Redigerat av emission den 19 maj 2000\]

Permalänk: https://www.webforum.nu/p/243055

## #11 — AG, 2000-05-19T23:19Z

Mohahaha....
Jag fick det att fungera, nästan lite stolt :)
Var så att det var ju att man mQuery=request.querystring("search") istället körde jag:
mQuery=request.form("search")
Då fungerade det kanon.
Ett stort tack till emission som hjälpte mig igenom detta. Och ett stort tack till alla andra på webforum.

Andreas

\[Redigerat av AG den 20 maj 2000\]

Permalänk: https://www.webforum.nu/p/243056

## #12 — emission, 2000-05-20T15:52Z

Finemang!

Alltid trevligt att kunna hjälpa till.

mvh

Permalänk: https://www.webforum.nu/p/243057

---

Tråden på webben: https://www.webforum.nu/amne/asp/5698-hjälp-med-detta
