Avatar billede znuggle.com Nybegynder
18. november 2003 - 16:56 Der er 5 kommentarer og
1 løsning

Vis X antal indlæg pr. side

Hej..

Jeg har en kode, som skal gøre, at der bliver vist 10 bestemte indlæg og resten af indlæggene bliver så lagt på andre sider. En go' gammel paging. Men problemet er bare, at det ikke virker. Det er dette stykke kode, som den klager over:

strSQL = "Select * from Book limit " & start & "," & pagesize
Set rs = Conn.Execute(strSQL)

Resten af koden ser sådan ud:

<%
pagesize = "10"
this = Request.ServerVariables("SCRIPT_NAME")

page = Request.QueryString("page")
If page = "" Then
    page = 1
End if
start = (page - 1) * pagesize

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("db.mdb")
Conn.Open DSN

strSQL = "Select count(*) as antal from Book"
Set rs = Conn.Execute(strSQL)

total = rs("antal")

Set rs = Nothing

totalpages = (total / pagesize)

If totalpages Mod 1 <> 0 Then
    totalpages = Int(totalpages) + 1
End if

Response.Write "Side " & page & " af " & totalpages

strSQL = "Select * from Book limit " & start & "," & pagesize
Set rs = Conn.Execute(strSQL)

Do until rs.EOF
%>
<p>
<b>» Navn:</b>
<% If rs("Email") <> "" Then %>
<a href="mailto:<%=rs("Email")%>"><%=rs("Name")%></a>
<% Else %>
<%=rs("Name")%>
<% End If %>
<br>
<b>» Hjemmeside:</b>
<% If rs("HP") <> "" Then %>
<a href="
<%
If Not Left(rs("HP"),7) = "http://" Then
    Response.Write "http://" & rs("HP")
Else
    Response.Write rs("HP")
End If
%>
" target="_blank">
<%
If Not Left(rs("HP"),7) = "http://" Then
    Response.Write "http://" & rs("HP")
Else
    Response.Write rs("HP")
End If
%>
<% Else %>
Ikke oplyst
<% End If %>
</a><br>
<b>» Besked:</b><br>
<%=rs("Comment")%><br>
<font style="color: #C0C0C0;">» <%=rs("Date")%></font><br>
<% If Session("Admin") = "OK" Then %>
<b><a href="del.asp?id=<%=rs("ID")%>">Slet besked</a></b>
<% End If %>
</p>
<%
rs.MoveNext
Loop

Set rs = Nothing

Conn.Close
Set Conn = Nothing

Response.Write "G&aring; til side:"
For i = 1 to totalpages
Response.Write "&nbsp;<a href=""" & this & "?page=" & i & """>" & i & "</a>&nbsp;"
Next
%>

Den mener der er fejl i FROM-delsætningen (på engelsk: FROM Clause).
Er der nogen, der kan hjælpe?
Avatar billede eagleeye Praktikant
18. november 2003 - 17:04 #1
Access understytter ikke LIMIT som mySQL gør. Der er en som hedder TOP men den kan ikke bruges direkte på samme måde så man laver paging ved hjælp af recordset med Access se:
http://activedeveloper.dk/aspdigital/kapitel2/paging.asp
Avatar billede eagleeye Praktikant
18. november 2003 - 17:06 #2
eks med TOP som LIMIT. Start fra række x. Hent y rækker:

SQL = "SELECT TOP y * FROM (SELECT TOP x + y * FROM tabelnavn ORDER BY feltnavn) ORDER BY feltnavn DESC"


Det er nødvendigt at bruge DESC til sidst eller vil den altid vælger de Y første poster i tabellen. Ønsker man at få sorteret ASC må man lave endnu en subselect:

SQL = "SELECT * FROM (SELECT TOP y * FROM (SELECT TOP y + x * FROM tabelnavn ORDER BY id) ORDER BY id DESC) ORDER BY id;"
Avatar billede znuggle.com Nybegynder
18. november 2003 - 17:15 #3
Hmm, har prøvet at indsætte mine egne data, men har åbenbart ramt et reserveret ord. Kan du lige tjekke det igennem?

strSQL = "Select top y * from (select top x + y * from Book order by ID) order by ID desc"
Set rs = Conn.Execute(strSQL)
Avatar billede znuggle.com Nybegynder
18. november 2003 - 17:16 #4
Fejlmeddelelsen er:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][ODBC Microsoft Access-driver] SELECT-sætningen indeholder et reserveret ord eller argument, der er stavet forkert eller mangler, eller tegnsætningen er ikke korrekt.
Avatar billede eagleeye Praktikant
18. november 2003 - 17:18 #5
ja du skal jo skrive tal for x og y, lig som du har lavet med limit " & start & "," & pagesize

strSQL = "Select top " & pagesize & " * from (select top " & (start + pagesize) & " * from Book order by ID) order by ID desc"
Set rs = Conn.Execute(strSQL)
Avatar billede znuggle.com Nybegynder
18. november 2003 - 17:32 #6
Det virker!

Tak
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester