Just nu i M3-nätverket
Gå till innehåll

FOR loop


Grimnir

Rekommendera Poster

Hej! hoppas att någon är duktig på for loopar här på forumet

jag ska göra en produktsida med 9 st produkter på varje sida.. så jag har redan fixat ett paging system utan problem, sedan skall produkterna listas, och det är då som det blir lite trubbel...

scriptet listar bara de 9 första produkterna, och går inte vidare sedan..

här är scriptet.. hoppas ni kan se var felet ligger:)

 

For J = 0 to intRecordTotal
I = I + 1
If I > per * (page - 1) And I <= per * page Then
sImg=rs("MODELLNR")
response.write "<div><img src='http://www.clubintersport.se/Archive/Images/Products/"&sImg&"_medium.jpg'></div>" & vbNewLine 
rs.movenext
ElseIf I > per * page Then
J = intRecordTotal 'Exit For
End If
Next

 

Länk till kommentar
Dela på andra webbplatser

En For-loop för J men kontroll på I?

Jag blir inte helt klok på hur du tänkt. Men att börja loopen med I = I + 1 innebär ju att du bara får 1-9 och inte 0-9 som for-loopen ska köras.

 

I vilket fall - kör du med SQL page size osv behöver du väl bara göra följande för att få ut antalet sidor du angett som page size.

[color="#0000ff"]Do[/color] until RS.eof
---kod---
RS.movenext
[color="#0000ff"]Loop[/color]

 

Alternativt en For each item in RS ...

 

| Noisekiller |

Pengar betyder inte ett lyckligt liv men bekvämlighet i ett olyckligt.

 

[inlägget ändrat 2006-11-01 10:54:30 av NoiseKiller]

[inlägget ändrat 2006-11-01 10:55:05 av NoiseKiller]

Länk till kommentar
Dela på andra webbplatser

Hmm.. ja jag förstår vad du menar jag har nästan lyckats lösa problemet själv.. men bara nästan...

 

<%
while not rs.eof or rs.bof
For J = 0 to intRecordTotal
I = I + 1
If I > per * (page - 1) And I <= per * page Then
sImg=rs("MODELLNR")
response.write "<div><img src='http://www.clubintersport.se/Archive/Images/Products/"&sImg&"_medium.jpg'></div>" & vbNewLine 
rs.movenext
ElseIf I > per * page Then
J = intRecordTotal 'Exit For
End If
rs.movenext
Next
wend

nu går den vidare som den skall, men jag får fel på de två sista sidorna där scriptet säger att det saknas en aktuell post eller att rs.eof..?

 

jag förstår inte riktigt varför?

 

har du några förslag på nåt bättre paging system?.. jag känner att det här kanske inte är optimalt..

 

Länk till kommentar
Dela på andra webbplatser

Vad gör du med variabel I?

Om du har en page size på 10 så finns det väl bara 10 poster i recordsettet och på så vis behöver du själv inte räkna hur många du vill skriva ut..?

 

| Noisekiller |

Pengar betyder inte ett lyckligt liv men bekvämlighet i ett olyckligt.

 

Länk till kommentar
Dela på andra webbplatser

rs.PageSize=per 
rs.AbsolutePage=page
For i=1 To rs.PageSize
sImg=rs("MODELLNR")
' Övriga utskrifter i loopen
rs.MoveNext
If rs.EOF Then Exit For
Next

 

Länk till kommentar
Dela på andra webbplatser

Ok.. jag skall försöka besvara....

 

For J = 0 to intRecordTotal

lagrar antal records för att sidvisningen i paging funktionen skall bli korrekt.

i intRecordTotal har jag lagrat antal poster som finns i databasen.

 

I = I + 1

Stega upp ett snäpp

 

If I > per * (page - 1) And I <= per * page Then

om variabeln I är mindre än variabeln "per" så fortsätt...

 

sImg=rs("MODELLNR") 'hämta modellnumret ur databasen
response.write "<div><img src='http://www.clubintersport.se/Archive/Images/Products/"&sImg&"_medium.jpg'></div>" & vbNewLine 'skriv ut bilden
rs.movenext 'gå vidare till nästa

 

ElseIf I > per * page Then
J = intRecordTotal 'Exit For

om variabeln I blir mer än variabeln "per" så stanna....

 

 

Tja... nåt sånt !!

 

mvh

Christian

 

Länk till kommentar
Dela på andra webbplatser

Hej Anjnuna:)

 

Jag fick följande felmeddelande när jag testade din kod... kanske något som saknas i RS?

här är min connection

 

page = int(Request.QueryString("page"))

