通過ASP記錄進行分頁的完美解決方案
rst.PageSize = iRowsPerPage
rst.AbsolutePage = iPageNum
'寫出記錄的當前頁
Do While (Not rst.EOF) and (iLoop <= iRowsPerPage)
Response.Write "<TR>"
For Each fld in rst.Fields
Response.Write "<TD>" & fld.value & "</TD>"
Next
iLoop = iLoop + 1
rst.MoveNext
Response.Write "</TR>"
Loop
Response.Write "</TABLE>"
End Sub
Sub ShowNavBar(rst)
Dim iPageCount
Dim iLoop
Dim sScriptName
'本版本提供了更豐富的用戶導航,但是
'依賴于 RecordCount 和 PageCount,
'它抵消了為服務器端游標
'指定 CacheSize 的好處。
Response.Write "<BR><BR>"
sScriptName = Request.ServerVariables("SCRIPT_NAME")
If iPageNum > 1 Then
Response.Write " <a href=" & sScriptName & "?iPageNum="
Response.Write (iPageNum -1) & "><< Previous</a>"
End If
iPageCount = rst.PageCount
Do Until iLoop > iPageCount
f iLoop = iPageNum Then
Response.Write " <B>" & CStr(iLoop) & "</B>"
Else
Response.Write " <a href=" & sScriptName & "?iPageNum=" & _
Cstr(iLoop) & ">" & iLoop & "</a>"
End If
iLoop = iLoop + 1
Loop
If Not rst.EOF Then
Response.Write " <a href=" & sScriptName & "?iPageNum="
Response.Write (iPageNum +1) & "> Next >></a><BR>"
Else
Response.Write "<BR>"
End If
Response.Write "Page " & iPageNum & " of " & iPageCount & "<BR>"
Response.Write rst.RecordCount & " Records" 牋?
End Sub
Sub ShowFastNavBar(rst)
Dim iPageCount
Dim iLoop
Dim sScriptName
'在指定 CacheSize 和使用服務器端游標時,
'該方法特別有效,因為它不使用 RecordCount
'和 PageCount。需要用戶具有經驗。
Response.Write "<BR><BR>"
sScriptName = Request.ServerVariables("SCRIPT_NAME")
If iPageNum > 1 Then
Response.Write " <a href=" & sScriptName & "?iPageNum="
Response.Write (iPageNum -1) & "><< Previous</a>"
End If
If Not rst.EOF Then
Response.Write " <a href=" & sScriptName & "?iPageNum="
Response.Write (iPageNum +1) & "> Next >></a><BR>"
Else
Response.Write "<BR>"
End If
Response.Write "Page " & iPageNum
End Sub
Sub CleanUp(rst)
If Not rst Is Nothing then
If rst.state = adStateOpen then rst.close
set rst = nothing
End If
End Sub
</SCRIPT>
分析
設計分頁解決方案時,需注意的幾個問題:
游標定位問題。如果使用客戶端游標,每次打開記錄集時,將讀取所有的記錄。因此,由于讀取了所有的記錄,以后訪問 RecordCount 或 PageCount 屬性時將很快。如果您使用服務器端游標,將只檢索需要的記錄。您可以通過 CacheSize 屬性指定一次要讀取的記錄數來提高性能。然而,如果您使用服務器端游標,和 RecordCount 或 PageCount 屬性,則將讀取所有的記錄,性能得不到提高。必須在具有更多信息和更豐富導航的用戶界面,與檢索所有記錄的性能影響之間折衷。使用服務器端游標時,CursorType 屬性必須是 adOpenStatic 或 adOpenKeyset,才能使用分頁。分頁并非總是最好的用戶頁面。它可能僅適用于用戶正從搜索引擎掃描結果或瀏覽產品目錄的情況。