Avatar billede george Nybegynder
12. oktober 2002 - 10:39 Der er 21 kommentarer og
1 løsning

Paging af sider fra db.

Jeg har et script hvor jeg bruge "tilbage" og "næste" for hver 5 poster jeg henter i min DB. Men jeg får følgende fejl.

ADODB.Recordset error '800a0cb3'

Current Recordset does not support bookmarks. This may be a limitation of the provider or of the selected cursortype.

/new_site/main.asp, line 40

Starten af min kode ser således ud :

    Set Conn = Server.CreateObject("ADODB.Connection")
    strConnect = "DRIVER={SQL Server}; SERVER=(local); DB=Intranet"
    Conn.Open strConnect, "?", "?"

    SQL = "SELECT * FROM tblnyheder where Status = 1 AND forside = 1 ORDER BY id desc"
    Set RS = Conn.Execute(SQL)
%>

<body background="/intranet/RSPics/menuback.jpg" topmargin="0" leftmargin="0">

<Table style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0" width="100%" border="0">
    <tr>
        <td width="75%" VAlign="top">


<%

intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If

If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 5
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  'Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p>"
  Do While Not rs.EOF And intRecCount > 0

Fejlen kommer i linjen :

rs.AbsolutePage = intPage

Er der nogen der kan se hvad der er galt ?
Avatar billede n!nja Nybegynder
12. oktober 2002 - 10:44 #1
Måske der er noget du kan bruge her: http://activedeveloper.dk/aspdigital/kapitel2/paging.asp
Avatar billede george Nybegynder
12. oktober 2002 - 10:52 #2
Det er den kode jeg bruger.
Avatar billede exp-ralle Nybegynder
12. oktober 2002 - 10:58 #3
Prøv dette:

Set Conn = Server.CreateObject("ADODB.Connection")
    strConnect = "DRIVER={SQL Server}; SERVER=(local); DB=Intranet"
    Conn.Open strConnect, "?", "?"

    SQL = "SELECT * FROM tblnyheder where Status = 1 AND forside = 1 ORDER BY id desc"
  Set rs = Server.CreateObject("ADODB.Recordset")
  rs.Open(SQL), Conn, 1
%>

<body background="/intranet/RSPics/menuback.jpg" topmargin="0" leftmargin="0">

<Table style="border-collapse: collapse" bordercolor="#111111" cellpadding="0" cellspacing="0" width="100%" border="0">
    <tr>
        <td width="75%" VAlign="top">


<%

intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If

If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 5
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  'Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p>"
  Do While Not rs.EOF And intRecCount > 0

Fejlen kommer i linjen :

rs.AbsolutePage = intPage
Avatar billede coltau Juniormester
12. oktober 2002 - 11:03 #4
Det ser ud til at det er recordsettet der ikke understøtter ...

I stedet for disse linier :

SQL = "SELECT * FROM tblnyheder where Status = 1 AND forside = 1 ORDER BY id desc"
Set RS = Conn.Execute(SQL)

kan du prøve dem her :

Set RS = Server.CreateObject ("ADODB.Recordset")
RS.CursorLocation = 3 ' adUseClient / 2 = adUseServer
RS.CursorType = 3 ' adOpenStatic
RS.CacheSize = 3
RS.Open SQL, Conn, , , &H0001 ' adCmdText

Så skulle der være understøttelse for AbsokutePage mv.
Avatar billede exp-ralle Nybegynder
12. oktober 2002 - 11:04 #5
Du kan prøve at kigge lidt på denne forside fra en tagwall, den bruger paging:

<html>

<head>
<title>Tagwall</title>
<link rel="stylesheet" href="style.css">
</head>

<body>
<b>Tagwall</b> | <a href="tilfoj.asp">Tilføj besked</a> | <%
If Session("login") = "ok" Then
Response.Write "<a href='Admin/admin.asp'>Admin</a><br><br>"
Else
Response.Write "<a href='Admin/default.asp'>Admin</a><br><br>"
End if
%>
<%

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