If page < 1 Or page = "" Then
page = 1
End If

per = int(Request.QueryString("per"))

If per < 1 Or per = "" Then
per = 1
End If
Set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open server.MapPath("produkter.mdb")

sSql="SELECT * FROM produkter"
sSQLCount="Select count(*) as sRecords from produkter"
set rs=conn.execute(sSQL)
Set rsCount=conn.execute(sSQLCount)
intRecordTotal=rsCount("sRecords")

 

Länk till kommentar
Dela på andra webbplatser

Jag fick följande felmeddelande när jag testade din kod... kanske något som saknas i RS?

Ja, om du ska använda paging så kan du inte öppna recordsetet på det där sättet.

 

Sidonot: Det Noisekiller nämnde om att bara ett visst antal records returneras när man sätter PageSize stämmer inte, det används bara för att kunna navigera till rätt plats med hjälp av AbsolutePage.

 

Öppna din connection på samma sätt som du gjort. För att öppna ditt recordset använder du:

Const adUseClient = 3
Const adOpenStatic = 3
Const adLockReadOnly = 1
Const adCmdText = &H0001

rs.CursorLocation = 3
sSql="SELECT * FROM produkter"
rs.Open sSql, conn, adOpenStatic, adLockReadOnly, adCmdText

 

Queryn du använder för att räkna antal poster kan du skippa helt. Antal poster får du ut (om du behöver detta värde, i loopen behöver du det inte längre) med

nCount=rs.RecordCount

 

Länk till kommentar
Dela på andra webbplatser

Hej Anjuna... ja det här gick ju som en dans =0)

 

men jag verkar ha tappat navigeringen mellan sidorna som var längst ner..

 

men annars känns det här bättre och mer stabilt än det förra!!

 

är det någon som har nåt förslag hur man stegar sig vidare till nästa sida??

 

mvh

Christian

 

[inlägget ändrat 2006-11-01 14:22:38 av Grimnir]

Länk till kommentar
Dela på andra webbplatser

Ok... det verkar inte hända mycket mer ... jag ger poäng till dig Anjuna för din hjälp med recordsettet... jag får se om jag kan klura ut hur jag fixar paging navigeringen..

 

tack

Christian

 

Länk till kommentar
Dela på andra webbplatser

Visste nästan att Anjuna skulle komma å slå mig på fingrarna så jag avvaktade. Börjar bli ringrostig när det gäller det där (om jag någonsin varit bra på det).

Men navigeringen borde ju funka. Se bara till att du definierar - och hämtar variabler för pagingen:

rs.PageSize=per

rs.AbsolutePage=page

dvs per (bör vara 10) och page (vilken sida som önskas)

Eller vad är det som lackat ur?

 

| Noisekiller |

Pengar betyder inte ett lyckligt liv men bekvämlighet i ett olyckligt.

 

Länk till kommentar
Dela på andra webbplatser

Doh - eforumfel när jag försöker komplettera mitt svar. Här kommer det i ett nytt inlägg i vilket fall.

 

För att skriva ut sidlänkningarna borde det bli...

nCount = RS.RecordCount
nSidor = nCount / per
For N = 1 to nSidor
  ---skriv ut länken med N som sidnummer---
Next

Eventuellt för du göra någon heltalsavrudning (uppåt) på nSidor ...

 

| Noisekiller |

Pengar betyder inte ett lyckligt liv men bekvämlighet i ett olyckligt.

 

Länk till kommentar
Dela på andra webbplatser

Tackar Noisekiller...

 

Nu funkar både navigeringen och pagingen....

 

jag skrev ut den som du sa Noisekiller, och lade till lite extra:)

 

nCount = RS.RecordCount
nSidor = nCount / per
For N = 1 to nSidor
If N = page Then
Response.Write N & " "
Else
Response.Write "<a href=""products.asp?per=" & per & "&page=" & N & """ class=""page"">" & N & "</a> "
End If
If page >= 2 Then
blnPrev = True
End If
If page <= cint((nCount / per) + 0.45) - 1 Then
blnNext = True
End If
Next
'Navigering next och previous
If blnPrev = True Then%>
<a href="products.asp?per=<%=per%>&page=<%=page - 1%>">Previous</a>
<%End If%>
<%If blnNext = True Then%>
<a href="products.asp?per=<%=per%>&page=<%=page + 1%>">Next</a>
<%End If%>

 

Tack och poäng till både Noisekiller och Anjuna...

 

mvh

Christian

 

PS. om allt går som det skall så kanske ni kan se produktlistningen på intersport.se om ett litet tag....DS.

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...