ADO存取数据库时如何分页显示(ASP版)(理论+实践)
进行 ADO 存取数据库时的分页显示,其实就是对 Recordset 的记录进行操作。所以我们首先必须了解 Reordset 对象的属性和方法:
- BOF 属性:目前指标指到 RecordSet 的第一笔。
- EOF 属性:目前指标指到 RecordSet 的最后一笔。
- Move 方法:移动指标到 RecordSet 中的某一条记录。
- AbsolutePage 属性:设定当前记录的位置是位于哪一页 AbsolutePosition 属性:目前指标在 RecordSet 中的位置。
- PageCount 属性:显示 Recordset 对象包括多少“页”的数据。
- PageSize 属性:显示 Recordset 对象每一页显示的记录数。
- RecordCount 属性:显示 Recordset 对象记录的总数。
属性说明:
- BOF 与 EOF 都为 False:表示指标位于 RecordSet 的当中。
BOF 为 True:目前指标指到 RecordSet 的第一笔记录。
EOF 为 True:目前指标指到 RecordSet 的最后一笔记录。
BOF 与 EOF 都为 True:在 RecordSet 里没有任何记录。 - 可以用 Move 方法移动指标到 RecordSet 中的某一笔记录,语法如下: rs.Move NumRecords,Start
(NumRecords”是一个正负数运算式,设定当前记录位置的移动数目;“start”是一个可选的项目,用来指定记录起始的标签。)
MoveFirst 方法:将当前记录位置移至第一笔记录。
MoveLast 方法:将当前记录位置移至最后一笔记录。
MoveNext 方法:将当前记录位置移至下一笔记录。 MovePrevious 方法:将当前记录位置移至上一笔记录。
Move [n] 方法:移动指标到第 n 笔记录, n 由 0 算起。
代码(最简单的分页,有待优化,学习下原理):
<%
set rs=server.CreateObject("ADODB.RecordSet")
rs.open"select * from liuyan order by addtime desc",conn,1,1
page=request.querystring("page")
if isnumeric(page)=false then page=1
If page="" or page<1 Then page=1
recordcountnum=Rs.recordcount
Rs.pagesize = 1
If page-Rs.pagecount>0 Then page=Rs.pagecount
Rs.absolutepage=page
for i=1 to rs.PageSize
if rs.EOF or rs.BOF then exit for
%>
这里是循环的内容<%=rs("id")%><br />
<%
rs.movenext
next
%>
<br />
当前:<%=page%>页/共<%=rs.PageCount%>页 | 共<%=recordcountnum%>条记录
<a href="index.asp?page=1">首页</a>
<a href="index.asp?page=<%=page-1%>">上一页</a>
<a href="index.asp?page=<%=page+1%>">下一页</a>
<a href="index.asp?page=<%=rs.PageCount%>">尾页</a>
<select name="sel_page" onChange="javascript:location=this.options[this.selectedIndex].value;">
<%
for i = 1 to rs.PageCount
if i = intpage then%>
<option value="index.asp?page=<%=i%>" selected><%=i%></option>
<%else%>
<option value="index.asp?page=<%=i%>"><%=i%></option>
<%
end if
next
%>
</select>