如何在ASP中处理大量数据的分页显示?(200分)

  • 主题发起人 主题发起人 hntangwei
  • 开始时间 开始时间
H

hntangwei

Unregistered / Unconfirmed
GUEST, unregistred user!
在ASP中显示大量的数据分页时,通常的办法是:
在Session变量中保存数据库中取来的数据信息,在显示下一页时,
利用RecordSet的分页功能来完成。可问题时,在有大量用户访问的时
候,Session变量使用的内存是非常可怕的,而且,session变量有可
能释放不干净。
如何不用session来完成分页显示数据库信息的功能?
 
在querystring中请求
 
Pipi :
能否详细点?
 
这样,你要做的就是session你的查询语句而已,不用session你的查询结果啊,在网
页里再hide一个pagenumber什么的,提交后,就根据这个pagenumber来设置
absolutepage,从新查询,然后显示,同时改你网页里的hide变量pagenumber,至于
一页显示多少,看你的reocordset的 pagesize啦..
 
大致如下:

Dim iPageSize 'How big our pages are
.....

' Get parameters
iPageSize = 10 ' You could easily allow users to change this
If Request.QueryString("page") = "" Then
iPageCurrent = 1
Else
iPageCurrent = CInt(Request.QueryString("page"))
End If
....

Do While objPagingRS.AbsolutePage = iPageCurrent And Not objPagingRS.EOF
Response.Write vbTab & "<TR>" & vbCrLf
For I = 1 To objPagingRS.Fields.Count
Response.Write vbTab & vbTab & "<TD>"
Response.Write objPagingRS.Fields(I - 1)
Response.Write "</TD>" & vbCrLf
Next 'I
Response.Write vbTab & "</TR>" & vbCrLf

' Can't forget to move to the next record!
objPagingRS.MoveNext
Loop
....

其实,也不一定要用AbsolutePage ,如大富翁,你可以看看大富翁的源代码。

 
我不知道
 
同意boy_zyz
我就是这样做的。
 


ASP、SQL SERVER的分页显示

--------------------------------------------------------------------------------

<%
page=Request.QueryString("page") '取page值

'数据库中查询
Set conn=Server.CreateObject("ADODB.Connection")
sql="select * from table"
Set rs=conn.Execute(sql)

rs.PageSize=30 '设置分的页数,设好后系统会自动将rs.PageCount计算出来

If Page<1 Then Page=1
If Page=null Then Page=1
If Page>rs.PageCount Then Page=rs.PageCount 'rs.PageCount是总页数

rs.AbsolutePage=page '将要显示的页数

If page<>1 Then
Response.Write"<a href=show.asp?page=1>首页</a>"
Response.Write"<a href=show.asp?page="&(page-1)前页</a>"
End If
If page<>rs.PageCount Then
Response.Write"<a href=show.asp?page="&(page+1)>后页</a>"
Response.Write"<a href=show.asp?page="&rs.PageCount>尾页</a>"
End If

'显示分页
For iPage=1 To rs.PageSize
%>
<%=rs("显示字段")%>
<%rs.MoveNext '若到尾部则跳出
If rs.EOF Then Exit For
Next
%>
<a href="http://www.aspchina.com/web/wenzhang/look.asp?id=53&click=1043&leibie=1"从这里来的 </a>
 
不太懂,不过刚好看到一样的文章,就灌一点吧!

WEB数据库分页浏览的技巧

国防大学图书馆技术室 王渤

【提要】本文讲述了ASP开发WEB数据库时,控制网络数据流量,进行分页浏览输出的方法,阐述了分页浏览使用的主要技术和手段,介绍了RECORDSET对象与分页显示有关的技术与基础,文章中以实例介绍了数据记录分页显示的关键技术,并给出了设计思想和具体程序设计。

