webForumDet fria alternativet

Vides paging med Get.Rows() ?

15 svar · 240 visningar · startad av iceM2

iceM2Medlem sedan mars 2001243 inlägg
#1

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!

------------------
"Ni tre går och bildar en kvadrat" (Rolf Zetterlund under ett träningspass)

[Redigerat av iceM2 den 02 dec 2001]

[Redigerat av iceM2 den 02 dec 2001]

LarsGMedlem sedan dec. 200012 464 inlägg
#2

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?

------------------
essentitia preter non sans multiplicandum

iceM2Medlem sedan mars 2001243 inlägg
#3

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?

------------------
"Ni tre går och bildar en kvadrat" (Rolf Zetterlund under ett träningspass)

iceM2Medlem sedan mars 2001243 inlägg
#4

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!

------------------
"Ni tre går och bildar en kvadrat" (Rolf Zetterlund under ett träningspass)

VideMedlem sedan dec. 19998 577 inlägg
#5

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

------------------
Mostly Harmless

VideMedlem sedan dec. 19998 577 inlägg
#6

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

------------------
Mostly Harmless

iceM2Medlem sedan mars 2001243 inlägg
#7

är jag blind??? Jag kan inte se att han använder Get.Rows() på något ställe i scriptet...

------------------
"Ni tre går och bildar en kvadrat" (Rolf Zetterlund under ett träningspass)

jorgenMedlem sedan feb. 20012 412 inlägg
#8

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:

  1. Som du själv säger, connectionobjectet stängs fort.

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

------------------
Varför bråka när man kan kramas?

[Redigerat av jorgen den 02 dec 2001]

iceM2Medlem sedan mars 2001243 inlägg
#9

http://cgi.webforum.nu/wf/Forum11/HTML/003221.html

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!

------------------
"Ni tre går och bildar en kvadrat" (Rolf Zetterlund under ett träningspass)

[Redigerat av iceM2 den 02 dec 2001]

[Redigerat av iceM2 den 02 dec 2001]

aleborgMedlem sedan jan. 20013 341 inlägg
iceM2Medlem sedan mars 2001243 inlägg
#11

Tackar, kollade på det scriptet och det verkar ju vara riktigt bra, inte alls lika mycket kod som i Patriks script =)

------------------
"Ni tre går och bildar en kvadrat" (Rolf Zetterlund under ett träningspass)

jorgenMedlem sedan feb. 20012 412 inlägg
#12

Poängen med Patriks script är att det fungerar både i chilliASP och "vanlig ASP"

mvh Jörgen :)

------------------
Varför bråka när man kan kramas?

PatrikBMedlem sedan mars 20002 836 inlägg
#13

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

------------------
'## -- second place is the first looser -- ##'

iceM2Medlem sedan mars 2001243 inlägg
#14

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!!

------------------
"Ni tre går och bildar en kvadrat" (Rolf Zetterlund under ett träningspass)

[Redigerat av iceM2 den 03 dec 2001]

[Redigerat av iceM2 den 03 dec 2001]

PatrikBMedlem sedan mars 20002 836 inlägg
#15

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

------------------
'## -- second place is the first looser -- ##'

iceM2Medlem sedan mars 2001243 inlägg
#16

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!

------------------
"Ni tre går och bildar en kvadrat" (Rolf Zetterlund under ett träningspass)

134 ms totalt · 3 externa anrop · v20260731065814-full.86db40fa
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)