strSQL = "Select * from Tagwall order by Id desc"

Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open(strSQL), Conn, 1

Dim Side
Side = Trim(Request("Side"))

If NOT rs.EOF Then
If Side = "" Then
Side = 1
Elseif Side <= 0 Then
Response.Redirect "default.asp"
End if

Else

Side = 0

End if

rs.PageSize = 10

If NOT rs.EOF Then
rs.AbsolutePage = CLng(Side)
Raekke = 0
End if

If rs.EOF Then
If CLng(Side) > CLng(rs.PageCount) Then
Response.Write "Siden kunne ikke findes...<br><br>"
Response.Write "<a href='default.asp?Side=" & CLng(rs.PageCount) & "'><b>Sidste side</b></a>"
Elseif CLng(Side) = 1 Then
Response.Write "<i>Ingen beskeder</i>"
Else
Response.Write "<i>Ingen beskeder</i>"
End if

Else

Do

Dim Besked, Hjemmeside
Besked = rs("Besked")
Besked = Replace(Besked, vbCrLf, "<br>")
Hjemmeside = rs("Hjemmeside")

Response.Write "<b>Navn:</b> " & rs("Navn") & "<br>"
If rs("Email") = "Ingen e-mail" Then
Response.Write "<b>E-mail:</b> " & "<i>Ingen e-mail</i>" & "<br>"
Else
Response.Write "<b>E-mail:</b> " & "<a href='mailto:" & rs("Email") & "'>" & rs("Email") & "</a>" & "<br>"
End if
If Hjemmeside = "Ingen hjemmeside" Then
Response.Write "<b>Hjemmeside:</b> " & "<i>Ingen hjemmeside</i>" & "<br>"
Elseif NOT Left(LCase(Hjemmeside), 7) = "http://" Then
Response.Write "<b>Hjemmeside:</b> " & "<a href='http://" & Hjemmeside & "' target='_blank'>" & "http://" & Hjemmeside & "</a>" & "<br>"
Else
Response.Write "<b>Hjemmeside:</b> " & "<a href='" & Hjemmeside & "' target='_blank'>" & Hjemmeside & "</a>" & "<br>"
End if
Response.Write "<b>Dato:</b> " & rs("Dato") & "<br>"
Response.Write "<b>Besked:</b><br><br>" & Besked & "<br><br><br>"

Raekke = Raekke + 1
rs.MoveNext

Loop While Not rs.EOF AND Raekke < rs.PageSize

If CLng(Side) > 1 AND CLng(Side) < CLng(rs.PageCount) Then
Response.Write "<a href='" & Request.ServerVariables("SCRIPT_NAME") & "?Side=" & Side - 1 & "'><b>Forrige side</b></a> | "
Response.Write "<a href='" & Request.ServerVariables("SCRIPT_NAME") & "?Side=" & Side + 1 & "'><b>Næste side</b></a>"
Elseif CLng(Side) > 1 Then
Response.Write "<a href='" & Request.ServerVariables("SCRIPT_NAME") & "?Side=" & Side - 1 & "'><b>Forrige side</b></a>"
Elseif CLng(Side) < CLng(rs.PageCount) Then
Response.Write "<a href='" & Request.ServerVariables("SCRIPT_NAME") & "?Side=" & Side + 1 & "'><b>Næste side</b></a>"
End If

End if

Conn.Close
Set Conn = Nothing

%>

</body>

</html>
Avatar billede george Nybegynder
12. oktober 2002 - 11:24 #6
Har prøvet din løsning coltau, men den kommer med følgende fejl :

ADODB.Recordset error '800a0bb9'

Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another.

