ASP编程入门进阶(二十):ADO组件之分页程序

应该来说,学会了如何插入记录,如何显示记录,那么现在简单的完整的文章系统、新闻系统和留言系统不成问题。那接着下面的问题就是:随着信息内容的不段增加,单独通过一张页面显示所有信息是不行也是很不理性的。所以,解决的办法就是采用分页技术。

1,rs.RecordCount
很显然,RecordCount就是用来显示数据库表中一共多少条记录的,也可以形象地说表中一共有多少行。经常用在分页中就是一共有N篇文章等总计的信息显示。

2,rs.PageSize
rs.PageSize也就是一页的大小,也就表示一张ASP页可以显示记录的条数。值是自己定义的,比如经常看到的每页显示N篇文章之类的信息。

3,rs.AbsolutePage 和 rs.pagecount
说到分页,一定不能不提到 rs.AbsolutePage 。记录集的AbsolutePage属性最主要的作用就是决定着当前显示的是第几页。它的值是有依据的,指定了rs.PageSize,那么rs.pagecount的信息值就是rs.RecordCount和rs.PageSize整除结果。比如:总信息记录rs.RecordCount共20条,每页显示条数rs.PageSize设为5条,那么页数rs.pagecount数就是20/5=4页次,而rs.AbsolutePage则就只能是第1页,第2页……第4页。

说到现在,弄个具体程序来调试一下。继续对showit.asp进行修改如下:





<!--#include file="conn.asp" -->

<%
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from cnarticle order by cn_id desc"
rs.Open sql,conn,1,1
%>

<%
page=request.querystring("page") 'page值为接受值
rs.PageSize = 2 '每页显示记录数
rs.AbsolutePage = Page '显示当前页等于接收的页数
%>

<%
For i = 1 to rs.PageSize '利用for next 循环依次读出当前页的记录
if rs.EOF then
Exit For
end if
response.write("<br>文章内容是:"& rs("cn_content"))
rs.MoveNext
next%>

<%
rs.close
Set rs = Nothing
conn.close
set conn=nothing
%>

HERE,你调试的前提就是数据库中的记录相对要大于4条,这样测试效果才明显;还有测试的方法就是在showit.asp后面添加?page=1或者?page=2等调试观察网页显示效果。

其实,说到底,显示数据库内容就是





<%
For i = 1 to rs.PageSize
if rs.EOF then
Exit For
end if
response.write("<br>文章内容是:"& rs("cn_content"))
rs.MoveNext
next%>


起的作用,但想象一下:该程序应该都只能显示出2条信息(一直不变的2条信息)。但为什么加上?page=1?page=2会显示不同的结果呢?……那绝对就是rs.AbsolutePage的作用了。这个搞清楚,相信分页的整体架构就有点眉目了。





<!--#include file="conn.asp" -->

<%
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from cnarticle"
rs.Open sql,conn,1,1
%>

<%filepath=request.servervariables("path_info")%>
<%
page=request.querystring("page") 'page值为接受值
rs.PageSize = 2 '每页显示记录数
if Not IsEmpty(page) then '如果page已经初始化...
if Not IsNumeric(page) then '判断page值是否为数字
page=1
else
Page = cint(page) '接收page并化为数字型赋给page变量
end if
if Page > rs.PageCount then '如果接收的页数大于总页数
rs.AbsolutePage = rs.PageCount '设置当前显示页等于最后页
elseif Page <= 0 then '如果page小于等于0
rs.AbsolutePage = 1 '设置当前显示页等于第一页
else
rs.AbsolutePage = Page '如果大于零,显示当前页等于接收的页数
end if
else
rs.AbsolutePage=1
end if
Page = rs.AbsolutePage%>

<%
For i = 1 to rs.PageSize '利用for next 循环依次读出当前页的记录
if rs.EOF then
Exit For
end if
response.write("文章标题是:"& rs("cn_title"))
response.write("<br>文章作者是:"& rs("cn_author"))
response.write("<br>文章加入时间是:"& rs("cn_time"))
response.write("<br>文章内容是:"& rs("cn_content"))
response.write("<hr>")
rs.MoveNext
Next
%>

