Vid en vanlig listning av en databas brukar man använda en loop som skall uppfylla vilkoren EOF eller BOF.
Och skulle kunna se ut på följande sätt:
Do while not RS.EOF
Response.Write(RS("FältNamn"))
RS.MoveNext
Loop
Denna metod är bra så länge man inte skall söka genom en databas med många fält då den vid varje runda frågar objektet RS om den har uppfyllt vilkoret EOF eller BOF.
Istället skulle man kunna jämföra två tal variabler vilket går mycket snabbare.
Detta kan skrivas på följande sätt:
RS.MoveLast
RS_Slut = RS.RecordCount
RS.MoveFirst
For i = 1 to RS_Slut
Response.Write(RS("FältNamn"))
RS.MoveNext
Next
Nu bör man kunna få en mätbar hastighets ökning på 20% - 40% vid sökning i en databas.
Men detta verkar inte gå nå bra blir typ nå:
The rowset does not support fetching backwards
<%
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("/db-dir/db-file.mdb")
strSQL = "SELECT ForumID, ForumName, ForumDescription " & _
"FROM Forum " & _
"ORDER BY ForumName ASC"
Set objRS = objConn.Execute(strSQL)
If Not objRS.EOF Then
arrForum = objRS.GetRows
End If
objRS.Close
Set objRS = Nothing
objConn.Close
Set objConn = Nothing
'## -- loop through the array and present the data to user --
For I = 0 To UBound(arrForum,2)
For N = 0 To Ubound(arrForum,1)
Response.Write arrForum(N,I) & " : "
Next
Response.Write "<BR>"
Next
%>
Jag jagar själv hastighet, och jag fann att ovanstående snabbade upp min applikation avsevärt, men jag är intresserad av att få veta mera om det sista förslaget.
"
## -- loop through the array and present the data to user --
For I = 0 To UBound(arrForum,2)
For N = 0 To Ubound(arrForum,1)
Response.Write arrForum(N,I) & " : "
Next
Response.Write "<BR>"
Next
"
Kan någon förklara lite närmare
arrForum,2 (i detta fallet) betyder det att det är kolumb 2? Behöver man i såfall köra igenom alla kolumberna?
Om jag har fyra kolumber....
Hur bör man då skriva ut det?
OK det fungerar snappt som den, men hur styr man det?
I ngot fall så skall det vara en länk. i ett annat fall visa en billd osv.
Någonstans där man kan läsa om det?
inte vad jag vet. har inte hittat något att läsa om just denna typ av array.
Men varför inte testa? du har ju all info som du har i recordsetet samlad i Arrayen. Hur gör du när du kollar i recordsetet om det ska vara en bild eller en länk?
Kan säga så här:
Placeringen på - ForumID, ForumName, ForumDescription ligger på "samma ställe" i Arrayen. Så istället för att skriva den inre loopen av arrayen går detta lika bra:
For I = 0 To UBound(arrForum,2)
intForumID = arrForum(0,I)
strForumName = arrForum(1,I)
strForumDescription = arrForum(2,I)
Response.Write "ForumID: " & intForumID & _
"ForumName: " & strForumName & _
"ForumDescription: " & strForumDescription & _
"<BR>"
Next
Sedan är det bara och kolla vad variablerna har för innehåll och sedan visa vad som visas skall.
cya,
PatrikB
247 ms totalt · 4 externa anrop · v20260731065814-full.d34c6d5a