/new_site/main.asp, line 27
Avatar billede exp-ralle Nybegynder
12. oktober 2002 - 11:24 #7
George kan vi ikke få noget respons?
Avatar billede exp-ralle Nybegynder
12. oktober 2002 - 11:24 #8
Hov  undskyld george så ikke du havde skrevet...
Avatar billede exp-ralle Nybegynder
12. oktober 2002 - 11:25 #9
Prøv min løsning george den virker fint i min tagwall.
Avatar billede exp-ralle Nybegynder
12. oktober 2002 - 11:50 #10
Virker det george?
Avatar billede george Nybegynder
12. oktober 2002 - 11:53 #11
Jeg tror Coltau er inde på noget af det rigtig med AbsolutePage
Avatar billede george Nybegynder
12. oktober 2002 - 11:54 #12
Jeg får samme fejl som ved Coltau's kode.
Avatar billede george Nybegynder
12. oktober 2002 - 11:56 #13
Jeg bruger en MSSQL 7.0 DB hvis det skulle betyde noget.
Avatar billede exp-ralle Nybegynder
12. oktober 2002 - 12:06 #14
Aaahhh... så tror jeg ikke man laver paging på samme måde...
Ved ikke lige hvordan man gør her...
Avatar billede eagleeye Praktikant
12. oktober 2002 - 12:59 #15
Det er det samme metode det er lige gyldigt hvilken database du bruger hvis du bruger koden fra dette eks:
http://activedeveloper.dk/aspdigital/kapitel2/paging.asp

Det er nemlig paging af recordset... Du skal dog som Coltau skriver i stedet for denne linie:
Set RS = Conn.Execute(SQL)

Skal du skriver disse to linier:

Set Rs = Server.CreateObject("ADODB.RecordSet")
Rs.Open SQL, Conn, 1
Avatar billede eagleeye Praktikant
12. oktober 2002 - 13:00 #16
Du skal også åbne for connection til databasen som du gør i din kode, dog ved jeg ikke hvad du mener med "?", "?" i Conn.Open linien?????

strConnect = "DRIVER={SQL Server}; SERVER=(local); DB=Intranet"
Conn.Open strConnect, "?", "?"

Jeg ville meene det skulle være:
strConnect = "DRIVER={SQL Server}; SERVER=(local); DB=Intranet"
Conn.Open strConnect
Avatar billede exp-ralle Nybegynder
12. oktober 2002 - 19:04 #17
Eagleeye ---> Hvis man bruger MySQL i ASP er det så ikke noget med at man skal bruge Limit funktionen i stedet for?

Det har selvfølgelig ikke noget med MSSQL at gøre men du skriver jo "Det er det samme metode det er lige gyldigt hvilken database du bruger hvis du bruger koden fra dette eks:"
Avatar billede eagleeye Praktikant
12. oktober 2002 - 20:10 #18
Denne metode http://activedeveloper.dk/aspdigital/kapitel2/paging.asp kan anvendes til alle typer databaser fordi det er paging af recordset. Så det eneste som er forskelligt fra DB til DB er conntion-strengen.

Jo det er rigtigt, MySQL har en indbygget en fantastisk SQL kommando Limit, som virkerlig er god til eksvis Paging se eks:
http://activedeveloper.dk/aspdigital/2001112301.asp

Fordelen ved MySQL limit er at man kun hendter de data som er nødvendigt til at udskrive den side man er kommet til. Ved Paging af recordset hendter man faktsik alle alle siderne og så bruger man recordset til at udregne hvilken side man skal udskrive.
Avatar billede george Nybegynder
13. oktober 2002 - 17:21 #19
Undskyld ventetiden skulle desværre besøg mine forældre.

Jeg har ved hjælp af eagleeye's kode nu fået siden til at vise 5 poster af gangen, men jeg kan ikke bladre frem og tilbage.

"?" "?" er bare fordi I ikke skulle se Username og Password.
Avatar billede george Nybegynder
13. oktober 2002 - 17:35 #20
Glem det med at jeg ikke kan bladre frem og tilbage, havde sat tallet for højt, der var slet ikke så mange poster i basen. Så det virker perfekt.

