Jo, det går väl, men då skriptet använder ett client-side recordset så tjänar du inte mycket på att skriva om det med getrows.
Är det någon som har en konkret jämförelse?
15 svar · 240 visningar · startad av iceM2
Jag undrar om det går att modifiera Vides paging script för att använda Get.Rows? Så att man kan stänga connection objektet snabbare och slippa skapa ett Record Set??? Någon som har lust att hjälpa?
Vides paging script
<%
Set objRs = Server.Createobject("Adodb.Recordset")
strSQL = "Select * from tblTable Order by id asc"
strConString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" &_
Server.MapPath("/") & "/../scripts/databas.mdb"
intPageId = request.querystring( "pageid" )
if intPageId = "" then intPageId = 1
with objRs
.cursorlocation = 3
.open strSQL, strConString
.pagesize = 10
.absolutepage = intPageId
end with
intPages = cint( objRs.pagecount )
intCurrentPost = 0
do while not objRs.eof and intCurrentPost < objRs.pagesize
strContents = strContents &_
"<tr><td>" & objRs( "fält1" ) & "</td>" &_
"<td>" & objRs( "fält2" ) & "</td></tr>"
intCurrentPost = intCurrentPost + 1
objRs.movenext
loop
for i = 1 to objRs.pagecount
strNavigation = strNavigation & " <a href='?pageid=" & i & "'>" & i & "</a>"
next
response.write "<table>" & strContents & "</table>"
response.write "<table><tr><td>" & strNavigation & "</td></tr></table>"
%>
Hoppas att det var okej att jag publicerade din kod Vide!
Jo, det går väl, men då skriptet använder ett client-side recordset så tjänar du inte mycket på att skriva om det med getrows.
Är det någon som har en konkret jämförelse?
finns det inte något exempel där ett paging script använder getrows och är prestandamässigt bättre än en lösning med recset? Hur gör ni när ni använder paging?
Ingen som har en lösning på detta? Eller ska man helt enkelt inte använda getrows när man har paging??? Skulle verkligen uppskatta om nån hjälper mig med detta!
Så att man kan stänga connection objektet snabbare
Du kan stänga connection-objektet genom att lägga till .ActiveConnection = nothing, vilket resulterar i ett diconnected recordset:
with objRs
.cursorlocation = 3
.open strSQL, strConString
.pagesize = 10
.absolutepage = intPageId
.ActiveConnection = nothing
end with
och slippa skapa ett Record Set???
Du kommer aldrig att komma ifrån att ett recordset skapas, för det är just recordsettet som du använder metoden .GetRows() på.
Hoppas att det var okej att jag publicerade din kod Vide!
Självklart, scriptet är till för att användas...
Om du kollar under script här på wF så hittar PatrikBs pagingscript som använder .GetRows():
http://cgi.webforum.nu/wf/Forum11/HTML/003221.html
är jag blind??? Jag kan inte se att han använder Get.Rows() på något ställe i scriptet...
Kod från PatriksB paging:
If Not m_objRS.EOF Then
m_arrRecords = m_objRS.GetRows()
getRecords = m_arrRecords
End If
I övrigt så är det inte att skapa recset i sig som snabbar upp. Det är 2 andra faktorer som snabbar upp:
Som du själv säger, connectionobjectet stängs fort.
Samtlig data hämtas med få hämtningar och läggs i en array. Sedan loopas det ut i en for-slinga. Till skillnad från när man hämtar en rad i taget i en Do- eller whileloop.
mvh Jörgen
Det var ju inte så konstigt att jag inte hittade Getrows! Vides länk leder ju till en annan version av scriptet som inte använder Getrows.
Länken till diskussionen om Patriks script med paging och getrows ska vara:
http://cgi.webforum.nu/wf/Forum11/HTML/004000.html
Länken för att ladda ner scriptet är:
http://script.webforum.nu/wf/Forum1/HTML/000063.html
Vide ville bara göra dig uppmärksam om att länken på webeye leder också till fel länk, bara så du vet ;-)
Tack för hjälpen folks!
Tackar, kollade på det scriptet och det verkar ju vara riktigt bra, inte alls lika mycket kod som i Patriks script =)
Precis som jörgen sa så är min paging anpassad för både chilliASP och "vanlig asp".
Om jag körde vanlig asp så skulle jag använda mig av denna lösning:
<%
Option Explicit
Response.Buffer = True
Dim intPage, intPageSize, N
Dim strSQL
Dim objConn, objRS
Dim varArray
'## -- kolla vilken sida besökaren/användaren vill se --
intPage = Request.QueryString("page")
'## -- kontrollera att någonsida är namngiven.
'## om inte, visa första sidan --
If Len(intPage) = 0 Then intPage = 1
'## -- hur många poster ska visas per sida --
intPageSize = 2
'## -- sql-fråga för att hämta de poster man vill visa --
strSQL = "SELECT * " & _
"FROM FORUM_CATEGORY ORDER BY CAT_NAME"
'## -- skapa connection objectet --
Set objConn = Server.CreateObject("ADODB.Connection")
'## -- öppna specifierad databas/databas-fil
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("/db-folder/db-fil.mdb")
'## -- skapa recordset objectet --
Set objRS = Server.CreateObject("ADODB.Recordset")
'## -- hur många poster per sida ska visas --
objRS.PageSize = intPageSize
'## -- öppna recordsetet --
objRS.Open strSQL, objConn, 1, 3
'## -- kolla att det har returnerats några poster --
If Not objRS.EOF Then
'## -- gå till första posten på sidan --
objRS.AbsolutePage = intPage
'## -- hämta alla poster och spar dem till en 2-dimensionell array --
varArray = objRS.GetRows(intPageSize)
End If
'## -- clean up --
objRS.Close
Set objRS = Nothing
Set objConn = Nothing
%>
<HTML>
<HEAD>
<META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0">
</HEAD>
<BODY>
<%
If IsArray(varArray) Then
For N = 0 To UBound(varArray,2)
Response.Write varArray(2,N) & "<BR>"
Next
End If
If CLng(intPage) > 1 Then
Response.Write " <A href=""" & Request.ServerVariables("SCRIPT_NAME") & "?page=" & intPage - 1 & """>Föregående</A> "
End If
If CLng(intPage) < CLng(UBound(varArray,2)+1) Then
Response.Write " <A href=""" & Request.ServerVariables("SCRIPT_NAME") & "?page=" & intPage + 1 & """>Nästa</A> "
End If
%>
</BODY>
</HTML>
som hämtar endast de records som ska visas på respektive sida ... om man ändå håller på och ska köra med ADODB.Recordset så kan man låta dess inbyggda metoder/egenskaper få jobba lite *ler* när de ändå finns där såååå lätt åtkomliga som de är
cya,
PatrikB
Tackar så mycket för detta script Patrik =) Jag kör med ditt verkar lättare nu än var det var innan =)
Hur skulle denna koden se ut om du la till sidnavigeringsmenyn? dvs så man kan hoppa mellan olika sidor förutom näst och föregående..
Tips: lägg upp även detta på script avdelningen!!
kolla in mitt script som ligger under wF Script. Där finns det 3 st subbar: NextPage, PrevPage och PageNumbers ... om jag inte missminner mig totalt *ler*.
Dessa subbar kan du använda på de sidor som du vill ha pagebar på som ser ut typ: Föregående 1 2 3 4 Nästa
Det som behöver "passas" in i de olika subbarna är hur många sidor som själva recordsetet består av och vilken sida man är på.
cya,
PatrikB
okej, ska ta mig en titt på detta när jag fått resten av scriptet att fungera, tack för hjälpen ännu en gång i alla fall!