开发WEB数据库的查询时,为了限制网络流通量,通常会采用SQL(结构化查询语言)查询方式,在其条件子句中使用WHERE条件来筛选输出的记录。但是WHERE子句并不能完全限制用户在网上的查询范围,当查询条件范围较广时,必需要限制输出的数据总量,但上网者只能看到最前面的查询结果。
如果既要控制数据流量,又要让用户浏览所有查询到的数据记录,最普遍最有效的方式是将所查询的全部结果数据进行分页处理,并能提供“上一页”、“下一页”、“第一页”、“最后一页”等功能,或者能够直接定位到某一页,让上网者能逐一浏览每一页的数据记录。

一、 ADO的RECORDSET对象
在作者的《再论ASP开发WEB数据库》一文中,介绍过ADO的各种属性和方法,其中RECORDSET对象是最常用的对象,首先通过以下语句建立RECORDSET对象:
Set conn = Server.CreartObject ("ADODB.connection")
Conn.open "DNS设置"
'以上语句建立ADO联接
Set rs = Server.CreatObject ("ADODB.Recordset")
Rs.open Sql , Conn , adopenStatic
'以上两条语句用于建立RECORDSET对象并打开数据库
通常,我们使用RECORDSET对象的Excute方法打开数据表,如下语句所示:
Set rs = conn.Excute ("SQL语句")
但是使用RECORDSET对象的Excute方法打开数据对象是只能向前滚动的(Forword-Only),当我们读取此类数据记录时,能够调用的只有其MoveNext方法,只能一步步向前移动记录,这种方法不能完成分页显示的功能,因此使用以下方法打开数据记录集:
rs.Open 数据表名或SQL语句,Connection对象,Recordset类型,锁定类型
然后利用RECORDSET对象的“rs.AbsolutePage=n”来设置当前数据记录。

二、 RECORDSET对象的OPEN函数
OPEN函数使用中的参数中,“数据表名或SQL语句”,指具体的要使用的数据表名或者是SQL查询语句,“Connection对象”是一个已经打开的数据库对象,“Recordset类型”有以下四种设置值:
RECORDSET类型设置值
意义
AdOpenForwordOnly (=0)
只读,记录只能向前滚动
AdOpenStatic (=3)
只读,记录可以自由滚动
AdOpenKeyset (=1)
读写,记录可以自由滚动
AdOpenDynamic (=2)
读写,记录可以自由滚动 *
*与上一条区别是该模式可以自动更新当前数据表的数据
“锁定类型”的设置值有以下四种:
锁定类型的设置值
意义
AdLockReadOnly (=1)
打开只读的数据记录
AdLockPressimistic (=2)
悲观锁定
AdLockOptimistic (=3)
乐观锁定
AdLockBatchOptimistic (=4)
批次乐观锁定
为了实现分页显示,在打开RECORDSET对象后,必须先设置PageSize属性(每页的数据记录条数),RECORDSET对象才能计算数据记录的总条数,如下语句设置每页大小为10行:
rs.PageSize = 10
则RECORDSET对象的PageCount属性将设为:
((记录总数-1)/10)+1 (页)
设置rs.PageSize属性后,则可以通过对AbsolutePage属性的设置,将当前数据记录设置到某一页的第一条记录上,如下语句:
rs. AbsolutePage = 3
则当前记录则移动到第3页(每页为10行)的第一条记录上,因此输出某一页数据记录的程序如下:

rs. AbsolutePage = Page 'Page为页码号
For I=1 to rs.PageSize '输出本页的每条记录
'些处输出数据记录
rs.MoveNext '记录移动到下一条
if rs.EOF then exit for '若是记录尾则退出输出,因为若是最后一页,则可以没有足够的数据输出。
Next I

三、 分页显示的技巧实例:显示任一页数据
以下例程用于显示某一页的全部数据:
Sub ShowOnePage( rs, Page )
'rs为打开的数记录集,Page为要显示的页码
Response.Write "<CENTER><TABLE BORDER=1>"
Response.Write "<TR BGCOLOR=#00FFFF>"
Response.WRITE "<TD>序号</TD>"
For i=0 to rs.Fields.Count-1
'输出表头名称
Response.WRITE "<TD>" & rs.Fields(i).Name & "</TD>"
Next
Response.Write "</TR>"

