仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 298|回复: 8
打印 上一主题 下一主题

[学习教程] ASP网页设计ASP教程:ADO存取数据库时怎样分页显现

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:20:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
对用户来说可预见费用、节约费用,可以做到花少钱办大事。由于省去了购买软件和硬件等的前期费用,用户可以租用较高级的应用软件。ASP的收费是根据软件的类型、客制化程度、用户数量、服务期限来定的,对客户来说这笔费用是可以预见的。方便于客户应用软件的升级。ado|分页|教程|数据|数据库|显现甚么是ADO存取数据库时的分页显现?假如你利用过今朝浩瀚网站上的电子通告板程序的话,那你应当会晓得电子通告板程序为了进步页面的读取速率,一样平常不会将一切的帖子全体在一页中排列出来,而是将其分红多页显现,每页显现必定数量的帖子数,比如20条。这就是数据库查询的分页显现,假如你还不分明,往看看yahoo等搜刮引擎的查询了局就会分明了。那末事实怎样才干做到将数据库的查询了局分页显现呢?实在办法有良多,但次要有两种:
1、将数据库中一切切合查询前提的纪录一次性的都读进recordset中,寄存在内存中,然后经由过程ADORecordset工具所供应的几个专门撑持分页处置的属性:PageSize(页巨细)、PageCount(页数量)和AbsolutePage(相对页)来办理分页处置。
2、依据客户的唆使,每次分离从切合查询前提的纪录中将划定数量的纪录数读掏出来并显现。
二者的次要不同在于前者是一次性将一切纪录都读进内存然后再依据唆使来顺次做判别剖析从而到达分页显现的效果,尔后者是先依据唆使做出判别并将划定数量的切合查询前提的纪录读进内存,从而间接到达分页显现的功效。
我们能够很分明的感到到,当数据库中的纪录数到达上万或更多时,第一种办法的实行效力将分明低于第二种办法,由于当每个客户查询页面时都要将一切切合前提的纪录寄存在服务器内存中,然后在举行分页等处置,假如同时有凌驾100个的客户在线查询,那末ASP使用程序的实行效力将年夜受影响。可是,当服务器上数据库的纪录数和同时在线的人数并非良多时,二者在实行效力上是相差无几的,此时一样平常就接纳第一种办法,由于第一种办法的ASP程序编写绝对第二种办法要复杂了然很多。
在这里作者就以我们罕见的ASPBBS程序为例,来给人人剖析一下怎样在BBS程序里完成分页显现功效,因为我们一样平常利用的BBS程序的数据库纪录数和同时会见的人数都不会太多,以是以下程序实例是利用的先前所先容的第一种分页显现办法。
举行ADO存取数据库时的分页显现,实在就是对Recordset的纪录举行操纵。以是我们起首必需懂得Reordset工具的属性和办法:

  • BOF属性:今朝目标指到RecordSet的第一笔。
  • EOF属性:今朝目标指到RecordSet的最初一笔。
  • Move办法:挪动目标到RecordSet中的某一笔记录。
  • AbsolutePage属性:设定以后纪录的地位是位于哪一页AbsolutePosition属性:今朝目标在RecordSet中的地位。
  • PageCount属性:显现Recordset工具包含几“页”的数据。
  • PageSize属性:显现Recordset工具每页显现的纪录数。
  • RecordCount属性:显现Recordset工具纪录的总数。
上面让我们来具体熟悉一下这些主要的属性和办法
1、BOF与EOF属性
一般我们在ASP程序中编写代码来查验BOF与EOF属性,从而得知今朝目标所指向的RecordSet的地位,利用BOF与EOF属性,能够得知一个Recordset工具是不是包括有纪录大概得知挪动纪录行是不是已超越该Recordset工具的局限。
  如:
<%ifnotrs.eofthen...%>
<%ifnot(rs.bofandrs.eof)%>
若以后纪录的地位是在一个Recordset工具第一行纪录之前时,BOF属性前往true,反之则前往false。
若以后纪录的地位是在一个Recordset工具最初一行纪录以后时,EOF属性前往true,反之则前往false。
BOF与EOF都为False:暗示目标位于RecordSet确当中。
BOF为True:今朝目标指到RecordSet的第一条记录。EOF为True:今朝目标指到RecordSet的最初一条记录。
BOF与EOF都为True:在RecordSet里没有任何纪录。
2、Move办法
您能够用Move办法挪动目标到RecordSet中的某一条记录,语法以下:
  rs.MoveNumRecords,Start
