webForumDet fria alternativet

Måste jag loopa?

ASP

9 svar · 164 visningar · startad av iceM2

Medlem sedan mars 2001243 inlägg
Frågan#1

Jag har en gästbok där jag loopar ut de 20 nyaste inläggen Jag undrar om detta går att lösa på ett bättre sätt? Tex med Get.Rows() ??? Hur i så fall?

Sedan ska man kunna klicka vidare bland inläggen med paging...

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

Medlem sedan feb. 20012 412 inlägg
#2
strSQL = "SELECT TOP 20 * FROM Gastbok " & _
" ORDER BY id DESC"
strConn = "DSN="
Set objConn = Server.CreateObject("ADOdb.Connection")
objconn.Open strConn
arrMess = objConn.Execute(strSQL).GetRows()
objConn.Close()
Set objConn = Nothing

Response.Write "<p><strong>De 20 senaste skribenterna:</strong><p>"

if IsArray(arrMess) Then

For I = 0 To UBound(arrMess,2)

strMeddelande = arrMess(0,I)

Response.Write "<p>"& strMeddelande&"</p>"

Next
end if

Red: Kolla PatrikB:s paging under wF script, det är uppbyggt med Getrows() också. ;)

mvh Jörgen :)

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

[Redigerat av jorgen den 01 dec 2001]

Medlem sedan mars 2001243 inlägg
#3

Tack så mycket! En fråga bara, går det bara att skriva ut det som en mängd? Om man vill kunna bestämma varje recset hur gör man då dvs, jag vill strukturera hur det skall skrivas ut..

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

Medlem sedan feb. 20012 412 inlägg
#4
strSQL = "SELECT TOP 20 Namn, Datum, Mess FROM Gastbok " & _
" ORDER BY id DESC"
strConn = "DSN="
Set objConn = Server.CreateObject("ADOdb.Connection")
objconn.Open strConn
arrMess = objConn.Execute(strSQL).GetRows()
objConn.Close()
Set objConn = Nothing
Response.Write "<p><strong>De 20 senaste skribenterna:</strong><p>"

if IsArray(arrMess) Then

For I = 0 To UBound(arrMess,2)

strNamn = arrMess(0,I)
dteDatum = arrMess(1,I)
strMeddelande = arrMess(2,I)

Response.Write "<p>Inlägget gjort av "& strNamn &" den "& dteDatum &"</p>" & _

"<p>Meddelande:<br> "& strMeddelande &" </p>"
Next
end if

Vet ej riktigt vad du menar, fattade jag dig fel så får du höjta. Du kan strukturera det med tabeller också om du vill. Det är bara att bestämma hur du vill presentera datan.

red: första definierade fältet i SQL-frågan får nr 0 i arrayen, andra fältet nr 1, 3:e nr 2 osv.

mvh Jörgen :)

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

[Redigerat av jorgen den 01 dec 2001]

Medlem sedan dec. 200012 464 inlägg
#5

Nej, du behöver inte loopa. Det finns en funktion som heter getstring.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthgetstringmethod(recordset)ado.asp

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

Medlem sedan mars 2001243 inlägg
#6

Tack för svaren! Det som Jörgen visa verkar vara precis det jag är ute efter =) Det är måste ju vara mycket mer prestanda-snålt va? I och med att kopplingen stängs snabbt som en blixt.

En fråga till om jag hämtar alla kolumner från en DB ska jag även då skriva specifikt vilka kolumner jag hämtar ifrån? dvs

strSQL = "SELECT TOP 20 Namn, Datum, Mess FROM Gastbok " & _

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

Medlem sedan dec. 200012 464 inlägg
#7

Jag tycker att du skall skriva ut kolumnerna explicit. Det är mer dokumentativt och i vissa fall har det betydelse i vilken ordning man anger kolumnerna (i samband med lobar.)

Om det är effektivare, ur prestandasynpunkt, att skriva

select * from ogrish

eller

select aleb,caleb from ogrish

tycker jag är ovdikommande. Den eventuella skillnad som finns är försumbar i de flesta fall. Om man vill optimera kod, så är det inte det första man tittar på.

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

Medlem sedan feb. 20012 412 inlägg
#8

Hej, vill du presentera datan i tabellformat och på ett ställe, dvs inte dutta ut datan på flera ställen är Getstring prestandamässigt bättre (du slipper loopen).

Den tar ut alla data ur ett recset object och formaterar en tabellstruktur i en textsträng. Även med metoden Getstring kan man stänga connectionobjectet direkt.

mvh Jörgen :)

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

[Redigerat av jorgen den 01 dec 2001]

Medlem sedan mars 2001243 inlägg
#9

Okej, jag var lite undrande över när man ska använda GetRows och när man kan använda GetString, trots din förklaring (on offence)...

Jag sökte lite på WF och hittade följande intressanta tråd som reder ut skillnade dem emellan mycket bra! Tänkte dela med mig av tråden:
http://cgi.webforum.nu/wf/Forum11/HTML/004882.html

Tack så hemskt mycket för hjälpen Jörgen och LarsG, känns fruktansvärt bra att använda detta =)

[Redigerat av iceM2 den 01 dec 2001]

Medlem sedan feb. 20012 412 inlägg
#10

Njea, det är en smaksak, vill du presentera det i tabellformat på ett ställe så passar även metoden Getstring. Jag använder enbart Getrows och från tidigare diskussioner här på wF verkar de flesta hålla sig till Getrows. Annars kan det se ut något i stil med:

strMyMess = objRS.GetString(,,"</td><td>","</td></tr><tr><td>")
objRS.Close()
set objRS = Nothing
objConn.Close()
set objConn = Nothing

with Response

.write("<table><tr><td>")
.write(strMyMess)
.write("</td></tr></table>")

end with

red: du kan skriva:

strMyMess = objRS.GetString(,-1,"</td><td>","</td></tr><tr><td>")

så får du samtliga poster, bytar du -1 mot 20, får du de 20 första posterna i ditt recset.

otestad kod, ta det som ett exempel :)

mvh Jörgen :)

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

[Redigerat av jorgen den 01 dec 2001]

257 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)