Följande kod är det flera strul med.
<!--#include file="adovbs.inc"-->
<%
Response.Cachecontrol="Public"
Set Connection = Server.CreateObject("ADODB.connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("\cgi-bin/news.mdb")
MyPageSize = 3
if Request.QueryString("page") = "" then
CurrPage = 1
else
CurrPage = Request.QueryString("page")
end if
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.form("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)
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open mQuery, Connection, 3,1
hits=rs.recordcount
RS.PageSize = MyPageSize
RS.AbsolutePage = CurrPage
curr = 0
%>
<html>
<head>
<title>GamersLair -Inte störst men Bäst</title>
<!--#include file="scripts/jscripts.txt"-->
</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">
Sökningen <font color="red"><% Response.write (request.form("search")) %></font> resulterade i <b><% =hits %></b> träffar<br>
<%
If rs.EOF Then
Response.write("Vi sökte, men hittade inte vad du ville ha.")
Else
%>
[Page <%= CurrPage %> of <%= RS.PageCount %>]<br>
<%
do while not RS.EOF and curr < MyPageSize
%>
<a href="nyheter.asp?id=<%=rs("Id")%>"><%= rs("Rubrik") %></a>
<br>
<%
rs.MoveNext
curr = curr + 1
Loop
End If
%>
<input type="hidden" name="search" value="<% =request.form("search") %>">
<%
if CurrPage > 1 then
%>
<a href="sok.asp?page=<%= CurrPage - 1 %>"> Prev 10 hits></a>
<%
end if
%>
<%
if CurrPage < RS.PageCount then
%>
<a href = "sok.asp?page=<%= CurrPage + 1 %>"> Next 10 hits></a>
<%
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>
Första problemet uppstår när man går till sida två alltså skall visa nästa tre poster, då läser den istället in alla poster i hela databasen, har försökt lösa detta genom att köra ett hidden form fast utan resultat.
Ett annat är att om rs är tomt så får jag felmeddelande texten visas inte.
Ja det var väl det viktigaste.
Har försökt länga och väl att försöka lösa detta fast utan resultat.
Hoppas på hjälp
Andreas