webForumDet fria alternativet

Jag river mig snart i tänderna! HJÄLP!

ASP

11 svar · 420 visningar · startad av Brimba

Medlem sedan dec. 19995 874 inlägg
Frågan#1

Hej!

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" -->

Tack på förhand!

Mvh
Patrik
aka Brimba

Medlem sedan dec. 1999707 inlägg
#2

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 %>&nbsp;&nbsp;<%
		else
			%><a href="cd.asp?post=<% =(s-1) * mxx %>&mxx=<% =mxx %>&gid=<% =gid %>"><% =s %></a>&nbsp;&nbsp;<%
		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

%>

------------------
/ Torbjörn Hansson

Medlem sedan dec. 19995 874 inlägg
#3

Verkar fungera dåligt för mig endå :(

Den säger

Sida
Microsoft VBScript runtime error '800a000b'

Division by zero

/search/search.asp, line 23

Rad 23 ser ut så här:

antalIter = antal / mxx

Mvh
Patrik
aka Brimba

Medlem sedan dec. 19995 874 inlägg
#4

Såg att du bodde i Kållered.
Är det kållered som ligger brevid Lindome?

Jag bor iaf i Lindome :|

Mvh
Patrik
aka Brimba

[Redigerat av Brimba den 21 dec 1999]

Medlem sedan dec. 19995 874 inlägg
#5

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

tack på förhand

Mvh
Patrik
aka Brimba

Medlem sedan dec. 19996 721 inlägg
#6

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

Medlem sedan dec. 19995 874 inlägg
#7

Den säger endå

ADODB.Recordset error '800a0e7d'

The application requested an operation on an object with a reference to a closed or invalid Connection object.

/search/search.asp, line 14

På rad 14 sstår det: rsResultat.Open SQLStmt

Mvh
Patrik
aka Brimba

Medlem sedan dec. 1999707 inlägg
#8

Ojsan, glömde av att berätta om en del saker:

"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
%>

------------------
/ Torbjörn Hansson

Medlem sedan dec. 19995 874 inlägg
#9

Tack för all hjälp! Jag har nu fått det att fungera!

Mvh
Patrik
aka Brimba

Medlem sedan dec. 19995 874 inlägg
#10

Tack för all hjälp! Jag har nu fått det att fungera!

Mvh
Patrik
aka Brimba

Medlem sedan dec. 19995 874 inlägg
#11

Hej!

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" -->

Mvh
Patrik
aka Brimba

Medlem sedan dec. 19995 874 inlägg
#12

Hej!
Jag löste det, jag listade ju alla produkter, var ju tvungen att dela upp dom. Ibland är man verkligen dum :e

Men men, tack!

Mvh
Patrik
aka Brimba

266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)