Hur får jag fäljande kod att fungera så att jag kan skriva ut posterna från databasen direkt med rs.SurveyArchive("blabla") istället för att ha det i arrayer?
Dim rsSurveyArchive, arrRecSet, intPage, intPostsPerPage, intFirstPost, intTotalPosts, intPages, intLastPost, strNext, i, strName, intNavStart, intNavEnd, n
SQL = "SELECT * FROM survey ORDER BY Id DESC"
Set rsSurveyArchive = ConnectToSurvey.Execute(SQL)
If Not rsSurveyArchive.EOF Then arrRecSet = rsSurveyArchive.GetRows()
If IsArray(arrRecSet) Then
intPostsPerPage = 3
If Len(Trim(Request.QueryString("page"))) > 0 Then intPage = CInt(Trim(Request.QueryString("page"))) Else intPage = 1
intFirstPost = (intPage - 1) * intPostsPerPage
intTotalPosts = UBound(arrRecSet, 2)
intPages = ((intTotalPosts)\intPostsPerPage) + 1
If intFirstPost + (intPostsPerPage - 1) >= UBound(arrRecSet, 2) Then
intLastPost = UBound(arrRecSet, 2)
Else
intLastPost = intFirstPost + (intPostsPerPage - 1)
strNext = True
End If
End If
For i = intFirstPost To intLastPost
strDate = arrRecSet(1,i)
strSurvey = arrRecSet(3,i)
Dim rsSurveyArchive, arrRecSet, intPage, intPostsPerPage, intFirstPost, intTotalPosts, intPages, intLastPost, _
strNext, i, strName, intNavStart, intNavEnd, n
SQL = "SELECT COUNT(*) FROM survey"
Set rsSurveyArchive = ConnectToSurvey.Execute(SQL)
If Not rsSurveyArcive.EOF Then
intTotalPosts = rsSurveyArchive(0)
If Len(Trim(Request.QueryString("page"))) > 0 Then intPage = CInt(Trim(Request.QueryString("page"))) Else intPage = 1
intPostsPerPage = 3
intFirstPost = (intPage - 1) * intPostsPerPage
SQL = "SELECT * FROM survey ORDER BY Id DESC LIMIT "&intFirstPost&", "&(intFirstPost + intPostsPerPage)
Set rsSurveyArchive = ConnectToSurvey.Execute(SQL)
While Not rsSurveyArchive.EOF Then
strDate = rsSurveyArchive.Fields("blabla")
strSurvey = rsSurveyArchive.Fields("blabla")
WEnd
Set rsSurveyArchive = Nothing
Set ConnectToSurvey = Nothing
intPages = ((intTotalPosts)\intPostsPerPage) + 1
If intFirstPost + (intPostsPerPage - 1) >= intTotalPosts Then
intLastPost = intTotalPosts
Else
intLastPost = intFirstPost + (intPostsPerPage - 1)
strNext = True
End If
Else
Response.Write "No records..."
End If
Fungerade inte det där mao?
Varför vill du inte ha det i arrays?
Du kan ju även nu, i ditt orginalscript, använda dig av typ:
response.write rsSurveyArchive("id")
om du så önskar.
(antar att du får köra en rsSurveyArchive.movefirst först.)
Det är det script som Palle erbjuder här på wF, men jag vill inte ha det i arrayer för då måste jag ändra så mycket annat som redan är kodat och klart.
Set objRS = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM survey ORDER BY id DESC"
objRS.Open strSQL, ConnectToSurvey, 3, 3
If NOT objRS.EOF Then
intPostsPerPage = 3
intTotalPosts = objRS.RecordCount
If Len(Trim(Request.QueryString("page"))) > 0 Then intPage = CInt(Trim(Request.QueryString("page"))) Else intPage = 1
intFirstPost = (intPage - 1) * intPostsPerPage
intPages = ((intTotalPosts)\intPostsPerPage) + 1
If intFirstPost + (intPostsPerPage - 1) >= intTotalPosts Then
intLastPost = intTotalPosts
Else
intLastPost = intFirstPost + (intPostsPerPage - 1)
strNext = True
End If
Do Until objRS.EOF OR intCount => intLastPost
intCount = intCount + 1
If intFirstPost > 0 Then
For i = 1 To intFirstPost
objRS.MoveNext
Loop
End If
strDate = objRS("date")
strSurvey = objRS("survey")
'O.s.v...
objRS.MoveNext
Loop
End If
objRS.Close : Set objRS = Nothing
Känns dock inte som det optimala sättet att göra det på. :l
Med följande kod blir det tre sidor att bläddra mellan. Men på den första visas på två poster, på den andra visas endast en post och på den sista sidan får jag ett felmeddelande som säger att en begärda åtgärden kräver en aktuell post. Koden verkar räkna fel...
Dim rsSurveyArchive
Set rsSurveyArchive = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * FROM survey ORDER BY Id DESC"
rsSurveyArchive.Open SQL, ConnectToSurvey, 3, 3
If Not rsSurveyArchive.EOF Then
intPostsPerPage = 3
intTotalPosts = rsSurveyArchive.RecordCount
If Len(Trim(Request.QueryString("page"))) > 0 Then intPage = CInt(Trim(Request.QueryString("page"))) Else intPage = 1
intFirstPost = (intPage - 1) * intPostsPerPage
intPages = ((intTotalPosts)\intPostsPerPage) + 1
If intFirstPost + (intPostsPerPage - 1) >= intTotalPosts Then
intLastPost = intTotalPosts
Else
intLastPost = intFirstPost + (intPostsPerPage - 1)
strNext = True
End If
Do Until rsSurveyArchive.EOF OR intCount => intLastPost
intCount = intCount + 1
If intFirstPost > 0 Then
For i = 1 To intLastPost
rsSurveyArchive.MoveNext
Next
End If
Vilken av navigeringarna använder du? Om du använder knapparna så skulle jag lösa det på det här sättet:
<%
If Request.QueryString("page") = "" OR NOT IsNumeric(Request.QueryString("page")) Then
intPage = 1
Else
intPage = CInt(Request.QueryString("page"))
End If
Set objRS = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM survey ORDER BY id DESC"
objRS.Open strSQL, ConnectToSurvey, 1, 3
If NOT objRS.EOF Then
objRS.AbsolutePage = intPage
objRS.PageSize = 3
Do Until objRS.EOF OR intCount => objRS.PageSize
intCount = intCount + 1
strDate = objRS("date")
strSurvey = objRS("survey")
'O.s.v...
objRS.MoveNext
Loop
If objRS.PageCount > 1 Then
If intPage > 1 Then
Response.Write("<button onclick=""parent.location.href='default.asp?page=';"" title="" Första ""> << </button>" & vbCrLf)
Response.Write("<button onclick=""parent.location.href='default.asp?page=" & intPage - 1 & "';"" title="" Backa ""> < </button>" & vbCrLf)
Else
Response.Write("<button disabled=""disabled""> << </button>" &vbCrLf)
Response.Write("<button disabled=""disabled""> < </button>" & vbCrLf)
End If
If objRS.PageCount < 5 Then intPages = objRS.PageCount : intStart = 1
If objRS.PageCount = 5 Then intPages = 5 : intStart = 1
If objRS.PageCount > 5 Then
If intPage > 5 Then
intPages = intPage : intStart = intPage - 5
Else
intPages = 5 : intStart = 1
End If
Else
intPages = objRS.PageCount : intStart = 1
End If
For i = intStart To intPages
If i = intPage Then
Response.Write("<button> <strong>" & i & "</strong> </button>" & vbCrLf)
Else
Response.Write("<button onclick=""parent.location.href='default.asp?page=" & i & "';"" title="" Sida " & i & " ""> " & i & " </button>" & vbCrLf)
End If
Next
If intPage < objRS.PageCount Then
Response.Write("<button onclick=""parent.location.href='default.asp?page=" intPage + 1 "';"" title="" Nästa ""> > </button>" & vbCrLf)
Response.Write("<button onclick=""parent.location.href='default.asp?page=" & objRS.PageCount & "';"" title="" Sista ""> >> </button>" & vbCrLf)
Else
Response.Write("<button disabled=""disabled""> > </button>" & vbCrLf)
Response.Write("<button disabled=""disabled""> >> </button>" & vbCrLf)
End If
End If
End If
objRS.Close : Set objRS = Nothing
Hoppas att det funkar som du vill, det gör det säkert inte, men man måste ju försöka. ;)
Jo, nog fungerar den som jag vill alltid. Men det är dock fortfarande så att det på första sidan bara visas 5 poster (de fem första i DBn), på andra sidan endast 1 post (den sista i DBn) och på sista sidan av de tre sidor som det blir, visas ingenting. Bara Nästa | Sista etc. Det finns totalt 15 poster.
Sedan undrar jag vilka parametrar från din kod jag ska använda för att kunna skriva ut att nu visas post 1 - 5 av totalt 15.