这里的“rs”为一个工具变量,暗示一个想要挪动以后纪录地位的Recordset工具;“NumRecords”是一个正正数运算式,设定以后纪录地位的挪动数量;“start”是一个可选的项目,用来指定纪录肇端的标签。
一切的Recordset工具都撑持Move办法,假如NumRecords参数年夜于零,以后纪录地位向开端的偏向挪动;假如其小于零,则以后纪录地位向开首的偏向挪动;假如一个空的Recordset工具挪用Move办法,将会发生一个毛病。
MoveFirst办法:将以后纪录地位移至第一条记录。
MoveLast办法:将以后纪录地位移至最初一条记录。
MoveNext办法:将以后纪录地位移至下一条记录。MovePrevious办法:将以后纪录地位移至上一条记录。
Move[n]办法:挪动目标到第n条记录,n由0算起。
3、AbsolutePage属性
AbsolutePage属性设定以后纪录的地位是位于哪一页的页数编号;利用PageSize属性将Recordset工具支解为逻辑上的页数,每页的纪录数为PageSize(除最初一页大概会有少于PageSize的纪录数)。这里必需注重并非一切的数据供应者都撑持此项属性,因而利用时要当心。
与AbsolutePosition属性不异,AbsolutePage属性是以1为肇端的,若以后纪录为Recordset的第一行纪录,AbsolutePage为1。能够设定AbsolutePage属性,以挪动到一个指定页的第一行纪录地位。
4、AbsolutePosition属性
若您必要断定今朝目标在RecordSet中的地位,您能够用AbsolutePosition属性。
AbsolutePosition属性的数值为今朝目标绝对於第一笔的地位,由1算起,即第一笔的AbsolutePosition为1。
注重,在存取RecordSet时,没法包管RecordSet每次都以一样的按次呈现。
若要启用AbsolutePosition,必需先设定为利用用户端cursor(指针),asp码以下:
rs2.CursorLocation=3
5、PageCount属性
利用PageCount属性,决意Recordset工具包含几“页”的数据。这里的“页”是数据纪录的汇合,巨细即是PageSize属性的设定,即便最初一页的纪录数比PageSize的值少,最初一页也算是PageCount的一页。必需注重也并非一切的数据供应者都撑持此项属性。
6、PageSize属性
PageSize属性是决意ADO存取数据库时怎样分页显现的关头,利用它就能够决意几纪录构成一个逻辑上的“一页”。设定并创建一个页的巨细,从而同意利用AbsolutePage属性移到别的逻辑页的第一笔记录。PageSize属功能随时被设定。
7、RecordCount属性
这也是一个十分经常使用和主要的属性,我们经常使用RecordCount属性来找出一个Recordset工具包含几笔记录。如:<%totle=RS.RecordCount%>
在懂得了Recordset工具的以上属性和办法后,我们来思索一下,怎样使用它们来到达我们分页显现的目标。起首,我们能够为PageSize属性设置一个值,从而指定从纪录组中掏出的组成一个页的行数;然后经由过程RecordCount属性来断定纪录的总数;再用纪录总数除以PageSize便可失掉所显现的页面总数;最初经由过程AbsolutePage属性就可以完成对指定页的会见。好象很其实不庞大呀,上面让我们来看看程序该怎样完成呢?
我们创建如许一个复杂的BBS使用程序,它的数据库平分别有以下五个字段:“ID”,每一个帖子的主动编号;“subject”,每一个帖子的主题;“name”,加帖用户的姓名;“email”,用户的电子邮件地点;“postdate”,加帖的工夫。数据库的DSN为“bbs”。我们将显现帖子分页的一切步骤放在一个名为“ShowList()”的过程当中,便利挪用。程序以下:
----BBS显现帖子分页----
<%SubShowList()%>
<%
PgSz=20设定开关,指定每页所显现的帖子数量,默许为20帖一页
SetConn=Server.CreateObject("ADODB.Connection")
SetRS=Server.CreateObject("ADODB.RecordSet")
sql="SELECT*FROMmessageorderbyIDDESC"
查询一切帖子,并按帖子的ID倒序分列
Conn.Open"bbs"
RS.opensql,Conn,1,1
IfRS.RecordCount=0then
response.write"<P><center>对不起,数据库中没有相干信息!</center></P>"
else
RS.PageSize=Cint(PgSz)设定PageSize属性的值
Total=INT(RS.recordcount/PgSz*-1)*-1盘算可显现页面的总数
PageNo=Request("pageno")
ifPageNo=""Then
PageNo=1
else
PageNo=PageNo+1
PageNo=PageNo-1
endif
ScrollAction=Request("ScrollAction")
ifScrollAction="上一页"Then
PageNo=PageNo-1
endif
ifScrollAction="下一页"Then
PageNo=PageNo+1
endif
ifPageNo<1Then
PageNo=1
endif
n=1
RS.AbsolutePage=PageNo
Response.Write"<CENTER>"
position=RS.PageSize*PageNo
pagebegin=position-RS.PageSize+1
ifposition<RS.RecordCountthen
pagend=position
else
pagend=RS.RecordCount
endif
Response.Write"<P><fontcolor=Navy><B>数据库查询了局:</B>"
Response.Write"(共有"&RS.RecordCount&"条切合前提的信息,显现"&pagebegin&"-"&pagend&")</font></p>"
Response.Write"<TABLEWIDTH=600BORDER=1CELLPADDING=4CELLSPACING=0BGCOLOR=#FFFFFF>"
Response.Write"<TRBGCOLOR=#5FB5E2><FONTSIZE=2><TD><B>主题</B></TD><TD><B>用户</B></TD><TD><B>Email</B></TD><TD><B>公布日期</B></TD></FONT><TRBGCOLOR=#FFFFFF>"
Dowhilenot(RSisnothing)
RowCount=RS.PageSize
DoWhileNotRS.EOFandrowcount>0
Ifn=1then
Response.Write"<TRBGCOLOR=#FFFFFF>"
ELSE
Response.Write"<TRBGCOLOR=#EEEEEE>"
EndIf
n=1-n%>
<TD><spanstyle="font-size:9pt"><Ahref=view.asp?key=<%=RS("ID")%>><%=RS("subject")%></A></span></td>
<TD><spanstyle="font-size:9pt"><%=RS("name")%></A></span></td>
<TD><spanstyle="font-size:9pt"><ahref="mailto:<%=RS("email")%>"><%=RS("email")%></a></span></TD>
<TD><spanstyle="font-size:9pt"><%=RS("postdate")%></span></td>
</TR>
<%
RowCount=RowCount-1
RS.MoveNext
Loop
setRS=RS.NextRecordSet
Loop
Conn.Close
setrs=nothing
setConn=nothing
%>
</TABLE>
<FORMMETHOD=GETACTION="list.asp">
<INPUTTYPE="HIDDEN"NAME="pageno"VALUE="<%=PageNo%>">
<%
ifPageNo>1Then
response.write"<INPUTTYPE=SUBMITNAME=ScrollActionVALUE=上一页>"
endif
ifRowCount=0andPageNoTotalthen
response.write"<INPUTTYPE=SUBMITNAME=ScrollActionVALUE=下一页>"
endif
response.write"</FORM>"
Endif
%>
<%EndSub%>
信任人人都应当能完整读懂下面的程序,因而作者就不在此具体注释了。值得注重的是在这段程序中使用了一个小技能
<INPUTTYPE="HIDDEN"NAME="pageno"VALUE="<%=PageNo%>">
,这是用来在每次挪用该ASP文件时传送数据的“暗道”,因为我们必要在每次挪用程序时传送代表以后页码的参数,大概人人会想到利用session,可是从节俭体系资本和通用性来说,用如许一个埋没的form来传送数据将会到达更好的效果。
减少客户内IT专业人才缺乏带来的影响。ASP的客户员工利用浏览器进入相关的应用软件,简单易用,无需专业技术支持。
因胸联盟 该用户已被删除
沙发
发表于 2015-1-19 09:00:00 来自手机 | 只看该作者
交流是必要的,不管是生活还是学习我们都要试着去交流,通过交流我们可以学到很多我们自己本身所没有的知识,可以分享别人的经验甚至经历。
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-24 16:50:54 | 只看该作者
从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了
变相怪杰 该用户已被删除
地板
 楼主| 发表于 2015-2-2 11:20:41 | 只看该作者
如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:
爱飞 该用户已被删除
5#
发表于 2015-2-7 18:54:33 | 只看该作者
ASP的语言不仅仅只是命令格式差不多,而是包含在<%%>之内的命令完全就是VB语法。虽然ASP也是做为单独的一个技术来提出的,但他就是完全继承了VB所有的功能。
蒙在股里 该用户已被删除
6#
发表于 2015-2-23 00:52:31 | 只看该作者
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
海妖 该用户已被删除
7#
发表于 2015-3-7 05:15:06 | 只看该作者
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
老尸 该用户已被删除
8#
发表于 2015-3-14 12:47:26 | 只看该作者
Request:从字面上讲就是“请求”,因此这个是处理客户端提交的东东的,例如Resuest.Form,Request.QueryString,或者干脆Request("变量名")
不帅 该用户已被删除
9#
发表于 2015-3-21 09:05:13 | 只看该作者
跟学别的语言一样,先掌握变量,流程控制语句(就是ifwhileselect)等,函数/过程,数组
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-21 03:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表