Avatar billede bobbedude Nybegynder
14. juni 2006 - 08:58 Der er 12 kommentarer og
2 løsninger

Paging med GetRows

Jeg har ikke kunnet finde et godt eksempel så har du et ?
Hvis man bruger GetRows er det så hurtigere end almendelig Paging ?
Avatar billede fennec Nybegynder
14. juni 2006 - 09:24 #1
Kunne ikke forstille mig at det var hurtigere. Det er måske lidt hurtigere at løbe et array igennem i stedet for et Recordset, men den tid er hurtig tabt på GetRows funktionen, som jo skal løbe HELE recordset igennem og smide data over i arrayet. Også kan du desuden ikke udskrive værdierne med deres navne længre, men må bruge array indexseringen hvilket gør din kode uforstålig:

response.write rs("navn")
Mod:
response.write myArr(3,1) <-- Hvordan skulle man vide at det er navnet??

Jeg vil anbefale at holde dig til "almindlig" paging.
Avatar billede bobbedude Nybegynder
14. juni 2006 - 10:19 #2
Avatar billede bobbedude Nybegynder
14. juni 2006 - 10:33 #3
Jeg har fået lavet scriptet og det virker også men jeg kan ikke lige se hvordan jeg kan lave en liste i bunden der viser 1 2 3 4 5 6 osv.




<%
iStart = Request("page")
  iOffset = 15

  if Not IsNumeric(iStart) or Len(iStart) = 0 then
    iStart = 0
  else
    iStart = CInt(iStart)
  end if

  if Not IsNumeric(iOffset) or Len(iOffset) = 0 then
    iOffset = 10
  else
    iOffset = Cint(iOffset)
  end if

Dim Connect, rs
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={MySQL ODBC 3.51 Driver}; server=localhost; database=xxx; uid=xxx; pwd=xxx;"
SQL = "select PostDate,SetAliveDate,HeadLine,Hits,Content,ID,GoodVote,BadVote,thumb,Urlen,UserName,Category from plugs"
Set rs = Connect.Execute(SQL)
  Dim aResults
  aResults = rs.GetRows
  rs.Close
  Set rs = Nothing
  Connect.Close
  Set Connect = Nothing


  Dim iRows, iCols, iRowLoop, iColLoop, iStop, Counter
  iRows = UBound(aResults, 2)
  iCols = UBound(aResults, 1)

fld_PostDate = 0
fld_SetAliveDate = 1
fld_HeadLine = 2
fld_Hits = 3
fld_Content = 4
fld_ID = 5
fld_Good = 6
fld_Bad = 7
fld_thumb = 8
fld_Urlen = 9
fld_UserName = 10
fld_Category = 11

Counter = 1

  If iRows > (iOffset + iStart) Then
    iStop = iOffset + iStart - 1
  Else
    iStop = iRows
  End If

  For iRowLoop = iStart to iStop

PostDate = aResults(fld_PostDate, iRowLoop)
SetAliveDate = aResults(fld_SetAliveDate, iRowLoop)
HeadLine = aResults(fld_HeadLine, iRowLoop)
Hits = aResults(fld_Hits, iRowLoop)
Content = Replace(aResults(fld_Content, iRowLoop), vbCrLf, "<br>")
ID = aResults(fld_ID, iRowLoop)
Good = aResults(fld_Good, iRowLoop)
Bad = aResults(fld_Bad, iRowLoop)
thumb = aResults(fld_thumb, iRowLoop)
Urlen = aResults(fld_Urlen, iRowLoop)
UserName = aResults(fld_UserName, iRowLoop)
Category = aResults(fld_Category, iRowLoop) 



Response.write Counter &" - "& HeadLine &"<br>"&Content&"<hr>"


Counter = Counter + 1
  Next 

  Response.Write "<P>"
  if iStart > 0 then
    'Show Prev link
    Response.Write "<A HREF='GetRows.asp?page=" & iStart-iOffset & "'>Previous " & iOffset & "</A>"
  end if

  if iStop < iRows then
    'Show Next link
    Response.Write " <A HREF='GetRows.asp?page=" & iStart+iOffset & "'>Next " & iOffset & "</A>"
  end if
 
 
%>
Avatar billede fennec Nybegynder
14. juni 2006 - 10:35 #4
Han mangler så lige at sammenligne med et "almindelig" paging script. Så det kan godt være det går hurtigt med GetRows men uden kunne det evt gå endnu hurtigere.
Avatar billede bobbedude Nybegynder
14. juni 2006 - 10:39 #5
ja det må komme an på en prøve.
har du en løsning til hvordan jeg får vist 1 2 3 4 5 6 osv ??
Avatar billede fennec Nybegynder
14. juni 2006 - 10:47 #6
Dit script er på ingen måder optimal.
Du ALLE rækker ud med getRows. Det optimale er at hoppe til rækken du starter i med rs.move(StartRække) koden, også kun trække de rækker ud du skal bruge med GetRows(antalRækker)