<form action="<%=filepath%>" method="get">
<!--首先保证总页数不为1、不为0-->
<%if rs.pagecount<>1 and rs.pagecount<>0 then%>
<!--如果当前页数大于1,无论何时都应显示首页和上一页的连接-->
<%if page>1 then%>
[<a Href="<%=filepath%>?Page=<% = 1%>">首页</a>]
[<a Href="<%=filepath%>?Page=<% = page -1 %>">上一页</a>]
<!--如果当前页数大于1并且小于总页面数时,显示出尾页和下一页的连接-->
<%if page<rs.pagecount then %>
[<a Href="<%=filepath%>?Page=<% = page + 1%>">下一页</a>]
[<a Href="<%=filepath%>?Page=<% = rs.PageCount%>">尾页</a>]
<!--如果当前页数大于1并且仍大于或等于总页面数时,不显示出尾页和下一页的连接-->
<%else%>
[下一页] [尾页]
<%end if%>
<!--否则,当前页数不大于1,则只显示尾页和下一页的连接-->
<%else%>
[首页] [上一页]
[<a Href="<%=filepath%>?Page=<% = page + 1%>">下一页</a>]
[<a Href="<%=filepath%>?Page=<% = rs.PageCount%>">尾页</a>]
<%end if %>
<!--最终,总页数若为1、为0则没有任何连接-->
<%else%>
[首页] [上一页] [下一页] [尾页]
<%end if%>

[页次:<font color=red><b><%=page%></b></font>/<%=rs.PageCount%>]
[共<%=rs.RecordCount%>篇 <font color=red><b><%=rs.PageSize%></b></font>篇/页]
转到<input name="page" size=5 value="<%=page%>">页
<input type="submit" value="Enter">
</form>

<%
rs.close
Set rs = Nothing
conn.close
set conn=Nothing
%>

效果页面参看:
http://www.cnbruce.com/database/

长长的分页代码,搞懂是真不容易,平台引用起来还需要修改也是比较麻烦。最后能做成一个函数,下次调用起来就很方便了。





<%
function pagination(pagecount,pagesize,page,resultcount)
    Dim query, a, x, temp
    action = "http://" & Request.ServerVariables("HTTP_HOST") & Request.ServerVariables("SCRIPT_NAME")
    query = Split(Request.ServerVariables("QUERY_STRING"), "&")
    For Each x In query
     a = Split(x, "=")
     If StrComp(a(0), "page", vbTextCompare) <> 0 Then
     temp = temp & a(0) & "=" & a(1) & "&"
     End If
    Next    
    Response.Write("<form method=get onsubmit=""document.location = '" & action & "?" & temp & "Page='+this.page.value;return false;"">")        
    if page<=1 then
        Response.Write ("[首页] [上一页] ")
    else        
        Response.Write("[<a href=" & action & "?" & temp & "Page=1>首页</a>] ")
        Response.Write("[<a href=" & action & "?" & temp & "Page=" & (Page-1) & ">上一页</a>] ")
    end if

if page>=pagecount then
        Response.Write ("[下一页] [尾页]")        
    else
        Response.Write("[<a href=" & action & "?" & temp & "Page=" & (Page+1) & ">下一页</a>] ")
        Response.Write("[<a href=" & action & "?" & temp & "Page=" & pagecount & ">尾页</a>]")            
    end if
    Response.Write("[页次:<font color=red>" & page & "</font>/" & pageCount)    
    Response.Write("] [共" & resultcount & "条 <font color=red>"& pagesize & "</font>条/页]")
    Response.Write(" 转到" & "<input name=page size=4 value=" & page & ">" & "页<input type=submit value=go>")
End function
%>

如要引用,则可以:
<%call pagination(rs.PageCount,rs.pagesize,page,rs.RecordCount) %>

时间: 2007-01-01

ADO.NET 连接数据库字符串小结(Oracle、SqlServer、Access、ODBC)

ADO.NET 连接到 SQL Server SQL Server .NET Framework 数据提供程序支持类似于 OLE DB (ADO) 连接字符串格式的连接字符串格式. 复制代码 代码如下: using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); // Do work here. } 连接到 OLE DB 数据源 OLE DB .NET Framework

VB语言使用ADO连接、操作SQLServer数据库教程

几年前学过的VB几乎忘光了,这几天复习了下.VB连接ADO数据库并不是非常难. 连接第一步(要仔细看) 对于小白来讲,这里的教程最详细,连接ADO数据库第一步,要添加什么部件呢?全称是Microsoft ADO Data Control 6.0 (SP6) (OLEDB) 部件. 在Microsoft ADO Data Control 6.0 (SP6) (OLEDB)部件里有一个名叫:Adodc数据控件,要将它添加.在Adodc数据控件数据位置中找到ACCES. 控件引用的方法(值指的是姓名)

