Jah har läst igenom tre artiklar om metoderna GetString och GetRows här på Pellesoft men förstår inte så mycket.. Hur kan man optimera denna kod med någon av dessa två metoder? Innan du gör det så läs mitt lilla test om GetRows och movenext som jag gjorde.. För att få ett mer avgörande test tycker jag du skall placera Start koden efter du öppnat recordset'et och stopp koden innan close på recordset'et. Har snyggat till din kod. Blanda annta tagit bort din Execut i loopen. Vilket inte är något vidare effektivt. Du hade dessutom glömt att stänga det efter dig.<br>Optimera med GetString() eller GetRows()
<% Dim fCn, fRs, fstrSQL, postDate, fCountSQL, fCountRs, fPage, fRowCount, fPageCounter, fTopics
fPage = Request.Querystring("fPage")
If fPage="" Then fPage=1
fRowcount=0
Set fCn = Server.CreateObject("ADODB.Connection")
Set fRs = Server.CreateObject("ADODB.Recordset")
fCn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("forum/db_forum.mdb") & ";pwd=" & Password & ";"
fstrSQL = "Select * From tbl_forum Order By Last_Date Desc"
fRs.Cursortype=3
fRs.Pagesize=30
fRs.Open fstrSQL, fCn %>
<% If fRs.EOF Then Response.Write "Inga poster än.." Else fRs.Absolutepage=cInt(fPage) %>
<% If fRs.Recordcount>0 Then %>
<table cellpadding="2" cellspacing="1" border="0"><tr><td width="250">Ämne:</td><td width="120">Skribent:</td><td width="40"><center>Svar:</center></td><td width="100">Datum:</td></tr><% End If %>
<% Do While Not fRs.EOF and fRowcount < fRs.Pagesize%>
<tr><td>"><%=fRs("Topichead")%></td><td><%=fRs("Name")%></td><td><center><% fCountSQL = "Select Count(TopicId) From tbl_answers Where TopicId=" & fRs("Id")
Set fCountRs = fCn.Execute(fCountSQL)%><%=fCountRs(0)%></center></td><td><%=Left(fRs("Date"),16)%></td></tr>
<% fRs.Movenext
fRowcount = fRowcount + 1
Loop %>
<% If fRs.Recordcount>0 Then %></table><p><% End If %>
<% Dim fAntal
fAntal = fRs.Recordcount
If fAntal > 30 Then %>
<img src="graphics/line.gif" width="544" height="11"><br>
<% For fPagecounter = 1 to fRs.Pagecount %>
<%=fPagecounter%><% Next %><img src="graphics/line.gif" width="544" height="11">
<% End If %>
<% fRs.Close : Set fRs = Nothing
fCn.Close : Set fCn = Nothing %>Sv: Optimera med GetString() eller GetRows()
http://www.gladh.nu/asphelp/svar22.html
- MSv: Optimera med GetString() eller GetRows()
Alltså bara omge själva behandlingen av data. Det är det skillnaden ligger.
Dessutom använder du inte fält variabler för for loopen. Vilket kan snabba upp den.Sv: Optimera med GetString() eller GetRows()
<br>
Tyvärr blir det svårt att använda GetString i ditt fall. Eftersom du inte har samma avgänsning mellan kolumneran. Men din kod bör vara lite snabbare. Kanske inte så smart att läga en subquery i urvalet om du har allt för många poster. Testa och se vilket som är snabbast. Men om du ska öppna recordsetet i loopen se då till att inte använda Execute metoden. Utan sätt Recordset'et utanför loopen och öpppna och stäng det istället.:
<code>
<%
Dim fCn, fRs, postDate, fPage, fRowCount, fPageCounter, fTopics
Dim fAntal
Const Pagesize = 30
fPage = Request.Querystring("fPage")
If fPage="" Then fPage=1
fRowcount=0
Set fCn = Server.CreateObject("ADODB.Connection")
fCn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("forum/db_forum.mdb") & ";pwd=" & Password & ";"
Set fRs = Server.CreateObject("ADODB.Recordset")
fRs.Pagesize=Pagesize
fRs.Open "Select *, (SELECT Count(*) FROM tbl_answers WHERE tbl_answers.TopicId=tbl_forum.Id) As Antal FROM tbl_forum Order By Last_Date Desc", fCn, 3
If fRs.EOF Then
Response.Write "Inga poster än.."
Else
fRs.Absolutepage=cInt(fPage)
%>
<table cellpadding="2" cellspacing="1" border="0"><tr><td width="250">Ämne:</td><td width="120">Skribent:</td><td width="40"><center>Svar:</center></td><td width="100">Datum:</td></tr>
<%
Do Until fRs.EOF and fRowcount < Pagesize
%>
<tr><td>"><%=fRs("Topichead")%></td><td><%=fRs("Name")%></td><td><center><%=fRs("Antal")%></center></td><td><%=Left(fRs("Date"),16)%></td></tr>
<%
fRs.Movenext
fRowcount = fRowcount + 1
Loop
Response.Write "</table><p>"
End If
fAntal = fRs.Recordcount
If fAntal > Pagesize Then
%>
<img src="graphics/line.gif" width="544" height="11"><br>
<%
For fPagecounter = 1 to fRs.Pagecount
%>
<%=fPagecounter%>
<%
Next
%>
<img src="graphics/line.gif" width="544" height="11">
<%
End If
fRs.Close
Set fRs = Nothing
fCn.Close
Set fCn = Nothing
%>
</code>