ASP查询分页显示
数据库查询是网络编程中最常用的功能之一,在一个实用的商业网站中,一次查询的结果很可能多达数百条记录,单屏显示极不方便,因此需要用到分页显示技术。ASP配合ADO的RecordSet对象,提供了一个实现分页的简明途径,下面就一段示例代码进行详解。
在解说之前,做如下假设:将以下代码存为pagelist.asp,并在同一目录下建一数据库studentlib.mdb,库中有表student01,含三个字段,即“学号”、“姓名”和“班级”,然后输入相应记录即可。将pagelist.asp与studentlib.mdb同置于Web服务器虚拟目录下,即能用浏览器观察结果了。
<%=″
″%>
<%
PSize=5 ′指定每一页所显示的记录数目。
Set Conn = Server.CreateObject(″ADODB.Connection″)
Set Rs_main = Server.CreateObject(″ADODB.RecordSet″)
′ADODB.RecordSet类提供了访问数据库的便捷方法,此处建立它的实例并赋予变量Rs_mainDBPath = Server.MapPath(″studentlib.mdb″)。
′Server是ASP内置对象,此处用其MapPath方法将所用数据库的相对路径映射为物理路径conn.Open ″driver={Microsoft Access Driver (*.mdb)};dbq=″ & DBPath。
′这里直接指定了数据源,也可以在“控制面板”中的“32位ODBC”中建立数据源,并在此处使用conn.Open ″数据源名″。
sql = ″SELECT * FROM student01 order by 学号″
′查询所有记录,并按记录的学号排列,实际应用中,你可用从表单获取的查询字符串来代替它。
Rs_main.open sql,Conn,1,1
′以只读方式打开数据源并执行查询,如果是写方式则应该是Rs_mian.open sql,Conn,1,3。
If Rs_main.RecordCount=0 then
response.write ″
else
Rs_main.PageSize = Cint(PSize)
′设定PageSize属性的值,这是RecordSet对象进行分页显示最重要的属性,指定它也就指定了每页显示的记录数,同时也就等于指定了其另一属性PageCount,即总页数的值,这样就完成了在逻辑上对查询结果的分页。
PageN=Request(″tempage″)
if PageN=″″ Then
PageN = 1
end if
SA = Request(″Coms″)
if SA = ″ 上一页 ″ Then
PageN=PageN-1
elseif SA = ″ 下一页 ″ Then
PageN=PageN+1
elseif SA = ″ 确 定 ″ Then
PageN=Request(″p″)
′此处容错略,应防止传来不合范围的页号。
end if
′以上几句用来确定要显示的页号。在本程序的最后设了一个表单,包括上下页按钮,接收用户键入页号的文本框及一个隐藏元素,都是用来传递页号的。
Rs_main.AbsolutePage = PageN
′将页号赋予AbsolutePage属性。这是分页显示中又一个关键属性,将页号赋予它的作用便是当前记录指针被移到了该页的首条记录上。
Response.Write ″
pagebegin=Rs_main.PageSize*(PageN-1)+1
if Rs_main.PageSize*PageN < Rs_main.RecordCount then
pagend=Rs_main.PageSize*PageN
else
pagend= Rs_main.RecordCount
end if
′计算当前页记录的起始和终止位置。注意,这里得到的两个值是从1开始的,仅是供显示用,告诉用户当前显示的是从第几条到第几条,而不是真正的记录号,真正的记录号是从0开始的。
n=1′配合下面的n=1-n句,轮换表格背景色,提高显示效果。
Total=Rs_main.PageCount ′将总页数赋予Total。
Response.Write ″
数据库查询结果:″
Response.Write ″(共有″&Rs_main.RecordCount&″条符合条件的信息,分″&Total&″页,显示第″&PageN&″页[″&pagebegin&″-″&pagend&″])
| 学号 | 姓名 | 班级 |
| <% =Rs_main(″学号″)%> | <% =Rs_main(″姓名″)%> | <% =RS_main(″班级″)%> |
″
′以上这个表单,综合提供给了用户查看不同页面的手段。
end if
%>
怎么样,看到查询结果一页页显示出来时,你是否会很开心呢?这里只是用ACCESS数据库做个例子,真正应用中,你也可以把它用在SQL Server或ORACLE数据库中。好了,有什么疑问的话,请和我联系,我的E-mail是:netsurf@990.net