通過ASP記錄進(jìn)行分頁(yè)的完美解決方案
rst.PageSize = iRowsPerPage
rst.AbsolutePage = iPageNum
'寫出記錄的當(dāng)前頁(yè)
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
'本版本提供了更豐富的用戶導(dǎo)航,但是
'依賴于 RecordCount 和 PageCount,
'它抵消了為服務(wù)器端游標(biāo)
'指定 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 和使用服務(wù)器端游標(biāo)時(shí),
'該方法特別有效,因?yàn)樗皇褂?RecordCount
'和 PageCount。需要用戶具有經(jīng)驗(yàn)。
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>
分析
設(shè)計(jì)分頁(yè)解決方案時(shí),需注意的幾個(gè)問題:
游標(biāo)定位問題。如果使用客戶端游標(biāo),每次打開記錄集時(shí),將讀取所有的記錄。因此,由于讀取了所有的記錄,以后訪問 RecordCount 或 PageCount 屬性時(shí)將很快。如果您使用服務(wù)器端游標(biāo),將只檢索需要的記錄。您可以通過 CacheSize 屬性指定一次要讀取的記錄數(shù)來(lái)提高性能。然而,如果您使用服務(wù)器端游標(biāo),和 RecordCount 或 PageCount 屬性,則將讀取所有的記錄,性能得不到提高。必須在具有更多信息和更豐富導(dǎo)航的用戶界面,與檢索所有記錄的性能影響之間折衷。使用服務(wù)器端游標(biāo)時(shí),CursorType 屬性必須是 adOpenStatic 或 adOpenKeyset,才能使用分頁(yè)。分頁(yè)并非總是最好的用戶頁(yè)面。它可能僅適用于用戶正從搜索引擎掃描結(jié)果或?yàn)g覽產(chǎn)品目錄的情況。