I den här artikeln kommer jag att gå igenom hur man bygger ett paging system med hjälp av get GetRows.
Kom ihåg att alla SQL rader är exempel, så du får redigera dem efter eget behag.
Först ska vi kolla vilken sida man vill visa och se till att värdet på den är korrekt. Det gör vi med följande kod:
Dim intStart, intOffset
intStart = Request.QueryString("s")
intOffset = Request.QueryString("o")
If Not IsNumeric(intStart) or Len(intStart) = 0 Then
intStart = 0
Else
intStart = CInt(intStart)
End If
If Not IsNumeric(intOffset) or Len(intOffset) = 0 Then
intOffset = 10
Else
intOffset = Cint(iOffset)
End If
Den röda siffran är antalet poster som ska visas per sida. Det kan du ändra på till ett valfritt positivt (> 0) värde. Självklart får du ändra på variabelnamnen också, men då ska du se till att de ändras i hela skriptet.
Sen hämtar vi alla poster från databasen. I detta exempel hämtar vi alla medlemmar i databasen som är online och sedan lägger vi in allting i en array (GetRows):
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={MySQL ODBC 3.51 Driver}; SERVER=" &dbServer& "; DATABASE=" &dbDatabase& "; USER=" &dbUser& "; PASSWORD=" &dbPass& ";"
Set RecSet = Connect.Execute("SELECT memUsername FROM tblMembers WHERE memOnline = 1")
If RecSet.EOF Then
arrMembers = ""
Else
arrMembers = RecSet.GetRows()
End If
RecSet.Close : Set RecSet = Nothing
Connect.Close : Set Connect = NothingDet vi gjorde är att vi kontrollerade ifall det hittades några poster i tabellen, om inte så blir arMembers till en vanlig sträng och inte array. Sedan stängde vi ned kopplingen bara.
Sen är det bara att göra en kontroll. Kolla ifall det finns några poster eller inte:
If isArray(arrMembers) Then
...HÄR KOMMER VÅR KOD (SE NEDAN)...
Else
Response.Write("Inga medlemmar hittade :(")
End If
Nu tar vi reda på antalet rader och kolumner i arrayen, detta hjälper oss sen när vi ska loopa ut alla poster. Egentligen behöver vi bara ta reda på antalet rade (intRows), men jag vill visa hur man tar reda på antalet kolumner också (intCols).
intRows = Ubound(arrMembers,2)
intCols = Ubound(arrMembers,1)
Nu har vi bestämt hur många poster vi ska loopa ut, vi har hämtat all info från databasen och vi har tagit reda på antalet existerande poster. Det näst sista vi ska göra är att loopa ut allt, eller hur? :)
If iRows > (intOffset + intStart) Then
intStop = intOffset + intStart - 1
Else
intStop = intRows
End If
For i = intStart to intStop
Response.Write(arrMembers(0,i) & "<br />")
Next
End If
Det jag gjorde nu är att jag loopade ut alla poster som hittades i databasen (de 10 första). Varför skrev jag då arrMembers(0,i)?
Jo, den första siffran/parametern i parantesen anger kolumnen som vi vill plocka ut ur raden i. Förstår du?
Om du tittar på SQL raden i mitt exempel så plockar jag ut kolumnen memUsername och den är den första kolumnen, och som vi vet så har första posten värdet 0, andra posten 1 osv.
Skulle jag ha plockat ut alla kolumner från databasen (då använder man ju *) så skulle 0 peka på första kolumnen i databasen.
Nu är det dags att skriva ut pagingen längst ned, eller hur?
If intStart > 0 then
Response.Write("<a href=""Sida.asp?s=" & intStart-intOffset & "&o=" & intOffset & """>Föregående " & intOffset & "</a>"
End If
If intStop < intRows then
Response.Write " <a href=""Sida.asp?s=" & intStart+intOffset & "&o=" & intOffset & """>Nästa " & intOffset & "</a>"
End If
Nu har vi lärt oss hur man bygger ett snabbt och effektivt paging system med hjälp av GetRows. Det som är bra med GetRows är att du hämtar alla poster från databasen och sparar de i en array, det gör att du kan stänga kopplingen snabbt istället för att låta databaskopplingen stå öppen igenom hela sidan.
Skapades: 2007-08-19 11:39:28
Skribent: Shadi
Lästs 1311 gånger
Betyg: 10 (artikeln har endast 2 röster, det krävs minst 5 för ett betyg)