冷月葬花魂 发表于 2015-1-16 22:31:52

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是怎么工作的。

admin 发表于 2015-1-19 16:11:30

如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:

简单生活 发表于 2015-1-24 15:49:29

尽管MS自己讲C#内核中更多的象VC,但实际上我还是认为它和Java更象一些吧。首先它是面向对象的编程语言,而不是一种脚本,所以它具有面向对象编程语言的一切特性,比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。

小魔女 发表于 2015-2-2 07:21:57

如何学好ASP,以前也有人问过,把回答给你转过来看看能否对你有帮助:

乐观 发表于 2015-2-7 17:39:18

哪些内置对象是可以跳过的,或者哪些属性和方法是用不到的?

山那边是海 发表于 2015-2-22 20:11:02

从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了

变相怪杰 发表于 2015-3-7 02:06:32

弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。

深爱那片海 发表于 2015-3-14 07:40:51

我就感觉到ASP和一些常用的数据库编程以及软件工程方面的思想是非常重要的。我现在也在尝试自己做网页,这其中就用到了ASP,我想它的作用是可想而知的。

因胸联盟 发表于 2015-3-21 01:20:47

从事这个行业,那么你可以学ASP语言,简单快速上手,熟练dreamweav排版,写asp代码,熟练photoshop处理图片,打好基础就行了
页: [1]
查看完整版本: ASP网页编程之使用ASP完成对表的分页扫瞄