ASP网页编程之使用ASP完成对表的分页扫瞄
当然了,现在国内CRM厂商的产品与其说是CRM,但从至少从我的角度分析上来看,充其量只是一个大型的进销存而已了,了解尚浅,不够胆详评,这里只提技术问题人人都晓得,ASP有着壮大的数据库操纵才能,这与她能便利的挪用ActiveX工具是密不成分的。上面我给人人先容一种ASP使用ADO工具完成对数据库纪录分页显现的办法。以下代码均在WIN98+PWS+MSACCESS情况下经由过程。在这里我次要经由过程ADO工具会合的Recordset工具来完成各类数据库操纵的。先先容几个用于分页显现的Recordset属性。<P> PageSize:每页显现的纪录数。
PageCount:依据用户设好的PageSize和表中的总纪录数,体系主动算出总页数。
RecordCount:表中的总纪录数。
AbsolutePage:暗示以后页码。如将AbsolutePage属性设为3,则以后纪录移至第3页第1条(也就是第31条)。
<P> 看到Recordset有了这几个属性后,信任人人也都以为做一个分页显现的程序是很复杂的。上面讲一下思绪,一切完成这一功效的代码都放在display.asp中,按实行的按次分离是:翻开数据库及表、读取用户请求的显现体例、设定好PageSize和AbsolutePage、将内容输入到扫瞄器、设定好导航条。以下是代码:
<%---------------------------翻开数据库及表
setconn=server.createobject("ADODB.Connection")
filepath=server.mappath("abc.mdb")-------假定数据库文件是"abc.mdb"
conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&filepath
setrs=server.createobject("ADODB.Recordset")
rs.open"main",conn,3,2-------假定表的名字是"main"
%>
<%---------------------------读取用户请求的显现体例(经由过程参数传送)
line=cint(request("line"))
page=cint(request("page"))
%>
<%---------------------------按用户请求设定好显现体例
rs.PageSize=line
rs.AbsolutePage=page
%>
<%---------------------------显现内容%>
<tablewidth="100%"border="1">
<tr>
<%fori=0tors.Fields.Count-1%>
<td><%=rs.Fields(i).name%></td>
<%next%>
</tr><%-------以上部分显现表头,即字段名%>
<%fori=1tors.PageSize%>
<tr>
<%forj=0tors.Fields.Count-1%>
<td><%=rs.Fields(j).value%></td>
<%next%>
</tr>
<%rs.movenext%>
<%ifrs.eofthenexitfor%>
<%next%><%-------以上部分显现表的内容%>
</table>
<%---------------------------导航条%>
<tablewidth=100%><tr>
<td>
<%ifpage<>1then%>
<ahref=display.asp?page=1&line=<%=line%>>第一页</a>
<%else%>第一页<%endif%>
</td>
<td>
<%ifpage>1then%>
<ahref=display.asp?page=<%=page-1%>&line=<%=line%>>前一页</a>
<%else%>前一页<%endif%>
</td>
<td>
<%ifpage<rs.PageCountthen%>
<ahref=display.asp?page=<%=page+1%>&line=<%=line%>>下一页
<%else%>下一页<%endif%>
</td>
<td>
<%ifpage<>rs.PageCountthen%>
<ahref=display.asp?page=<%=rs.PageCount%>&line=<%=line%>>最初一页</a>
<%else%>最初一页<%endif%>
</td><%-------以上四项都必要举行判别:假如在第一页就不供应“第一页”和“前一页”的链接
-------假如在最初一页就不供应“最初一页”和“后一页”的链接%>
<td>
<formmethod="POST"action="display.asp?line=<%=line%>">
请输出页码:<inputtype="text"name="page"size="3"value="<%=page%>">
</form>
</td>
<td>
<formmethod="POST"action="display.asp?page=<%=page%>">
请设定每页<inputtype="text"name="line"size="3"value="<%=line%>">行
</form>
</td><%-------由于两个表单都只要一个表单域,以是没有供应发送按钮,间接打回车就好了%>
<td>
第<%=page%>页/总<%=rs.PageCount%>页
</td>
</tr></table>
这只是一个最基础的程序,没有举行优化处置,也另有一些bug,上面我们一同来使它更“完善”一些。
<P>一.关于参数传送。假设表中有46笔记录,然后我们在地点栏中敲进http.//localhost/display.asp?line=10&page=2(假定这是准确的路径)一定扫瞄器将给我们显现第二页的十笔记录。可是假如在地点栏中只敲进http.//localhost/display.asp,扫瞄器却给我们一个堕落信息。怎样办理呢?我们必需在读取这些参数时加一个判别,假如参数是空的,就赋给它一个初值,以防堕落。将“读取用户请求的显现体例”部分用以下代码取代:
<%
ifrequest("page")<>""then
page=cint(request("page"))
else
page=1-------假如参数page为空,就给它赋值1
endif
ifrequest("line")<>""then
line=cint(request("line"))
else
line=10-------假如参数line为空,就给它赋值10
endif
%>
二.参数的公道性成绩。假如我们在地点栏中敲进http.//localhost/display.asp?line=20&page=4会呈现甚么情形呢?扫瞄器报错。由于表中只要46笔记录,而我们要它以每页显现二十条,第四页的二十笔记录,也就是第六十一条到第八十笔记录。明显会堕落。一样情形还会呈现在导航条中,假如以后扫瞄器中显现的是以每页十条,第四页的内容,我们往设定它以每页二十条显现,一样也会堕落。办理办法仍是一样的,先判别一下参数的公道性,然后再设置显现体例。将“按用户请求设定好显现体例”部分用以下代码取代。
<P><%
ifpage>(rs.RecordCount-1)line+1then
-------经由过程盘算可知,最年夜页数=(总纪录数-1)每页行数+1
response.write("error!")-------假如参数分歧实践,输入"error!"
response.end-------停止程序
endif
rs.PageSize=line
rs.AbsolutePage=page
%>
三.考证表单域。导航条中的两个输出文本框输出的都必需是整数,不然也会堕落。我们能够使用FrontPage的考证表单域功效开完成,这里就未几说了。
四.优化。到今朝为止,这个程序另有一个弱点。在数据库的存取过程当中,最花工夫的要数是数据库的翻开和Recordset工具的创建,而这个程序每次实行城市翻开数据库及创建Recordset工具,极年夜的下降了效力,一旦会见量增年夜,这个程序也就是往了代价。办理的举措是:第一次实行程序时,翻开数据库及创建Recordset工具,并将这些存在session中,下次实行时间接将session中的值前往就好了。用以下代码取代“翻开数据库及表”部分。
<P><%
ifnotisobject(session("conn"))then
setconn=server.createobject("ADODB.Connection")
filepath=server.mappath("abc.mdb")
conn.Open"driver={MicrosoftAccessDriver(*.mdb)};dbq="&filepath
setrs=server.createobject("ADODB.Recordset")
rs.open"main",conn,3,2
setsession("conn")=conn
setsession("rs")=rs
else
setconn=session("conn")
setrs=session("rs")
endif
%>
ActiveServerPage技术为应用开发商提供了基于脚本的直观、快速、高效的应用开发手段,极大地提高了开发的效果。在讨论ASP的安全性问题之前,让我们来看看ASP是怎么工作的。 如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助: 尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。 如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助: 哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的? 从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了 弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。 我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。 从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了
页:
[1]