rs.AbsolutePage = Page '设置当前页号
For iPage = 1 To rs.PageSize '输出当前页的所有记录
Response.Write "<TR>"
RecNo = (Page - 1) * rs.PageSize + iPage '计算输出的记录序号
Response.Write "<TD>" & RecNo & "</TD>"
For i=0 to rs.Fields.Count-1 '输出每一字段
Response.WRITE "<TD>" & rs.Fields(i).Value & "</TD>"
Next
Response.Write "</TR>"
rs.MoveNext
If rs.EOF Then Exit For
Next
Response.Write "</TABLE></CENTER>"
End Sub

四、 提供更具浏览性的网页
上网者往往查询多达几十页资料数据,从用户角度考虑,应该提供更直观方便的页面,不妨提供以下功能以方便上网者:

第一页 上一页 下一页 最后一页 输入页号: 总页数:

ASP程序实现如下:
'此处打开数据库联接及数据表对象
<%
If Request("Page") = "" Then Page=10
Page = CLng(Request("Page")) ' CLng 不可省略,用于将页码转换为长整型
If Page < 1 Then Page = 1
If Page > rs.PageCount Then Page = rs.PageCount
%>
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html; charset=gb_2312-80">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>分页浏览数据库的技巧</title>
</head>

<body bgcolor="#FFFFFF">
<h2 align="center">利用SQL命令筛选数据记录</h2>

<hr>
<%
ShowOnePage rs, Page
%>
<hr>

<form action="当前文件.asp" method="GET">
<%
If Page <> 1 Then
Response.Write "<A HREF=PageS23.asp?Page=1>第一页</A>?"
Response.Write "<A HREF=PageS23.asp?Page=" & (Page-1) & ">上一页</A>?"
End If
If Page <> rs.PageCount Then
Response.Write "<A HREF=PageS23.asp?Page=" & (Page+1) & ">下一页</A>?"
Response.Write "<A HREF=PageS23.asp?Page=" & rs.PageCount & ">最后一页</A>?"
End If
%> <p align="right">输入页数:<input type="text" size="3"
name="Page"> 页数:<font color="#FF0000"><%=Page%>/<%=rs.PageCount%></font> </p>
</form>
</body>
</html>

 
不知这次出不出得来
ASP、SQL SERVER的分页显示

--------------------------------------------------------------------------------

<%
page=Request.QueryString("page") '取page值

'数据库中查询
Set conn=Server.CreateObject("ADODB.Connection")
sql="select * from table"
Set rs=conn.Execute(sql)

rs.PageSize=30 '设置分的页数,设好后系统会自动将rs.PageCount计算出来

If Page<1 Then Page=1
If Page=null Then Page=1
If Page>rs.PageCount Then Page=rs.PageCount 'rs.PageCount是总页数

rs.AbsolutePage=page '将要显示的页数

If page<>1 Then
Response.Write"<a href=show.asp?page=1>首页</a>"
Response.Write"<a href=show.asp?page="&(page-1)前页<a>"
End If
If page<>rs.PageCount Then
Response.Write"<a href=show.asp?page="&(page+1)>后页</a>"
Response.Write"<a href=show.asp?page="&rs.PageCount>尾页</a>"
End If

'显示分页
For iPage=1 To rs.PageSize
%>
<%=rs("显示字段")%>
<%rs.MoveNext '若到尾部则跳出
If rs.EOF Then Exit For
Next
%>
<a href="http://www.aspchina.com/web/wenzhang/look.asp?id=53&click=1043&leibie=1"从这里来的 </a>
 
真乱
我觉的就是在session里保持sql语句
提交的时候传递第几,这样服务器的负担也很重但不会造成
内存暴掉
 
多人接受答案了。
 
后退
顶部