22. maj 2005 - 16:39Der er
35 kommentarer og 1 løsning
Lidt problemer med Paging
Hej eksperter,
Hvorfor får jeg følgende fejl i min kode: Linje 49 er rs.AbsolutePage = intPage ----------- ADODB.Recordset error '800a0cb3'
Current Recordset does not support bookmarks. This may be a limitation of the provider or of the selected cursortype.
/walid/pages/tagwall.asp, line 49
Sourcecode: -------------- intPage = Request("pagenumber") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If If Not (rs.BOF Or rs.EOF) Then rs.PageSize = 3 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount Do While Not rs.EOF And intRecCount > 0 intRecCount = intRecCount - 1 rs.MoveNext Loop End If rs.Close Set rs = Nothing
Response.Write "Side: " For intNum = 1 To intPageCount If intPage = intNum Then Response.Write " [" & "<b>" & intNum &"</b>" & "] " Else Response.Write "<a href=?page=6&pagenumber=" & intNum & ">" & intNum & "</a> " End If Next
SQL = "SELECT id, author, body, addeddate, ip, website, email, topic FROM tagwall" set RS = conn.execute(SQL)
intPage = Request("pagenumber") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If If Not (rs.BOF Or rs.EOF) Then rs.PageSize = 3 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount Do While Not rs.EOF And intRecCount > 0 intRecCount = intRecCount - 1 rs.MoveNext Loop End If rs.Close Set rs = Nothing
Response.Write "Side: " For intNum = 1 To intPageCount If intPage = intNum Then Response.Write " [" & "<b>" & intNum &"</b>" & "] " Else Response.Write "<a href=?page=6&pagenumber=" & intNum & ">" & intNum & "</a> " End If Next
Der er da noget helt galt Du sætter rs til at være resultatet fra din sql...altså får du dine rækker ud Derefter behandler du rs på en helt anden måde...som jeg ikke kan se nogen sammenhæng i
Hvad er det du ønsker? Du har en masse jeg intet forstår af denne her --- Do While Not rs.EOF And intRecCount > 0 intRecCount = intRecCount - 1 rs.MoveNext Loop --- den laver intet andet end tælle intRecCount ned Men intRecCount = rs.PageSize og rs.PageSize = 3 Men der findes ingen rs.PageSize Jeg kan skutte lure det du har prøvet lave? Ønsker du blot ganske normal paging? Så kan du jo bare lave din sql og så køre en løkke som tæller til din pagenumber Har du tre på hver side så benyt modolus 3 Jeg kan slet ikke se hvor alt det rs.pagesize , rs.absolutepage mm kommer ind henne?
pagingen bliver noget ala: ----- pagenumber = request.querystring("pagenumber")
SQL = "SELECT COUNT(*) as count FROM tagwall" set RS = conn.execute(SQL) antal_beskeder = RS("count") response.write("Beskeder: " &"<b>"& antal_beskeder &" <br></b>")
antal_beskeder_pr_side = 20 antal_sider = antal_beskeder/antal_beskeder_pr_side Response.Write "Side: " For i = 1 To antal_sider If i = pagenumber Then Response.Write " [" & "<b>" & i &"</b>" & "] " Else Response.Write "<a href=?page=6&pagenumber=" & i & ">" & i & "</a> " end If Next ---- Desuden skal du jo så kunne udskrive det aktuelle på den aktuelle side ala ---- SQL = "SELECT id, author, body, addeddate, ip, website, email, topic FROM tagwall" set RS = conn.execute(SQL) start = antal_beskeder_pr_side * (pagenumber - 1) count = 0 Do while not rs.eof and count < antal_beskeder_pr_side response.write rs("id") //osv osv alle udskrifterne her count = count + 1 rs.movenext loop
hov glemte at tælle op til start parametren i den sidste...sådan her --- SQL = "SELECT id, author, body, addeddate, ip, website, email, topic FROM tagwall" set RS = conn.execute(SQL) start = antal_beskeder_pr_side * (pagenumber - 1) count = 0 Do while not rs.eof and count < antal_beskeder_pr_side if start > 0 then start = start - 1 else response.write rs("id") //osv osv alle udskrifterne her count = count + 1 end if rs.movenext loop
SQL = "SELECT id, author, body, addeddate, ip, website, email, topic FROM tagwall" set RS = conn.execute(SQL)
intPage = Request("pagenumber") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If If Not (rs.BOF Or rs.EOF) Then rs.PageSize = 3 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount Do While Not rs.EOF And intRecCount > 0 intRecCount = intRecCount - 1 rs.MoveNext Loop End If rs.Close Set rs = Nothing
Response.Write "Side: " For intNum = 1 To intPageCount If intPage = intNum Then Response.Write " [" & "<b>" & intNum &"</b>" & "] " Else Response.Write "<a href=?page=6&pagenumber=" & intNum & ">" & intNum & "</a> " End If Next
Der er jo meget ;o) Men sådan her vil jeg tro ---- response.write("<table width='630' align='center' cellpadding='3' cellspacing='0'>") response.write("<tr>") response.write("<td height='23' align='center' valign='top' class='textheader'><a href='?page=1&mode=addmessage'>Tilføj besked</a></td>") response.write("</tr>") response.write("<tr>") response.write("<td>") response.write("</td>") response.write("</tr>") response.write("<tr>") response.write("<td align='center' valign='top' class='textnormal'>")
pagenumber = request.querystring("pagenumber") if pagenumber = "" then pagenumber = 1 end if SQL = "SELECT COUNT(*) as count FROM tagwall" set RS = conn.execute(SQL) antal_beskeder = RS("count") response.write("Beskeder: " &"<b>"& antal_beskeder &" <br></b>") antal_beskeder_pr_side = 20 antal_sider = antal_beskeder/antal_beskeder_pr_side Response.Write "Side: " For i = 1 To antal_sider If i&"" = pagenumber Then Response.Write " [" & "<b>" & i &"</b>" & "] " Else Response.Write "<a href=?page=6&pagenumber=" & i & ">" & i & "</a> " end If Next
'Beskedsystemets administrations modul. Vises kun hvis man er logget ind! if session("login") = "true" then response.write("<font color='CCCCCC'>IP-adresse: "& RS("ip") &"</font>") response.write(" ") response.write(" ") response.write("<a href='?page=6&mode=delete&id=" & RS("id") & "'>Slet besked</a>") response.write(" ") response.write("<font color='#111111'>|<fon/t>") response.write(" ") response.write("<a href='?page=6&mode=ban&ip=" & RS("ip") & "'>Ban</a>") response.write(" ") response.write(" ") end if
if not RS("website") = "" then response.write("") response.write("<a href=' " & RS("website") & " ' >") response.write("<img src='gfx/icons/website.gif' alt='Besøg "& RS("author") & "s website'"" width='16' height='16' border='0'></a>") response.write(" ") response.write(" ") end if
if not RS("email") = "" then response.write("") response.write("<a href='mailto:" & RS("email") & " ' >") response.write("<img src='gfx/icons/mail.gif' alt='Skriv en e-mail til "& RS("author") &"'"" width='16' height='16' border='0'></a>") end if
response.write("</td>") response.write("</tr>") response.write("</table>") response.write("</td>") response.write("</tr>") response.write("</table>") count = count + 1 end if rs.movenext loop end if ---
Jeg vil generelt foreslå dig ikke lave så meget response.write men i stedet afslutte din asp kode.. eksempel i stedet for: ----- if not RS("email") = "" then response.write("") response.write("<a href='mailto:" & RS("email") & " ' >") response.write("<img src='gfx/icons/mail.gif' alt='Skriv en e-mail til "& RS("author") &"'"" width='16' height='16' border='0'></a>") end if ----- så sådan her ----- if not RS("email") = "" then %> <a href="mailto:<%=RS("email")%>"><img src="gfx/icons/mail.gif" alt="Skriv en e-mail til <%=RS("author")%>" width="16" height="16" border="0"></a> <% end if ----- Det er selvfølgelig en smags sag men det gør at man slipper for at escape gåseøjne mm
gør det loading tiden hurtigere? Det giver mig nu ingen mening For alt som står imellem <% og %> det skal tolkes på asp serveren, og alt som ikke står imellem. Ja det spytter den blot videre - det er serveren helt ligeglad med Så det burde logisk set være hurtigere på den anden måde Men anyway...smagssag
Håber det andet virker rimeligt...vil jeg umiddelbart tro det gør...men altid svært når man ikke kan teste det med det samme ;o)
Nu virker det fint. Mange tak. Men jeg har stadig 2 ønsker mere.
Hvis der kune ligger 1 besked i databasen og visninger er sat til 20. Så skal der stadig stå [1] istedet for ingen ting.
Når man går ind på min side står der bare 1 2 3 4 5 osv. Det skal være sådan at når man går ind på siden, så skal 1 starte med at se aktiv ud. Altså [1] istedet for 1
Det første burde denne her allerede tage højde for: --- if pagenumber = "" then pagenumber = 1 end if --- For hvis du går direkte ind på siden.asp uden den er siden.asp?pagenumber=1 Så vil pagenumber = "" og derfor blive sat til 1... hmm så det burde altså virke
dvs det var det andet ;o) Det med hvis der er færre beskeder i databasen end det antal der er sat bør kunne løses ved at udskifte følgende: ---- antal_beskeder_pr_side = 20 antal_sider = antal_beskeder/antal_beskeder_pr_side Response.Write "Side: " For i = 1 To antal_sider If i&"" = pagenumber Then Response.Write " [" & "<b>" & i &"</b>" & "] " Else Response.Write "<a href=?page=6&pagenumber=" & i & ">" & i & "</a> " end If Next ---- til følgende ---- antal_beskeder_pr_side = 20 antal_sider = antal_beskeder/antal_beskeder_pr_side Response.Write "Side: " if antal_sider = 0 then Response.Write " [" & "<b>" & 1 &"</b>" & "] " end if For i = 1 To antal_sider If i&"" = pagenumber Then Response.Write " [" & "<b>" & i &"</b>" & "] " Else Response.Write "<a href=?page=6&pagenumber=" & i & ">" & i & "</a> " end If Next
underligt prøv lave sådan et lille kringlet fiks her så ret --- pagenumber = request.querystring("pagenumber") if pagenumber = "" then pagenumber = 1 end if --- til --- pagenumber = "" pagenumber = pagenumber & request.querystring("pagenumber") if pagenumber = "" then pagenumber = 1 end if
En anden ting er jo så at der ikke bliver testet mere for om pagenumber er et tal...så hvis man skriver http://www.helsingorminiz.dk/walid/?page=1&pagenumber=hej Så får man fejl... Men altså, det er jo ikke mere alvorligt end folk må tænke sig om vil jeg mene :o)
Besynderligt Prøv udskrive nogle af variablene så vi kan se hvad de er, altå --- pagenumber = request.querystring("pagenumber") if pagenumber = "" then pagenumber = 1 end if response.write "pagenumber er "&pagenumber SQL = "SELECT COUNT(*) as count FROM tagwall" set RS = conn.execute(SQL) antal_beskeder = RS("count") response.write "antal_beskeder er "&antal_beskeder response.write("Beskeder: " &"<b>"& antal_beskeder &" <br></b>") antal_beskeder_pr_side = 20 antal_sider = antal_beskeder/antal_beskeder_pr_side response.write "antal_sider er "&antal_sider" Response.Write "Side: " For i = 1 To antal_sider If i&"" = pagenumber Then Response.Write " [" & "<b>" & i &"</b>" & "] " Else Response.Write "<a href=?page=6&pagenumber=" & i & ">" & i & "</a> " end If Next
for jeg mener hvis antal_beskeder er 2 antal_beskeder_pr_side er 20 så må antal_sider jo være 2/20 = 0 --- der manglede i øvrigt mit fix...en copy paste fejl sorry --- pagenumber = request.querystring("pagenumber") if pagenumber = "" then pagenumber = 1 end if response.write "pagenumber er "&pagenumber SQL = "SELECT COUNT(*) as count FROM tagwall" set RS = conn.execute(SQL) antal_beskeder = RS("count") response.write "antal_beskeder er "&antal_beskeder response.write("Beskeder: " &"<b>"& antal_beskeder &" <br></b>") antal_beskeder_pr_side = 20 antal_sider = antal_beskeder/antal_beskeder_pr_side response.write "antal_sider er "&antal_sider" Response.Write "Side: " if antal_sider = 0 then Response.Write " [" & "<b>" & 1 &"</b>" & "] " end if For i = 1 To antal_sider If i&"" = pagenumber Then Response.Write " [" & "<b>" & i &"</b>" & "] " Else Response.Write "<a href=?page=6&pagenumber=" & i & ">" & i & "</a> " end If Next
http://www.helsingorminiz.dk/walid/?page=1 Mangler stadig lige noget hjælp. Hvis antal_beskeder_pr_side er sat til = 15, så vil jeg gerne have et der stadig står Side: [1] istedet for bare Side:
Og så vil jeg gerne have at værdien i pangenumber bliver sat til 1, når jeg åbner min ?page=1 så den altid kommer til at se sådan her ud når jeg starter den:
[1] 2 3 4 5 6...
---- Sorucecode ---- pagenumber = request.querystring("pagenumber") if pagenumber = "" then pagenumber = 1 end if SQL = "SELECT COUNT(*) as count FROM tagwall" set RS = conn.execute(SQL) antal_beskeder = RS("count") response.write("Beskeder: " &"<b>"& antal_beskeder &" <br></b>") antal_beskeder_pr_side = 15 antal_sider = antal_beskeder/antal_beskeder_pr_side Response.Write "Side: " if antal_sider = 0 then Response.Write " [" & "<b>" & 1 &"</b>" & "] " end if For i = 1 To antal_sider If i&"" = pagenumber Then Response.Write " [" & "<b>" & i &"</b>" & "] " Else Response.Write "<a href=?page=1&pagenumber=" & i & ">" & i & "</a> " end If Next
SQL = "SELECT id, author, body, addeddate, addedtime, ip, website, email, topic FROM tagwall ORDER BY addeddate DESC; " set RS = conn.execute(SQL) start = antal_beskeder_pr_side * (pagenumber - 1) count = 0
'Starter selve tabellen hvori beskeden ligger!
If RS.EOF then response.write("Ingen beskeder fundet i databasen") else do while not RS.EOF and count < antal_beskeder_pr_side if start > 0 then start = start - 1 else
If blnBGColor = True Then strBGColor = "#EFF7FF" blnBGColor = False Else strBGColor = "#F8F8F8" blnBGColor = True End If
.....efterfulgt af alt mit udskrivning fra databasen
ok jeg skal lige være med..troede din querystring hed "pagenumber" og ikke "page" så skal du rette følgende linje -- pagenumber = request.querystring("pagenumber") -- til -- pagenumber = request.querystring("page")
Jeg er stadig ikke helt med denne her indikerer jo at du både vil bruge "page" og "pagenumber" - Response.Write "<a href=?page=1&pagenumber=" & i & ">" & i & "</a> " - så du kan få et link som hedder fx http://www.helsingorminiz.dk/walid/?page=1&pagenumber=3
så jeg tror ikke du skal rette det som i min kommentar 19:38:46 Hvis du altid vil starte med [1] hvis ?page=1 ... så skifter den jo ikke side når pagenumber=2 ...kan du følge mig? Der skal vel kun være een variabel som fortæller hvilken side man er på Ellers har jeg misforstået noget
prøv rette denne antal_sider = antal_beskeder/antal_beskeder_pr_side til antal_sider = round(antal_beskeder/antal_beskeder_pr_side) Jeg ville tro divisionen burde give et heltal...men siden den ikke skriver noget så må den jo give en brøk eller andet
du kan også rette denne her --- if pagenumber = "" then pagenumber = 1 end if -- til -- if pagenumber = "" then pagenumber = "1" end if -- For så burde den fanges i loopet
Må lige have fat i dig igen, selvom spm. er lukket!
Det funker ikke helt alligevel. Hvis der er 23 beskeder i gæstebogen, så viser den kun 20, indtil, den er kommet op på 30 beskeder.
Altså den mangler at vise den sidste side, med de resterende beskeder!
----- pagenumber = request.querystring("pagenumber") if pagenumber = "" then pagenumber = "1" end if SQL = "SELECT COUNT(*) as count FROM messageboard" set RS = conn.execute(SQL) antal_beskeder = RS("count") response.write("Beskeder: " &"<b>"& antal_beskeder &" <br></b>") antal_beskeder_pr_side = 10 antal_sider = round(cint(antal_beskeder)/cint(antal_beskeder_pr_side)) Response.Write "Side: " if antal_sider = 0 then Response.Write " [" & "<b>" & 1 &"</b>" & "] " end if For i = 1 To antal_sider If i&"" = pagenumber Then Response.Write " [" & "<b>" & i &"</b>" & "] " Else Response.Write "<a href=?page=1&pagenumber=" & i & ">" & i & "</a> " end If Next
Dvs den viser kun 2 sider og burde vise 3 det er garanteret pga denne her antal_sider = round(cint(antal_beskeder)/cint(antal_beskeder_pr_side)) Jeg kan huske jeg før har ledt efter en Ceil eller Floor funktion i VBscript uden held Problemet er jo at Round afrunder tallet op eller ned Hvis du har 23 beskeder så haves Round(2,3) = 2 sider Hvis du har 26 beskeder så haves Round(2,6) = 3 sider Det må kunne fikses ved at tage modulus. Hvis resten ved division er forskellig fra nul så skal der laves en ekstra side. Sådan her vil jeg tro.. --- pagenumber = request.querystring("pagenumber") if pagenumber = "" then pagenumber = "1" end if SQL = "SELECT COUNT(*) as count FROM messageboard" set RS = conn.execute(SQL) antal_beskeder = RS("count") response.write("Beskeder: " &"<b>"& antal_beskeder &" <br></b>") antal_beskeder_pr_side = 10 rest = cint(cint(antal_beskeder) Mod cint(antal_beskeder_pr_side)) antal_sider = round(cint(antal_beskeder)/cint(antal_beskeder_pr_side)) if rest > 0 then antal_sider = antal_sider + 1 end if Response.Write "Side: " if antal_sider = 0 then Response.Write " [" & "<b>" & 1 &"</b>" & "] " end if For i = 1 To antal_sider If i&"" = pagenumber Then Response.Write " [" & "<b>" & i &"</b>" & "] " Else Response.Write "<a href=?page=1&pagenumber=" & i & ">" & i & "</a> " end If Next
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.