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