这种分页方法是:将数据库中所有符合查询条件的记录一次性的都读入 recordset 中,存放在内存中,然后通过 ADO Recordset 对象所提供的几个专门支持分页处理的属性: PageSize、PageCount以及 AbsolutePage来管理分页处理。
此分页方法用到的几个Recordset 属性
pagesize……定义一页显示记录的条数(自己设定)
recordcount……返回记录总数
pagecount……返回总页数
AbsolutePage ……设置此属性以移动到某一页的第一个记录。
实例:
<% strsql = "…………………" 'sql查询语句
Set rs=Server.Createobject("ADODB.RECORDSET")
rs.Open sql, conn, 1, 1
maxperpage=50
if not rs.eof then
rs.pageSize = maxperpage '设定每页显示的记录数
totalnumber=rs.recordcount '取得记录总数,赋值给totalnumber
sumpages = rs.pageCount '取得总页数,赋值给sumpages
CurrentPage = Request.QueryString("page") '通过浏览器地址取得所要显示页码
'针对页码值的取值范围进行处理
if isEmpty(page) or Cint(page) <1 then
CurrentPage = 1
elseif Cint(page) >sumpages then
CurrentPage = sumpages
end if
rs.AbsolutePage = page '移动到显示页的第一个记录
i=0
Do while not rs.eof and i<maxperpage
response.Write(rs("??")) '显示页面数据
rs.MoveNext
Loop
else
Response.Write("没此内容")
End if
rs.Close
Set rs = Nothing
showpage(totalnumber,maxperpage,1,1,"条") '调用过程showpage显示显示“上一页 下一页”等信息
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'***********************************************
'过程名:showpage
'作 用:显示“上一页 下一页”等信息
'参 数:totalnumber ----数据总数量
' maxperpage ----每页显示数量
' ShowTotal ----是否显示总数量(1显示)
' ShowAllPages ---是否用下拉列表显示所有页面以供跳转(1显示)。
' strUnit ----计数单位
'***********************************************
sub showpage(totalnumber,maxperpage,ShowTotal,ShowAllPages,strUnit)
dim n, i,strTemp,strUrl
if totalnumber mod maxperpage=0 then
n= totalnumber \ maxperpage
else
n= totalnumber \ maxperpage+1
end if
strTemp= "<table align='center'><tr><td>"
if ShowTotal=1 then
strTemp=strTemp & "共 <b>" & totalnumber & "</b> " & strUnit & " "
end if
strUrl=GetURL("page=")
if CurrentPage<2 then
strTemp=strTemp & "首页 上一页 "
else
strTemp=strTemp & "<a href='" & strUrl & "1'>首页</a> "
strTemp=strTemp & "<a href='" & strUrl & (CurrentPage-1) & "'>上一页</a> "
end if
if n-currentpage<1 then
strTemp=strTemp & "下一页 尾页"
else
strTemp=strTemp & "<a href='" & strUrl &(CurrentPage+1) & "'>下一页</a> "
strTemp=strTemp & "<a href='" & strUrl & n & "'>尾页</a>"
end if
strTemp=strTemp & " 页次:<strong><font color=red>" & CurrentPage & "</font>/" & n & "</strong>页 "
strTemp=strTemp & " <b>" & maxperpage & "</b>" & strUnit & "/页"
if ShowAllPages=1 then
strTemp=strTemp & " 转到:<select class='input' name='page' size='1' onchange=""javascript:window.***='" & strUrl & "'+this.options[this.selectedIndex].value;"">"
for i = 1 to n
strTemp=strTemp & "<option value='" & i & "'"
if cint(CurrentPage)=cint(i) then strTemp=strTemp & " selected "
strTemp=strTemp & ">第" & i & "页</option>"
next
strTemp=strTemp & "</select>"
end if
strTemp=strTemp & "</td></tr></table>"
response.write strTemp
end sub
'***********************************************
'函数名:GetURL
'作 用:获得当前网址并判断向地址中加入 ? 或 &
'参 数:search_str ----分页传递字符标示
'返回值:加了 ? 或 & 的网址
'***********************************************
Private Function Geturl(http://www.blog.com.cn/search_str)
Dim strurl,str_url,i,j,search_str,result_url
'search_str="page="
strurl=Request.ServerVariables("URL")'得到系统路径
Strurl=split(strurl,"/")'把字符串以"/"分开,返回一数组
i=UBound(strurl,1) '返回数组的最大下标
str_url=strurl(i)'得到当前页文件名
str_params=Request.ServerVariables("QUERY_STRING")'返回?后字符串
If str_params="" Then
result_url=str_url & "?"&search_str
Else
If InstrRev(str_params,search_str)=0 Then
result_url=str_url & "?" & str_params &"&"&search_str
Else
j=InstrRev(str_params,search_str)-2
If j=-1 Then
result_url=str_url & "?"&search_str
Else
str_params=Left(str_params,j)
result_url=str_url & "?" & str_params &"&" &search_str
End If
End If
End If
GetURL=result_url
End Function
%>