VB6实现连接Access数据库的ADODB代码实现方法

本文实例讲述了使用ADODB.Connection连接access数据库的方法,驱动类型版本为:Microsoft.Jet.OLEDB.4.0.在VB的数据库操作中,连接数据库是第一步,也是最基本的,本文所述的这个例子,对于初学者学习如何在VB中连接Access数据库有着很好的借鉴参考价值. 具体实现代码如下: VERSION 5.00 Begin VB.Form 操作数据库 Caption = "VB操作数据库" ClientHeight = 3645 ClientLeft = 49

ADO存取数据库时如何分页显示

究竟如何才能做到将数据库的查询结果分页显示呢?其实方法有很多,但主要有两种: 一.将数据库中所有符合查询条件的记录一次性的都读入 recordset 中,存放在内存中,然后通过 ADO Recordset 对象所提供的几个专门支持分页处理的属性: PageSize( 页大小 ). PageCount( 页数目 ) 以及 AbsolutePage( 绝对页 ) 来管理分页处理. 二.根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录数读取出来并显示. 两者的主要差别在于前者是一次性将所

VC基于ADO技术访问数据库的方法

本文实例讲述了VC基于ADO技术访问数据库的方法.分享给大家供大家参考.具体如下: 一.在StdAfx.h文件中添加 复制代码 代码如下: #import "C:/Program Files/Common Files/System/ado/msado15.dll" no_namespace rename("EOF","rsEOF") 导入ADO引擎. 二.数据库应用层操作 void CADOExample1Dlg::OnBtnQuery() {

php adodb连接不同数据库

复制代码 代码如下: <?php include("adodb/adodb.inc.php"); //包含adodb类库文件 $conn = NewADOConnection('postgres'); $conn->Connect('localhost', 'root', 'pass', 'mydb'); //连接PostgreSQL数据库 ?> 复制代码 代码如下: <?php include("adodb/adodb.inc.php");

c++连接mysql数据库的两种方法(ADO连接和mysql api连接)

第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的SQL语句不太兼容标准SQL语句,需要做一些处理,这里暂时不说.第二种方法只能针对于mysql数据库的连接,不过用这种方法不用安装MyODBC服务器程序. 不管用哪种方法,首先需要安装Mysql数据库,安装方法请看"mysql安装及一些注意点".最好安装一个Navicat for mysql,方便操作mysql数

php adodb分页实现代码

复制代码 代码如下: <?php include("adodb/adodb.inc.php"); //包含adodb类库文件 include("adodb/adodb-pager.inc.php"); //包含adodb-pager类库文件 $conn = NewADOConnection('mysql'); //创建adodb对象,声明数据库类型为MySQL $conn->Connect("localhost", "roo

win7 iis7.5 乱码 和 解析不了ASP的ADO连接数据库 的解决方法

你是否发现自己的网站刷新一遍的时候出现乱码呢 好了这里我们就来说说解决的方法...首先说说第一个问题, 这个问题刚开始让自己百思不得其解啊,头疼死的问题 不过自己发现的是个凑巧吧, 因为刚开始配置iis7.5的时候 直接安装了asp.net 虽然没了解过这方面的知识,不过还是发现了asp.net配置过程中会在WEB根目录下生成一个所谓的web.config, 那时候觉得这个文件奇怪 于是直接删除了,然后运行自己的ASP文件发现问题转化了 出现了ODBC连接错误,不过还是一大堆的乱码..好了废话不

C#使用ADO.Net部件来访问Access数据库的方法

数据库的访问是所有编程语言中最重要的部分,C#提供了ADO.Net部件用于对数据库进行访问.我们将从最简单易用的微软Access数据库入手讨论在C#中对数据库的访问. C#中的Connection对象和Command对象与Access类似,但在这里我们还将使用其另一个与RecordSet类似的被称作ADODataReader的对象,它负责处理与查询有关的RecordSet对象. 首先,必须使用微软的Access创建一个数据库.运行Access,创建一个数据库,但不要创建任何表(我们将在下面的程序

C#通过oledb访问access数据库的方法

本文实例讲述了C#通过oledb访问access数据库的方法.分享给大家供大家参考.具体分析如下: 这里演示了如何在 C# 中使用 Microsoft Access 数据库.包括如何创建数据集并从数据库向该数据集添加表. // OleDbSample.cs // 若要从命令行生成此示例,请使用命令: // csc oledbsample.cs using System; using System.Data; using System.Data.OleDb; using System.Xml.Se