Åben dit rs som et recordset i stedet:
set rs = Server.CreateObject("ADODB.Recordset")
rs.open sql, Connect, 1, 1

Så kan du få det totale antal rækker med:
antal = rs.recordCount

Ud fra den kan du lave dine 1,2,3... når du ved hvormange rækker du viser på hver side.
Avatar billede bobbedude Nybegynder
14. juni 2006 - 11:01 #7
ja det kan godt være du mener det men når jeg tester det på min server ja så er det mærkbart hurtiger end det jeg brugte før
Avatar billede fennec Nybegynder
14. juni 2006 - 11:31 #8
Så er det jo bare at bruge det du har nu da det er hurtigere :o)

I stedet for at bruge rs.open metoden kan du også bruge ubound(aResults) til at få antallet af records. Det kræver dog at du ligger alle rækker i arrayet.
Avatar billede bobbedude Nybegynder
14. juni 2006 - 14:01 #9
Jeg har stadig ikke fået løst det med den side liste, jeg har fumlet lidt med den men det spiller slet ikke lol.

If iStart = 0 Then
    'iStart = 20
End If

If iRows + 1 <> 40 Then
iStart = iStart*10
End If

SiteNumber = ""

For i = 1 To 10
SiteNumber = iStart/iOffset


Response.Write iStart &" - "& SiteNumber&" / "
  'Response.Write "<A HREF='default.asp?Sub="&Request.Querystring("Sub")&"&Cat="&Request.Querystring("Cat")&"&page=" &  iStart & "'>"&SiteNumber&"</a> - "
 

 
iStart = iOffset + iStart
Next
Avatar billede fennec Nybegynder
14. juni 2006 - 14:20 #10
Har du en metode til at trække det TOTALE antal records ud (mine to forige poster)??

Så er det noget i denne stil:

totalAntal = ???
totalPrSide = 10
antalSider = Int(totalAntal / totalPrSide)+1

for f=1 to antalSider
  response.write f
next
Avatar billede bobbedude Nybegynder
14. juni 2006 - 14:54 #11
Hej igen Fennec

jeg trækker nu total ud og det virker når jeg gør sådan her:

TotalSider = Round(intRecords/iOffset)

For i = 1 to TotalSider

If i = 1 Then
    LinkTal = 0
Else
    LinkTal = iOffset + LinkTal   
End If   

If iStart = LinkTal Then
    Response.write "<strong>["
End If
    Response.Write "<a href='default.asp?Sub="&Request.Querystring("Sub")&"&Cat="&Request.Querystring("Cat")&"&page=" & LinkTal & "'>"
    Response.Write i
    Response.Write "</a> "
If iStart = LinkTal Then
    Response.write "]</strong>"
End If
   
next

Dog ser det lidt vildt ud når den lige laver 360 sider med 30 records på hver, kan man evt gøre så den kun viser 10 sider frem og op til 10 tilbage ?????
Avatar billede fennec Nybegynder
14. juni 2006 - 16:40 #12
Jeg må nok indrømme at jeg fatter minus af den kode du har der :o)

Men du må da vide hvilken side du er på ud fra "page", også lave en sammenligning med LinkTal. Dette er bare for at give dig en ide:

AktuelSide = cInt(rq("page"))
..

if (LinkTal-AktuelSide) >-10 and (LinkTal-AktuelSide)<10 then
  If iStart = LinkTal Then
    Response.write "<strong>["
  End If
  Response.Write "<a href='default.asp?Sub="&Request.Querystring("Sub")&"&Cat="&Request.Querystring("Cat")&"&page=" & LinkTal & "'>"
  Response.Write i
  Response.Write "</a> "
  if iStart = LinkTal Then
    Response.write "]</strong>"
  End If
end if
Avatar billede bobbedude Nybegynder
15. juni 2006 - 11:10 #13
lol det er bare cool Fennec.
Grunden til at jeg prøvede med GetRows var at min siden loadede så laaaangsom.
Efter at jeg havde sat scriptet op ja så kørte det en anelse hurtiger men ikke som jeg havde forventet.
En ven siger at jeg skal prøve at sætte fulde URLer ind i mine Iframes (der er 5 af dem på siden) og så kom der knald på nu loader den perfekt og jeg har smidt det gamle paging på igen.
du kan se siden www.killmyday.com
Kunne vi ikke dele de point for da du var skeptisk over for GetRows var jeg jo nød til at spørge et par venner også og nu virker det som det skal ?
Avatar billede fennec Nybegynder
15. juni 2006 - 11:52 #14
Helt i orden med en deler.

.o) <-- One Eyed Jack
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