Tak for hjælpen til alle.

Jeg vil mene at eagleeye fortjener point'ne da det var den løsning der virkede.
Avatar billede george Nybegynder
13. oktober 2002 - 17:39 #21
Sådan kom den færdige koden til at se ud :

<%

intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If

If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 5
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  'Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p>"
  Do While Not rs.EOF And intRecCount > 0
%>

Html kode til at vise siden

<%
  intRecCount = intRecCount - 1
  rs.MoveNext
  Loop
End If
rs.Close
Set rs = Nothing
Set objFS = Nothing

If intPage > 1 Then
  Response.Write "<a href=main.asp?page=" & intPage - 1 & "><FONT COLOR=Black SIZE=2 FACE=Verdana, Arial, Helvetica>Tilbage</FONT></a>"
Else
  Response.Write "<FONT COLOR=Black SIZE=2 FACE=Verdana, Arial, Helvetica>Tilbage</FONT>"
End If

Response.Write "<IMG SRC=../image/sp.gif WIDTH=110 HEIGHT=1 ALIGN=BOTTOM>"

If intRecCount = 0 And Cint(intPage) < Cint(intPageCount) Then
        Response.Write "<a href=main.asp?page=" & intPage + 1 & "><FONT COLOR=Black SIZE=2 FACE=Verdana, Arial, Helvetica>N&aelig;ste</FONT></a>"
Else
  Response.Write "<FONT COLOR=Black SIZE=2 FACE=Verdana, Arial, Helvetica>N&aelig;ste</FONT>"
End If
%>
Avatar billede george Nybegynder
13. oktober 2002 - 17:41 #22
Jeg prøver lige en gang til.

Sådan kom den færdige kode til at se ud:

<%

Set Conn = Server.CreateObject("ADODB.Connection")
strConnect = "DRIVER={SQL Server}; SERVER=(local); DB=Intranet"
'Conn.Open strConnect
Conn.Open strConnect, "web", "webuser"
Set Rs = Server.CreateObject("ADODB.RecordSet")
SQL = "SELECT * FROM tblnyheder where Status = 1 AND forside = 1 ORDER BY id desc"
Rs.Open SQL, Conn, 1

intPage = Request("page")
If isNumeric(intPage) = False Or intPage < 1 Then
  intPage = 1
End If

If Not (rs.BOF Or rs.EOF) Then
  rs.PageSize = 5
  rs.AbsolutePage = intPage
  intRecCount = rs.PageSize
  intPageCount = rs.PageCount
  'Response.Write "<p><b>Side " & intPage & " af " & intPageCount & "</b></p>"
  Do While Not rs.EOF And intRecCount > 0
%>

Html kode til at vise siden

<%
  intRecCount = intRecCount - 1
  rs.MoveNext
  Loop
End If
rs.Close
Set rs = Nothing
Set objFS = Nothing

If intPage > 1 Then
  Response.Write "<a href=main.asp?page=" & intPage - 1 & "><FONT COLOR=Black SIZE=2 FACE=Verdana, Arial, Helvetica>Tilbage</FONT></a>"
Else
  Response.Write "<FONT COLOR=Black SIZE=2 FACE=Verdana, Arial, Helvetica>Tilbage</FONT>"
End If

Response.Write "<IMG SRC=../image/sp.gif WIDTH=110 HEIGHT=1 ALIGN=BOTTOM>"

If intRecCount = 0 And Cint(intPage) < Cint(intPageCount) Then
        Response.Write "<a href=main.asp?page=" & intPage + 1 & "><FONT COLOR=Black SIZE=2 FACE=Verdana, Arial, Helvetica>N&aelig;ste</FONT></a>"
Else
  Response.Write "<FONT COLOR=Black SIZE=2 FACE=Verdana, Arial, Helvetica>N&aelig;ste</FONT>"
End If
%>
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