这种分页方法是:将数据库中所有符合查询条件的记录一次性的都读入 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' οnchange=""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
% >
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' οnchange=""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
% >