对Python通过pypyodbc访问Access数据库的方法详解

看书上通过ODBC访问数据库的案例,想实践一下在Python 3.6.1中实现access2003数据库的链接,但是在导入odbc模块的时候出现了问题,后来查了一些资料就尝试着使用pypyodbc,最后成功了. 操作步骤: ①安装pypyodbc 目前Python安装通常使用steup.py或者pip工具,在python3.4之后的的版本都默认包含了pip,因此,这里推荐使用pip工具.在cmd中执行:pip install pypyodbc,耐心等待执行完成,pypyodbc模块就已经安装成功

多种获取远程连接access数据库的方法

远程(如通过互联网)连接access数据库的方法  前段时间很多人问远程(如通过互联网)连接access数据库的方法,最近写了个例子,与大家共享:  使用了TCP/IP,ADO及XML(需要安装Microsoft XML 4.0.).分服务器和客户端两部分,服务器可以多用户同时连接.远程连接Access数据库有很多方法,我以前已经比较详细的回答过(见下面所列的5种方法),我现在这个例子属于其中的第3种方法(不需要使用RDS或Web服务器).  --------------------------

go语言通过odbc操作Access数据库的方法

本文实例讲述了go语言通过odbc操作Access数据库的方法.分享给大家供大家参考.具体如下: 这里需要用到go-odbc库,下载地址为:https://github.com/weigj/go-odbc 复制代码 代码如下: package main; import (  "fmt"  "database/sql"  _"odbc/driver" ) func main(){  conn,err := sql.Open("odbc&q

python使用MySQLdb访问mysql数据库的方法

本文实例讲述了python使用MySQLdb访问mysql数据库的方法.分享给大家供大家参考.具体如下: #!/usr/bin/python import MySQLdb def doInsert(cursor,db): #insert # Prepare SQL query to INSERT a record into the database. sql = "UPDATE EMPLOYEE SET AGE = AGE+1 WHERE SEX = '%c'" %('M') try:

用javascript连接access数据库的方法

刚看到一个朋友写的用javascript连接excel数据库的程序,想把它改成access数据库的,就找到了这两篇文章 ------------------------------------------    这几天费了挺大力气在网上查找javascript连接access数据库的方法, 经过整理总结,终于写出一段能够有效执行的代码. 但是这段代码在本地可以正常运行,一旦放到免费个人空间上就没法执 行了,主要原因就是操作权限不够,由于只支持静态页面的免费空间多数都 作了非常严格的限制,所以无论

Python轻量级ORM框架Peewee访问sqlite数据库的方法详解

本文实例讲述了Python轻量级ORM框架Peewee访问sqlite数据库的方法.分享给大家供大家参考,具体如下: ORM框架就是 object relation model,对象关系模型,用来实现把数据库中的表 映射到 面向对象编程语言中的类,不需要写sql,通过操作对象就能实现 增删改查. ORM的基本技术有3种: (1)映射技术 数据类型映射:就是把数据库中的数据类型,映射到编程语言中的数据类型.比如,把数据库的int类型映射到Python中的integer 类型. 类映射:把数据库中的

php操作access数据库的方法详解

本文实例讲述了php操作access数据库的方法.分享给大家供大家参考,具体如下: 在PHP网站开发中,PHP与Mysql是最好的组合,但是当你想将其他平台的网站移植到PHP平台时,必然遇到移植性的问题,如ASP+ACCESS平台如何移植?首当其冲便是PHP连接Access数据库问题,在不改变数据库的情况下,PHP如何与Access数据库建立连接? PHP提供多种连接数据库解决方案,在此详解如何使用PHP ADOdb.PDO.ODBC与Access数据库建立连接的代码实例,作为抛砖引玉. 准备工

C#简单访问SQLite数据库的方法(安装,连接,查询等)

本文实例讲述了C#简单访问SQLite数据库的方法.分享给大家供大家参考,具体如下: 下载最新版SQLite(http://www.sqlite.org/download.html),其他版本也可以,这里使用的版本是sqlite-3_6_6_1 a.解压后copy c:\sqlite-3_6_6_1 b.进入cmd模式,进入sqlite-3_6_6_1目录,执行sqlite3 mytest.db c. create table test (seq int,desc varchar(8)); in