brwMedlem sedan juli 2000619 inlägg 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
------------------
Ingenting är omöjligt, bara en utmaning.
[Redigerat av brw den 07 maj 2001]
VideMedlem sedan dec. 19998 577 inlägg Skulle tro att du itne öppnar din databas med ett Recordsetobjekt... och därav får du inte tillgång till de olika metoderna (som recordcount)...
------------------
Budweiser - Slightly contaminated water... probably harmless, but I would recommend boiling before you drink it...
webEye.nu SweQuake.com
brwMedlem sedan juli 2000619 inlägg men det verkar vara på raden som RS.Movelast det blir fel på
Hur ska jag få det att funka då?
Kan det stämma att det kan bli 20 - 40 % snabbare?
------------------
Ingenting är omöjligt, bara en utmaning.
VideMedlem sedan dec. 19998 577 inlägg Istället för att öppna databasen med ett Connectionobjekt (som du gör nu) så använder du ett Recordset: http://www.devguru.com/Technologies/ado/quickref/recordset_open.html
Om det blir 20-40% snabbare har jag ingen aning om, men det vore helt klart intressant att veta... :)
------------------
Budweiser - Slightly contaminated water... probably harmless, but I would recommend boiling before you drink it...
webEye.nu SweQuake.com
[Redigerat av Vide den 07 maj 2001]
LarsGMedlem sedan dec. 200012 464 inlägg Jag har svårt att tro att skillnaden skulle bli så stor, men du får gärna mäta. Snabbast sättet är nog att använda metoden getrows.
------------------
essentitia preter non sans multiplicandum
PatrikBMedlem sedan mars 20002 836 inlägg Jepp, den klart snabbaste varianten är .GetRows
exempel:
<%
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
%>
cya,
PatrikB
------------------
*Det tar sig sa han som hade eld i håret*
sawMedlem sedan mars 20011 880 inlägg 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?
------------------
saw
__
saw@songer.com
www.saw.songer.com
__
@ndersMedlem sedan juni 200032 969 inlägg arrForum,2 (i detta fallet)
... betyder inte kolumn 2, utan dimension 2.
loopen görs alltså åt båda håll, x och y, för att kunna nyttja arrayens hela innehåll.
mvh,
------------------
<A HREF="http://cartman.nu" TARGET=_blank>
nobody expects the spanish inquisition!</A>
sawMedlem sedan mars 20011 880 inlägg 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?
------------------
saw
__
saw@songer.com
www.saw.songer.com
__
PatrikBMedlem sedan mars 20002 836 inlägg 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
------------------
*Det tar sig sa han som hade eld i håret*