Jag får det inte att fungera med att lista bara 20st träffar per sida (altavista). Altså om RS har tex 176st träffar skall den bara lista 20st på varje sida och sen skall man kunna trycka på "nästa" och "tillbaka". Osv, men jag får det inte att fungera. Kan någon titta på min kod (ursprungliga) och sedan modifiera den så att den blir fungerande med att kunna dela upp posterna på flera sidor.
Här är koden:
<%titlebar = "Sök"%>
<!--#include virtual="/top.inc" -->
<%
' Öppna databasen och hämta alla produkter.
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=d:\dmab\internet.mdb"
SQLStmt = "SELECT tabArt.ArtID, tabArt.Artikel, tabArt.ArtExkl, tabArt.Beskrivning, tabArt.TypID FROM tabArt WHERE tabArt.Artikel LIKE '%%" & Request.Form("searchstr") & "%%' AND (tabArt.Web = 1) ORDER BY tabArt.Artikel"
SET RS = Connection.Execute(SQLStmt)
%>
<% If RS.EOF OR Request.Form("searchstr") = "" Then
%>
<p align="center"><font face="Arial" color="#000000"><B><br>Din sökning gav inget resultat, var god försök igen.</B></font></p>
<p><% ELSE %> </p>
<center><table border="0" width="100%" cellspacing="1" cellpadding="0">
<tr>
<td width="272" bgcolor="#F40000"><strong><small><font face="Arial" color="#FFFFFF">Produkt</font></small></strong></td>
<td width="75" align="center" bgcolor="#F40000"><small><font face="Arial" color="#FFFFFF"><strong>á-Pris exkl.</strong></font></small></td>
<td width="75" align="center" bgcolor="#F40000"><small><font face="Arial" color="#FFFFFF"><strong>á-Pris inkl.</strong></font></small></td>
<td width="75" align="center" bgcolor="#F40000"><small><font face="Arial" color="#FFFFFF"><strong>Antal</strong></font></small></td>
</tr>
<% DO UNTIL RS.EOF %>
<%
Artinkl = FormatNumber(RS("ArtExkl")* 1.25,0)
j = j + 1
if j mod 2 then
rowColor = "CCCCCC"
else
rowColor = "DDDDDD"
end if
%>
<form method="POST" action="addsearch.asp" name=produkt>
<tr>
<td width="272" bgcolor="<%=rowColor %>"><strong><small><A HREF="JavaScript:beskrivning('../kategori/beskrivning.asp?besk=<%= RS("ArtID") %>')"><font face="Arial" color="#000000"><%= Server.HTMLEncode(RS("Artikel")) %></A></font></small></strong></td>
<td width="75" align=right bgcolor="<%=rowColor %>"><small><font face="Arial" color="#000000"><strong><%= FormatNumber(RS("ArtExkl"),0) %> :-</strong></font></small></td>
<td width="75" align=right bgcolor="<%=rowColor %>"><small><font face="Arial" color="#000000"><strong><%= Artinkl %> :-</strong></font></small></td>
<td width="75" align=right bgcolor="<%=rowColor %>"><input type="hidden" name="PaketID" value="<%= RS("ArtID") %>"><input type="text" name="Antal" size="2" value="1" maxlength=2><input id="submit1" src="../images/buyit.gif" border="0" type="image" WIDTH="20" HEIGHT="15">
</tr>
</form><%
RS.MoveNext
Loop
%>
</table>
</center>
<% End If %>
<%
' ==========================================================================
' Stäng databasen och RS.
' ==========================================================================
RS.Close
Connection.Close
%>
<!--#include virtual="/bot.inc" -->
Har lite svårt att kolla igenom det just nu. Men jag har gjort en sådan tillämpning på en sida och den koden ser ungefär ut som här
nedan. (html-koden är bortklippt).
<%
dim post, mxx, gid
post = request.querystring("post")
mxx = request.querystring("mxx")
gid = request.querystring("gid")
SQLstmt = "SELECT artid, namn, titel, FROM artiklar ORDER BY namn;"
set objRec = objConn.execute(SQLstmt)
%>
...
<%
if objRec.eof then
response.write "Det finns tyvärr inga artiklar i den här kategorien."
else
antal = UBound(objRec.GetRows, 2) + 1
if cint(antal) > cint(mxx) then
response.write "<b>Sida</b> "
antalIter = antal / mxx
if antalIter - int(antalIter) > 0 then antalIter = int(antalIter)+1
for s = 1 to antalIter
if cint(post) = (s-1) * mxx then
%><% =s %> <%
else
%><a href="cd.asp?post=<% =(s-1) * mxx %>&mxx=<% =mxx %>&gid=<% =gid %>"><% =s %></a> <%
end if
next
end if
%>
...
<%
objRec.MoveFirst
if post > 1 then objRec.Move(post)
for i = 1 to mxx
if not objRec.eof then
%>
...
<%
objRec.MoveNext
end if
next
end if
%>
Du kanske skulle kunna skicka hela .asp filen altså även där när den kör kopplingen i början.
Om du inte vill posta offentligt kan du ju emaila den till patrik@datormaklarna.se
ADODB.recordset har en MaxRecords-property som är användbar.
Det är i allmänhet bäst att köra med recordset.open i stället för connection.execute. Mer lätthanterligt.
<%
<%titlebar = "Sök"%>
<!--#include virtual="/top.inc" -->
<%
' Öppna databasen och hämta alla produkter.
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=d:\dmab\internet.mdb"
MaxAntal = 20 ' Eller hämta från formuläret
ID = Request.QueryString("ArtikelID")
SQLStmt = "SELECT tabArt.ArtID, tabArt.Artikel, tabArt.ArtExkl, tabArt.Beskrivning, tabArt.TypID FROM tabArt WHERE tabArt.Artikel LIKE '%%" & Request.Form("searchstr") & "%%' AND (tabArt.Web = 1) AND tabArt.Artikel > " & ID & "ORDER BY tabArt.Artikel"
Set rsResultat = Server.CreateObject("ADODB.Recordset")
rsResultat.MaxRecords = MaxAntal
rsResultat.Open SQLStmt
Set MaxID = Conn.Execute(SQLStmt)
blablabla.....
Nu har du ett recordset som bara innehåller 20 rader, samt MaxID så att du kan kolla om det finns fler träffar att lista. Genom att skicka med det sista ID-numret till nästa sökning får du ju bara träffar som kommer efter den förr
Om du vill ha en sån däringa lista 1 2 3 4 5 6 7 osv., så kan du ju köra en sökning på allt, hämta COUNT, och dela det med 20. Heltalsdelen anger antalet "träffsidor" och du kan lätt hänga på deras respektive ID på url:arna.
Helt otestat förstås, eftersom jag jobbar med Mac just nu, men det borde funka.
/G
------------------
----------------------------
Gunnar Liljas - webbutvecklare
Leon Reklambyrå AB
Norrköping
"Post" är en querystring som bestämmer på vilken post "sidan" skall börja räkna från.
"mmx" bestämmer antalet poster på en "sida".
Här nedan har jag gett mxx värdet 10 som exempel.
<%
post = request.querystring("post")
mxx = 10 ' Antal poster per "sida".
SQLstmt = "SELECT artid, namn, titel, FROM artiklar ORDER BY namn;"
set objRec = objConn.execute(SQLstmt)
if objRec.eof then
response.write "Det finns tyvärr inga artiklar i den här kategorien."
else
antal = UBound(objRec.GetRows, 2) + 1
if cint(antal) > cint(mxx) then
response.write "<b>Sida</b> "
antalIter = antal / mxx
if antalIter - int(antalIter) > 0 then antalIter = int(antalIter)+1
for s = 1 to antalIter
if cint(post) = (s-1) * mxx then
%><% =s %> <%
else
%><a href="cd.asp?post=<% =(s-1) * mxx %>&mxx=<% =mxx %>&gid=<% =gid %>"><% =s %></a> <%
end if
next
end if
%>
...
<%
objRec.MoveFirst
if post > 1 then objRec.Move(post)
for i = 1 to mxx
if not objRec.eof then
%>
...
<%
objRec.MoveNext
end if
next
end if
%>
Det fungerar på alla områden utom att när jag har sökt på min produkt och fått min lista så listar den ju tex 15 produkter, sen kan man trycka på sida 2. Då listar den alla produkter i basen. Inte på samma sida utan den har kommit till sida 2 bara det att det har kommit 12 sidor istället för 2.
Jag listar min kod här:
<%titlebar = "Sök"%>
<!--#include virtual="/top.inc" -->
<%
post = request.querystring("post")
mxx = 15 ' Antal poster per "sida".
gid = Request.querystring("gid")
Set Connection = Server.CreateObject("ADODB.Connection")
Connection.Open "driver={Microsoft Access Driver (*.mdb)};dbq=d:\dmab\internet.mdb"
SQLstmt = "SELECT tabArt.ArtID, tabArt.Artikel, tabArt.ArtExkl, tabArt.Beskrivning, tabArt.TypID FROM tabArt WHERE tabArt.Artikel LIKE '%%" & Request.Form("searchstr") & "%%' AND (tabArt.Web = 1) ORDER BY tabArt.Artikel"
set RS = Connection.execute(SQLstmt)
if RS.eof then%>
<center><table border="0" width="100%" cellspacing="1" cellpadding="0">
<tr>
<td width="100%">Det finns tyvärr inga artiklar i den här kategorien.</td>
</tr>
<%else
antal = UBound(RS.GetRows, 2) + 1
if cint(antal) > cint(mxx) then
response.write "<b>Sida:</b> "
antalIter = antal / mxx
if antalIter - int(antalIter) > 0 then antalIter = int(antalIter)+1
for s = 1 to antalIter
if cint(post) = (s-1) * mxx then
%>
<% =s %>
<%
else
%>
<a href="/search/search.asp?post=<% =(s-1) * mxx %>&mxx=<% =mxx %>&gid=<% =gid %>"><font color="#000000"><% =s %></font></a> <%
end if
next
end if
%>
<center><table border="0" width="100%" cellspacing="1" cellpadding="0">
<tr>
<td width="272" bgcolor="#F40000"><strong><small><font face="Arial" color="#FFFFFF">Produkt</font></small></strong></td>
<td width="75" align="center" bgcolor="#F40000"><small><font face="Arial" color="#FFFFFF"><strong>á-Pris exkl.</strong></font></small></td>
<td width="75" align="center" bgcolor="#F40000"><small><font face="Arial" color="#FFFFFF"><strong>á-Pris inkl.</strong></font></small></td>
<td width="75" align="center" bgcolor="#F40000"><small><font face="Arial" color="#FFFFFF"><strong>Antal</strong></font></small></td>
</tr>
<br>
<%
RS.MoveFirst
if post > 1 then RS.Move(post)
for i = 1 to mxx
if not RS.eof then
%>
<%
Artinkl = FormatNumber(RS("ArtExkl")* 1.25,0)
j = j + 1
if j mod 2 then
rowColor = "CCCCCC"
else
rowColor = "DDDDDD"
end if
%>
<form method="POST" action="addsearch.asp" name=produkt>
<tr>
<td width="272" bgcolor="<%=rowColor %>"><strong><small><A HREF="JavaScript:beskrivning('../kategori/beskrivning.asp?besk=<%= RS("ArtID") %>')"><font face="Arial" color="#000000"><%= Server.HTMLEncode(RS("Artikel")) %></A></font></small></strong></td>
<td width="75" align=right bgcolor="<%=rowColor %>"><small><font face="Arial" color="#000000"><strong><%= FormatNumber(RS("ArtExkl"),0) %> :-</strong></font></small></td>
<td width="75" align=right bgcolor="<%=rowColor %>"><small><font face="Arial" color="#000000"><strong><%= Artinkl %> :-</strong></font></small></td>
<td width="75" align=right bgcolor="<%=rowColor %>"><input type="hidden" name="PaketID" value="<%= RS("ArtID") %>"><input type="text" name="Antal" size="2" value="1" maxlength=2><input id="submit1" src="../images/buyit.gif" border="0" type="image" WIDTH="20" HEIGHT="15">
</tr>
</form>
<%
RS.MoveNext
end if
next
end if
%>
</table>
</center>
<!--#include virtual="/bot.inc" -->