webForumDet fria alternativet

Ta bort array..?

17 svar · 388 visningar · startad av bigsky

bigskyMedlem sedan maj 2002821 inlägg
#1

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)
LR^evil.sidMedlem sedan maj 2002560 inlägg
#2

Så kanske... Har inte testat

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
bigskyMedlem sedan maj 2002821 inlägg
#3

Något annat förslag, någon?

solbulleMedlem sedan mars 20015 287 inlägg
#4

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.)

bigskyMedlem sedan maj 2002821 inlägg
#5

Microsoft OLE DB Provider for ODBC Drivers fel '80040e14'

[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel i ORDER BY-instruktion

SebbeMedlem sedan jan. 20032 285 inlägg
#6

Vad är det du vill göra med koden? Skulle kanske vara lite lättare att få något sammanhang i det då. Är det ett paging-script eller?

bigskyMedlem sedan maj 2002821 inlägg
#7

Jajamen.

bigskyMedlem sedan maj 2002821 inlägg
#8

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.

SebbeMedlem sedan jan. 20032 285 inlägg
#9

Kanske såhär då?

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

bigskyMedlem sedan maj 2002821 inlägg
#10

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
SebbeMedlem sedan jan. 20032 285 inlägg
#11

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 "">&nbsp;<<&nbsp;</button>" & vbCrLf)
      Response.Write("<button onclick=""parent.location.href='default.asp?page=" & intPage - 1 & "';"" title="" Backa "">&nbsp;<&nbsp;</button>" & vbCrLf)
    Else
      Response.Write("<button disabled=""disabled"">&nbsp;<<&nbsp;</button>" &vbCrLf)
      Response.Write("<button disabled=""disabled"">&nbsp;<&nbsp;</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>&nbsp;<strong>" & i & "</strong>&nbsp;</button>" & vbCrLf)
      Else
        Response.Write("<button onclick=""parent.location.href='default.asp?page=" & i & "';"" title="" Sida " & i & " "">&nbsp;" & i & "&nbsp;</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 "">&nbsp;>&nbsp;</button>" & vbCrLf)
      Response.Write("<button onclick=""parent.location.href='default.asp?page=" & objRS.PageCount & "';"" title="" Sista "">&nbsp;>>&nbsp;</button>" & vbCrLf)
    Else
      Response.Write("<button disabled=""disabled"">&nbsp;>&nbsp;</button>" & vbCrLf)
      Response.Write("<button disabled=""disabled"">&nbsp;>>&nbsp;</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. ;)

bigskyMedlem sedan maj 2002821 inlägg
#12

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.

SebbeMedlem sedan jan. 20032 285 inlägg
#13

Den här koden funkar för mig när jag testar! :D

<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("test.mdb")

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 test"
objRS.Open strSQL, objConn, 1, 3

If NOT objRS.EOF Then
  objRS.PageSize = 3
  objRS.AbsolutePage = intPage

  Do Until objRS.EOF OR intCount => objRS.PageSize
    intCount = intCount + 1

    strDate = objRS("date")
    strSurvey = objRS("survey")
    'O.s.v...

    objRS.MoveNext
  Loop

  Response.Write("<br>")

  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 + 1 : intStart = intPage - 3
      ElseIf intPage = 5 Then
        intPages = intPage + 1 : intStart = intPage - 3
      Else
        intPages = 5 : intStart = 1
      End If
    Else
      intPages = objRS.PageCount : intStart = 1
    End If

    If intPages > objRS.PageCount Then intPages = objRS.PageCount : intStart = objRS.PageCount - 4

    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
Else
  Response.Write("Det fanns inga poster.")
End If

objRS.Close : Set objRS = Nothing
objConn.Close : Set objConn = Nothing
%>
bigskyMedlem sedan maj 2002821 inlägg
#14

Tack nu fungerar det. Hade du något förslag på hur jag ska skriva ut "visar post 1 - 5 av total 15 poster"?

SebbeMedlem sedan jan. 20032 285 inlägg
#15
If intPage * objRS.PageSize > objRS.RecordCount Then
  intTill = objRS.RecordCount
Else
  intTill = intPage * objRS.PageSize
End If

Response.Write("Visar nu post " & (intPage - 1) * objRS.PageSize + 1 & " till " & intTill & " av totalt " & objRS.RecordCount & ".<p>")

Do Until objRS.EOF OR intCount => objRS.PageSize
  intCount = intCount + 1
  strDate = objRS("date")
  strSurvey = objRS("survey")

  'O.s.v...

  objRS.MoveNext
Loop
bigskyMedlem sedan maj 2002821 inlägg
#16

Perfekt, och tillsist ville jag ju då att det skulle stå "Visar nu post ... till ... av X poster".

SebbeMedlem sedan jan. 20032 285 inlägg
#17

Vilket det jag skrev i mitt tidigare inlägg gör!

If intPage * objRS.PageSize > objRS.RecordCount Then
  intTill = objRS.RecordCount
Else
  intTill = intPage * objRS.PageSize
End If

Response.Write("Visar nu post " & (intPage - 1) * objRS.PageSize + 1 & " till " & intTill & " av totalt " & objRS.RecordCount & " poster.<p>")
bigskyMedlem sedan maj 2002821 inlägg
#18

Nja, det stod inte i ditt förra inlägg först, därför frågade jag om det, men nu har du lagt till det. Tack för all hjälp.

145 ms totalt · 3 externa anrop · v20260731065814-full.16f3d68c
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
143 ms — hämta tråd, inlägg och bilagor (db)