Måste jag loopa?

ASP

9 svar · 179 visningar · startad av iceM2

Medlem sedan mars 2001243 inlägg
Trådstart#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...

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

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

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

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

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 " & _

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å.

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

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

395 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a
131 ms — deklarationer (db)
123 ms — hämta statistik (db)
134 ms — hämta tråd, inlägg och bilagor (db)
133 ms — ändringar (db)