分页是什么意思?
问题一:数据库 分页是什么意思 数据库分页也是在数据库里写查询语句,不同的是查询的都是指定条数到指定条数的数据,不是一次性把数据全查出来。
问题二:分页是什么意思 后台分页则是指后台仅返回某个范围内的数据,如第100到200条的数据,每次都需要与后台进行查询交互。
因为把所有的数据返回到前台时,前台压力太大,数据从后台传到前台所需要的时间太多,导致系统变得响应很慢。这时候就要考虑使用后台分页了,每次只查询所需要的数据,由后台返回,这样每次只需要返回少量的数据就可以了。
问题三:word中的分页符是什么意思? word文档是连续文档,前一个段落直接连着后一个段落。
如果想到某一段以后,后面就不在连着了,下一个段落放到下一页去,这时候就需要在这个段落后面加一个分页符。
具体分页符的插入方法可以参考经验里面的这篇文档。
jingyanbaidu/3
问题四:什么叫“分页查询”? 当数据量过大时,可能会导致各种各样的问题发生,例如:服务器资源被耗尽,因数据传输量过大而使处理超时,等等。最终都会导致查询无法完成。
解决这个问题的一个策略就是“分页查询”,也就是说不要一次性查询所有的数据,每次只查询一“页“的数据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器资源的消耗也不大。
打一个比方,有很多很多人要过河,而只有一条船摆渡。若让所有人都上船,肯定会导致沉船(资源耗尽);若换一条超大的船,除了换船要很高的成本外,上船下船也要耗费很长时间。
所以最好的解决方法是,根据船的容量,每次只上一部分人。等这一船人过河以后,再摆渡下一批人。
问题五:word里每章节要求独立分页 什么意思 1打开要编辑的word 文档。
2将鼠标光标移到你需要分页的地方,
3在菜单栏中找到页面布局选项卡,选择分隔符。
4点击分隔符。在下拉列表中选择分页符,点击选择即设置成功,将会福到成功分页。
5还有更为简单的一种方法,首先将鼠标光标放在需要分页的地方。
6然后按住ctrl键再按回车键,这样便一次性达到了分页的目的。使用起来非常的方便快捷。
问题六:什么是分页显示? 分页啊,应该是一页显贰不完,分多页显示。
比如:数据库有2万条记录,在页面显示的时候一个页面显示不完,就采用分页,每页显示多少条,就有“首页 上一页 下一页 尾页”
不知道是不是问的这个
问题七:word中段落设置中段前分页是什么意思? 直接从当前页跳至下页就是你分段的时候敲回车就会跳到下页
问题八:页面文件、分页文件,“页面”、“分页”是什么意思啊 页面文件,是指操作系统反映构建并使用虚拟内存的硬盘空间大小所使用的文件。要整理页面文件,首先将页面文件从原先所在的驱动器移动到其他驱动器,然后对原来驱动器进行整理,最后再将页面文件移回到原驱动器上,此时页面文件就会存放在连续的磁盘空间中了。具体来说,在 windows操作系统下(Windows 2000/XP)pagefilesys这个文件,它就是系统页面文件(也就是大家熟知的虚拟内存文件),它的大小取决于打开的程序多少和你原先设置页面文件的最小最大值,是不断变化的,有时可能只有几十M,有时则达到600M以上。
什么是分页?
无论你的NT服务器的内存有多大,它总是显得不够充足。当物理RAM从低端开始运行时,Windows NT使用了分页文件Pagefilesys。为了运行不同的进程和应用程序,Pagefilesys给物理内存分配了一些空间。在这些空间内允许交换数据页。
显然,系统在文件系统缓存中查找数据而不是在驱动器上搜索数据会提高系统的性能。太多的搜索操作会使处理器停顿下来。这就是短语“买更多的内存”成为计算机时代的陈词滥调的原因之一:RAM是你的朋友。管理内存可使你的“朋友”更高效。
Windows NT下的Windows Task Manager ([Ctrl][Alt][Delete] | Task Manager)是一个可以为访问内存使用情况提供快捷重要信息的察看工具。考虑物理内存的大小并计算MEM Usage计数器的值,Memory Usage History提供了内存活动的即时情况。正如图22A所示,把CPU Usage计数器和CPU Usage History与MEM Usage计数器一作比较,就可以简单地得到性能的总的评价。如果你必须决定是否要立刻启动
Diskperf以进一步调查分页过多问题那就非常便利了。
Windows NT的分页文件可以通过Control Panel |System | Performance 标签| Virtual Memo锭y进行管理。在这里,你可以控制分页文件的几个设置(包括大小和区域)。显然,你可以允许系统对它进行处理,但是为了获得最佳配置还是使用Vitual Memory Manager (VMM)为好。
222 Windows NT分页文件的基本原则
Windows NT最初通过在物理RAM的数量上加上12MB以设定开始的分页文件大小。这12MB考虑到在系统故障时分页文件内容可被倾倒到一个日志中以防万一。如果看见了“停止”框和接着出现蓝屏死机,你就在操作中遇上了这个问题。如果开始的分页文件的大小小于这个数(物理RAM的数量上加上12MB),就会开始收到Running Out Of Memory消息。
Windows NT操作系统和其应用程序使用了大约10MB的RAM。所以,应该从物理RAM的数量上减去这个值。这会给你充分的回旋余地决定你的服务器的内存要求。
Windows NT要求分页文件的最小值为2MB。如果分页文件太小或者根本不存在,启动时就会出现警告消息。
分页文件应该总是遵循RAM的最小值+12的规则。在任何情况下,分页文件都不能比服务器中的RAM的大小小。如果系统有32 MB的物理RAM,加上12MB后分页文件总的大小就是44MB。显然,分页文件越大于好。但是,我的意思是增加对物理RAM的投资,而不是简单地增加分页文件的大小。如果没有足够的RAM,驱动器就会花太多的时间对分页文件进行读写。这只会降低你的服务器的速度,如果你不得>>
问题九:虚拟内存里的分页是什么意思 分页文件:硬盘上一个或者多个隐藏文件pagefilesys,Windows用于存储未存入内存的部分程序和数据文件。页面文件和物理内存或随机存取内存(RAM)构成了虚拟内存。Windows会根据需要将数据从页面文件移至内存,或将数据从内存移至页面文件以便为新数据释放内存。也叫“交换文件”。
望采纳!!!
问题十:打印机自动分页什么意思 根据你页面设置的尺寸大小
打印机将会自动根据你页面设置的尺寸大小将文档分页打印。
JSP很好用的啊
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'baobiao_liujsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="stylescss">
-->
<style type="text/css">
<!--
kuang {
border: 1px solid #0099FF;
}
anniu {
color: #FFFFFF;
background-color: 3064a3;
border: 1px outset #3064a3;
}
-->
</style>
</head>
<%
if(sessiongetAttribute("gonghaoID")==null)
{
responsesendRedirect("/mobile/loginjsp");
}
%>
<body background="image/bg11jpg">
<br>
<!--s-->
<table width="100%" border="1" cellpadding="1" cellspacing="0">
<tr>
<td><div align="center">手机号</div></td>
<td><div align="center">品牌</div></td>
<td width="13%"><div align="center">业务类型</div></td>
<td width="25%"><div align="center"><a href="/mobile/jiaofeijilushijianjsp" target = "caozhuo">时间</a></div></td>
<td><div align="center">工号</div></td>
<td><div align="center">费用</div></td>
<td width="12%"><div align="center">是否已回退</div></td>
</tr>
<%
ArrayList al = (ArrayList)sessiongetAttribute("al");
int totalRow = alsize();
int pageSize = 10;
int totalPage = (totalRow%pageSize) == 0 totalRow/pageSize:(totalRow/pageSize) + 1;
int currnPage = 1;
if (requestgetParameter("page") != null) {
currnPage = IntegerparseInt(requestgetParameter("page"));
}
if (currnPage == 0) {
currnPage = 1;
}
if (currnPage > totalPage) {
currnPage = totalPage;
}
int start = (currnPage - 1) pageSize;
int end = currnPage pageSize - 1;
if (currnPage == totalPage) {
end = totalRow - 1;
}
if(totalRow==0)
{
start=1;
end=0;
}
for (int i = start; i <= end; i++)
{
gonghaoyewu_liu yewu = (gonghaoyewu_liu)alget(i);
%>
<%
if(i%2==0)
{
%>
<tr bgcolor="#66ffcc">
<%}else{ %>
<tr bgcolor="#00ffff">
<%} %>
<td><div align="center"><%=yewugetPhoneno() %></div></td>
<td><div align="center">
<%
if(yewugetLogoBiaoshi()==1){
%>
全球通
<%}else if(yewugetLogoBiaoshi()==2){ %>
动感地带
<%}else if(yewugetLogoBiaoshi()==3){ %>
神州行
<%} %>
</div></td>
<td><div align="center">
<%
String leixing = new ChaXunbyPhoneno_liu()selectyewuleixing(yewugetLeixing());
%>
<%=leixing %>
</div></td>
<td><div align="center"><%
String shijian = yewugetShijian();
String shijian1 = shijiansubstring(0,19);
%>
<%=shijian1 %></div></td>
<td><div align="center"><%=yewugetGonghaoId() %></div></td>
<td><div align="center"><%=yewugetFeiyong() %></div></td>
<td><div align="center">
<%
if(yewugetBiaoshi()==1)
{
%>否<%}else{ %>是
<%} %>
</div></td>
</tr>
<%} %>
</table>
<!--e-->
<center>
<form name="f1" method="post" action="/mobile/baobiao_liujsp">
<p><a href="/mobile/baobiao_liujsppage=1"> 第一页</a>
<%
if (currnPage >= totalPage) {
currnPage = totalPage;
%>
下一页
<%
} else {
%>
<a href="/mobile/baobiao_liujsppage=<%=currnPage + 1%>">下一页 </a>
<%
}
%>
<%
if (currnPage <= 1) {
currnPage = 1;
%>
上一页
<%
} else {
%>
<a href="/mobile/baobiao_liujsppage=<%=currnPage - 1%>">上一页 </a>
<%
}
%>
<a href="/mobile/baobiao_liujsppage=<%=totalPage%>">尾页</a> 10条/页
<%=currnPage%>/<%=totalPage%>页 跳到
<input type="text" class="kuang"
name="page" size=2 />页
<input name="提交" type="submit" class="anniu" value="go" />
</form>
</center>
<form action="" name="f2" method="post">
<p align="right">
<label>
<input type="button" onClick="pri()" class="anniu" name="Submit" value="打印">
</label>
</p>
</form>
</body>
<script type="text/javascript">
function pri()
{ s=documentbodyinnerHTML;
ss=s;
kaishi="<!--s-->";
jieshu="<!--e-->";
s=ssubstr(sindexOf(kaishi)+8);
s=ssubstr(0,sindexOf(jieshu));
documentbodyinnerHTML=s;
windowprint();
documentbodyinnerHTML=ss;
}
</script>
</html>
Web开发是今后分布式程式开发的主流,通常的web开发都要涉及到与数据库打交道,客户端从服务器端读取通常都是以分页的形式来显示,一页一页的阅读起来既方便又美观。所以说写分页程序是web开发的一个重要组成部分,在这里,我们共同来研究分页程序的编写。
一、分页程序的原理
分页程序有两个非常重要的参数:每页显示几条记录($pagesize)和当前是第几页($page)。有了这两个参数就可以很方便的写出分页程序,我们以MySql数据库作为数据源,在mysql里如果要想取出表内某段特定内容可以使用的 T-SQL语句:select from table limit offset,rows来实现。这里的offset是记录偏移量,它的计算方法是offset=$pagesize($page-1),rows是要显示的记录条数,这里就是$page。也就是说select from table limit 10,10这条语句的意思是取出表里从第11条记录开始的20条记录。
二、主要代码解析
$pagesize=10; //设置每一页显示的记录数
$conn=mysql_connect("localhost","root",""); //连接数据库
$rs=mysql_query("select count() from tb_product",$conn); //取得记录总数$rs
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//计算总页数
$pages=intval($numrows/$pagesize);
//判断页数设置
if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
$page=1; //否则,设置为第一页
}
三、创建用例用表myTable
create table myTable(id int NOT NULL auto_increment,news_title varchar(50),news_cont text,add_time datetime,PRIMARY KEY(id))
四、完整代码
<html>
<head>
<title>php分页示例</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<php
$conn=mysql_connect("localhost","root","");
//设定每一页显示的记录数
$pagesize=1;
mysql_select_db("mydata",$conn);
//取得记录总数$rs,计算总页数用
$rs=mysql_query("select count() from tb_product",$conn);
$myrow = mysql_fetch_array($rs);
$numrows=$myrow[0];
//计算总页数
$pages=intval($numrows/$pagesize);
if ($numrows%$pagesize)
$pages++;
//设置页数
if (isset($_GET['page'])){
$page=intval($_GET['page']);
}
else{
//设置为第一页
$page=1;
}
//计算记录偏移量
$offset=$pagesize($page - 1);
//读取指定记录数
$rs=mysql_query("select from myTable order by id desc limit $offset,$pagesize",$conn);
if ($myrow = mysql_fetch_array($rs))
{
$i=0;
>
<table border="0" width="80%">
<tr>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">标题</td>
<td width="50%" bgcolor="#E0E0E0">
<p align="center">发布时间</td>
</tr>
<php
do {
$i++;
>
<tr>
<td width="50%"><=$myrow["news_title"]></td>
<td width="50%"><=$myrow["news_cont"]></td>
</tr>
<php
}
while ($myrow = mysql_fetch_array($rs));
echo "</table>";
}
echo "<div align='center'>共有"$pages"页("$page"/"$pages")";
for ($i=1;$i< $page;$i++)
echo "<a href='fenyephppage="$i"'>["$i "]</a> ";
echo "["$page"]";
for ($i=$page+1;$i<=$pages;$i++)
echo "<a href='fenyephppage="$i"'>["$i "]</a> ";
echo "</div>";
>
</body>
</html>
五、总结
本例代码在windows2000 server+php440+mysql5016上运行正常。该示例显示的分页格式是[1][2][3]…这样形式。假如想显示成“首页 上一页 下一页 尾页”这样形式,请加入以下代码:
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
if ($page > 1)
{
echo "<a href='fenyephppage="$first"'>首页</a> ";
echo "<a href='fenyephppage="$prev"'>上一页</a> ";
}
if ($page < $pages)
{
echo "<a href='fenyephppage="$next"'>下一页</a>
echo "<a href='fenyephppage="$last"'>尾页</a> ";
}
其实,写分页显示代码是很简单的,只要掌握了它的工作原理。希望这篇文章能够带给那些需要这方面程序web程序员的帮助。
没有关系,多表查询也可以在DATAGRID里面分页。DATAGRID设置允许分页没?
thisDataGrid1AllowPaging=true;//启用分页
thisDataGrid1PageSize=5;//每页的个数
物理分页和逻辑分页。1物理分页 :使用数据库本身提供的分页操作来完成数据查询,查询到的就是当前页的信息。例如mysql可以使用limit oracle数据库可以使用rownum来完成。这种方案的优点是性能比较好,但是它存在不通用问题。
2逻辑分页 :它是利用数据库的游标来操作 (将数据库所有数据都查询出来,存储在内存中),性能比较低,但是它通用。分页实现可以使用ajax分页,也可以使用服务器端分页,它们原理是一样的。
我就说7点:
在微软的ASP编程体系中,ADO对象的建立,使得从网页访问数据库成为一件易事,特别是ADO的
Recordset对象使得控制数据的输出显示更为方便、自由。而在Visual InterDev60(以下简称VI60)中,
由于Script Object Model(以下简称SOM)、Design-Time Control(以下简称DTC)以及Data Environment
Object Model(以下简称DEOM)等对象模型的引入,使网页对数据库的访问设计显得更为方便。
因为主题方面的原因,关于数据库的连接,下文只给出代码和简要注释,而把重点放在如何利用
Recordset对象(或控件)实现数据记录的分页显示方面。根据我的理解,分页显示的关键就在于对ADO的
Recordset对象或DTC(设计时控件)的Recordset控件的属性和方法的熟练把握上。
这七种分页显示的武器概括起来说分四类:
第一、二种我暂取名叫“纯ASP法”,这也是国内的ASP网站上用得最多的方法,它们的区别仅在实现
技巧的不同。这两种方法的实现最易理解,用到的对象概念也最少,对开发环境的要求也最低(只要记事
本就行)。可以说,这两种方法的实质还是CGI的编程思想,只是在程序中引入了ADO对象而已。
第四、五种暂取名叫“SOM的DHTML法”。这两种方法要求在VI60的环境下,利用微软提出的脚本对
象模型(Script Object Model)和DHTML中Table对象的与数据库绑定的新特性(许多书和文章只介绍了
DHTML的CSS特性在样式设计中的运用而忽略介绍其数据绑定特性),实现在客户端控制翻页。但它要求用
户的浏览器必须是支持DHTML,如:Microsoft Internet Explorer 40及以上的版本。
第六种暂取名叫“SOM服务器端法”。要求在VI60的环境下开发,它利用微软提出的脚本对象模型(
Script Object Model)中的几个DTC控件:Recordset、PageObject、Grid等在服务器端(客户端)实现翻
页控制。这是一种激动人心的、全新的编程方法,它把网页看成对象(这种对象模型和传统的DOM----
document object model是有区别的:DOM只能控制客户端,而SOM可控制服务器端和客户端),它真正实现
了网页的面向对象编程。但遗憾的是,也许是我个人能力有限,这种技术我个人认为还不是很成熟,比如
,与浏览器的结合还不是很好,这将在后文详细说明。
第七种暂取名叫“DEOM法”。它也是利用了VI60中建立的数据环境对象模型(Data Environment
Object Model)建立Recordset对象。这也是在网页编程上比较少见的新方法,与SOM模型相比,自有它的
优点,这将在后文详述。
在后面所举的所有例子源代码,都可以直接拷贝使用,你甚至可以不懂其原理,只要把其中的粗斜体
字部分换成相应自己的数据库名或字段名就可以了。
在开始详细介绍各种分页方法前,让我们先创建一个数据库:用Office97中的access自创一个
Employeemdb,其中建一个表emp,只设三个字段:emp ID,last name和first name。为什么这么简单,
是因为我们关心的是怎样处理recordset的结果。
第一种:参数直接代入法
这种方法是用手工建立Recordset对象,利用其pagesize(每页指定显示记录数),pagecount(总页
码数)和absolutepage(当前页码数)属性来控制分页的输出。分页采用<href>直接带页码参数的方法
来控制翻页。网页的名字为emp1asp。源代码如下:
<%//建立与employeemdb数据库的连接。
Set conn = ServerCreateObject("ADODBConnection")
connOpen "driver={Microsoft Access Driver (mdb)};dbq=employeemdb"
//建立emp表的Recordset对象实例rs。
Set rs = ServerCreateObject("ADODBRecordset")
rsOpen "emp", conn, 3
PageSize = 10 //pagesize属性指定了每页要显示的记录条数
Page = CLng(Request("Page")) ’string型转化为long型
If Page < 1 Then Page = 1
If Page > rsPageCount Then Page = rsPageCount
If Page <> 1 Then
ResponseWrite "<A HREF=emp1aspPage=1>第一页</A>�"
ResponseWrite "<A HREF=emp1aspPage=" & (Page-1) & ">上一页</A>�"
End If
If Page <> rsPageCount Then
ResponseWrite "<A HREF=emp1aspPage=" & (Page+1) & ">下一页</A>�"
ResponseWrite "<A HREF=emp1aspPage="&rsPageCount & ">最后一页</A>�"
End If
Responsewrite"页码:" & Page & "/" & rsPageCount & "</font>"
//每一页的显示
//显示表头
ResponseWrite "<CENTER><TABLE BORDER=1>"
ResponseWRITE "<TR><TD>" & rsFields("emp ID")Name & "</TD>"
ResponseWRITE "<TD>" & rsFields("last name")Name & "</TD>"
ResponseWRITE "<TD>" & rsFields("first name")Name & "</TD></TR>"
//循环显示每条记录
rsAbsolutePage = Page //把页码赋给absolutepage属性从而知当前页的首条记录号
For iPage = 1 To rsPageSize //
ResponseWRITE "<TR><TD>" & rsFields("emp ID")Value & "</TD>"
ResponseWRITE "<TD>" & rsFields("first name")Value & "</TD>"
ResponseWRITE "<TD>" & rsFields("last name")Value & "</TD></TR>"
rsMoveNext
If rsEOF Then Exit For
Next
ResponseWrite "</TABLE></CENTER>"%>
第二种:表单传送参数法
这种方法在创建Recordset对象时与第一种相同,只是在翻页控制时,采用<input>和case语句配合
来实现翻页。网页的名字为:emp2asp。此方法在编程逻辑上有个缺点:就是在按过“上页”或“下页”
钮后,再在浏览器上按刷新按钮时,会自动翻页。源代码如下:
if Pagenum = "" Then Pagenum = 1 //从第一页开始显示
//建立数据库连接和Recordset对象实例rs。
与第一种方法相同,此处略过。
RSPagesize = 10 ’ 设置一页中显示的记录条数为10条
// 确定翻页的动作
Select Case Request("NAV")
Case ""
session("Pagenum") = 1
case "First" ’ First Record
session("Pagenum") = 1
case "Prev" ’ Previous Record
if session("Pagenum") > 1 then
session("Pagenum") = session("Pagenum") - 1
End If
case "Next" ’ Next Record
if session("Pagenum")< RSPageCount then
session("Pagenum") = session("Pagenum") + 1
End if
case "Last" ’ Last Record
session("Pagenum") = RSPageCount
End Select
RSAbsolutepage = Clng(session("Pagenum")) //确定当前页的第一条记录号
// 显示当前页
同第一种方法,此处略过。
// Nav 翻页按钮设置
<form method="GET" action="emp2asp">
<input type="submit" name="NAV" Value="首页">
<input type="submit" value="上页" name="NAV">
<input type="submit" value="下页" name="NAV">
<input type="submit" value="末页" name="NAV"></form>
第三种:用Grid控件设计分页
所有的方法中,这种方法最容易。你只需拖DTC中的Recordset控件和Grid控件到asp网页中就行了。
而且,你还能选择是在服务器平台还是在客户端平台控制翻页。缺点就是你必须用它给定的格式显示,而
不能自己自由控制表格的显示格式。
方法如下:
在VI60中建一个工程empvip。再在工程中添加一个asp网页:emp3asp。
第一步:选VI60菜单条上的“add data connect…”,按开发工具的导航提示,你就可以很容易地
建立与Employeemdb数据库的连接。从DTC工具栏中拖一个Recordset控件到网页中,并设置其属性。具体
如图:
当你拖控件到网页中时,VI60会自动提示你“是否使用Scripting object model”,按yes。
第三步:从DTC工具栏中拖一个Grid控件到网页中,然后单击鼠标右键,设置其属性,如:选在第二
步中创建的Recordset控件名,选择emp表中的字段,每页显示多少条记录以及显示格式等。非常简单方便
,只要照着导航提示做就行了。
第四种:DHTML法一。
数据记录显示在一个HTML表中。它利用DHTML中表的数据绑定特性来控制记录的分页显示。缺点就是
你的翻页方法将被限制为一种特定的方式:只能“上页”和“下页”而不能“首页”和“末页”。由于是
在客户端控制翻页,所以,这种和第五种方法是速度最快的,但遗憾的是它只能在支持DHTML的浏览器上
使用。
在DHTML中,<TABLE>的DATASRC属性可使表格绑定到一个数据源,另一个属性DATAPAGESIZE可指定
一页一次显示的记录数。
我们来看下面的例子:
第一步:拖Recordset控件到新建的网页emp4htm中,设置其属性,方法同第三种,此处略。
第二步:输入下面的代码:
<TABLE ID="Table1" DATASRC="#Recordset1_RDS" DATAPAGESIZE=5> //假定前面设定Recordset控件名
为Recordset1。每页显示5条记录。
<THEAD>
<TH ALIGN="left" WIDTH=150>Emp ID</TH> //输出表头
<TH ALIGN="left" WIDTH=200>Last Name</TH>
<TH ALIGN="left" WIDTH=200>First Name</TH>
</THEAD>
<TR>
<TD><DIV DATAFLD="Emp ID"></DIV></TD> //输出表内容
<TD><DIV DATAFLD="Last Name"></DIV></TD>
<TD><DIV DATAFLD="First Name"></DIV></TD>
</TR>
</TABLE>
第三步:然后,增加一对DTCs Button按钮控件来做翻页导航,一个命名为“btnPrevious”(上一页
),一个命名为“btnNext”(下一页)。它们相应的脚本如下:
<SCRIPT LANGUAGE=VBScript>
Function btnPrevious_onclick()
Table1previousPage()
End Function
Function btnNext_onclick()
Table1nextPage()
End Function
</SCRIPT>
第五种:DHTML法二
这种方法是对第四种方法的完善。采用手工编写脚本的方法,使我们能做“首页”,“末页”翻页导
航按钮,并能确定每条记录的位置(记录号)。由于篇幅的关系,我在下面只介绍一个具体例子,并给出
简要说明。其它关于DHTML和Recordset控件的一些属性和方法请读者自行参照相关书籍。这里需要提请注
意的是,Recordset控件与第一、二种方法中介绍的ADO的Recordset对象有些不同:Recordset控件没有直
接给出pagesize和pagecount等属性,需要用下面介绍的方法来计算。
第一步:拖Recordset控件到新建的网页emp5htm中,名字为Recordset1,设置其属性,方法同第三
种,此处略。
第二步:定义三个全局变量和编写Recordset1的ondatasetcomplete(数据设置完成时)脚本。
Dim gCurrentPageNumber //当前页号
Dim gMaxPageNumber //最大页数
Dim gRecordsPerPage //每页显示记录数
gRecordsPerPage = 5 // 设置每页显示记录数为5条记录。
Function Recordset1_ondatasetcomplete()
totalRecordCount = Recordset1getCount() //总的记录条数
gMaxPageNumber = Int(totalRecordCount / gRecordsPerPage) //获得最大页数
If (totalRecordCount Mod gRecordsPerPage) > 0 then
gMaxPageNumber = gMaxPageNumber + 1
End If
End Function
第三步:创建翻页导航按钮。
Function btnFirst_onclick() ’ 翻到首页
gCurrentPageNumber = 1
DisplayData()
End Function
Function btnPrevious_onclick() ’ 翻到上一页
if gCurrentPageNumber > 1 Then
gCurrentPageNumber = gCurrentPageNumber - 1
DisplayData()
End If
End Function
Function btnNext_onclick() ’ 翻到下一页
if gCurrentPageNumber < gMaxPageNumber Then
gCurrentPageNumber = gCurrentPageNumber + 1
DisplayData()
End If
End Function
Function btnLast_onclick() ’翻到末页
gCurrentPageNumber = gMaxPageNumber
DisplayData()
End Function
第四步:编写显示每一页的函数。其中使用了许多DHTML的属性和方法,请读者自行参考相关书籍。
Sub DisplayData()
startRecord = ((gCurrentPageNumber - 1) gRecordsPerPage) + 1 //计算每一页开始显示的记录号
数(位置,第几条)
rowCtr = 1
lblPageNumberinnerHTML = gCurrentPageNumber & "/" & gMaxPageNumber
For recordPtr = startRecord To (startRecord + gRecordsPerPage - 1) //循环显示一页的各条记录
If recordPtr > Recordset1getCount() Then //显示空表
Table1rows(rowCtr)cells(0)innerHTML = "<P> </P>"
Table1rows(rowCtr)cells(1)innerHTML = "<P> </P>"
Table1rows(rowCtr)cells(2)innerHTML = "<P> </P>"
Table1rows(rowCtr)cells(3)innerHTML = "<P> </P>"
Else //具体显示每一页
Recordset1moveAbsolute(recordPtr) //移动记录指针。
empID = Recordset1fieldsgetValue("emp ID")
empLName = Recordset1fieldsgetValue("first name")
empFName = Recordset1fieldsgetValue("last name")
Table1rows(rowCtr)cells(0)innerText = recordPtr ’ Counter
Table1rows(rowCtr)cells(1)innerText = empID
Table1rows(rowCtr)cells(2)innerText = empLName
Table1rows(rowCtr)cells(3)innerText = empFName
End If
rowCtr = rowCtr + 1
Next
End Sub
另外,我们还需要在window对象的onload事件中编写如下脚本:
For rowCtr = 1 to gRecordsPerPage
Table1insertRow(rowCtr) ’ 插一新列
For cellCtr = 0 to 3
Table1rows(rowCtr)insertCell()
Next
Next
第六种:服务器端控制翻页方法。
如果我们在服务器端对数据进行分页形成HTML语句后再输出到客户端,就不会存在浏览器不支持
DHTML的问题了。可是用服务器端法使得我们每次翻页时,都得让Recordset控件重新产生一次,因此速度
肯定要比用DHTML的方法慢。但如果服务器足够快的话,这点慢客户是察觉不到的。
下面的例子中,我将介绍一个新的DTC控件:PageObject。这个控件使被指定的网页成为一个网页对
象,用户在此网页的服务器脚本中组织的子程序和函数可被看作是该网页对象的方法。它提供了管理状态
信息的一种先进的方法:网页对象有一些属性(变量),用户可以定义这些属性的生存期。因为以上这些
特性,使我们在编制翻页的脚本时非常方便。
但这种方法的缺点是:当你按了“上页”或“下页”按钮后,再浏览器上的按刷新按钮,网页会自动
翻页。另外,如果按了浏览器上的“回退”按钮后,再按翻页按钮,可能会出现一次乱翻。这都是因为网
页对象属性(全局变量)造成的。
第一步:拖Recordset控件到新建的网页emp6asp中,名字为Recordset1,设置其属性,方法同第三
种,此处略。
第二步:拖PageObject控件到网页中,取名叫emplist。然后右键单击此控件打开属性页并设置
MaxPageNumber,RecordsPerPage,CurrrentPageNumber三个属性(全局变量)。VI60可用get和set方法
来读写它们的值,具体用法请查阅相关资料。
第三步:编写Recordset1的ondatasetcomplete事件。
Function Recordset1_ondatasetcomplete()
recordsPerPage = 5
empListsetRecordsPerPage(recordsPerPage)//设置网页对象每页记录条数属性为5
totalRecordCount = Recordset1getCount()//获得记录集的总条数
mpn = Int(totalRecordCount / recordsPerPage) //计算出mpn为总页数
If (totalRecordCount Mod recordsPerPage) > 0 then
mpn = mpn + 1
End If
empListsetMaxPageNumber(mpn)
End Function
第四步:拖四个button控件到网页中,编写翻页控制脚本。我们主要是通过改变网页对象的
CurrentPageNumber属性的值来实现翻页。
Function btnFirst_onclick()’ 翻到首页
empListsetCurrentPageNumber(1)
End Function
Function btnPrevious_onclick()’ 翻到上一页
cpn = empListgetCurrentPageNumber()
if cpn > 1 Then
empListsetCurrentPageNumber(cpn - 1)
End If
End Function
Function btnNext_onclick()’ 翻到下一页
cpn = empListgetCurrentPageNumber()
if cpn < empListgetMaxPageNumber() then
empListsetCurrentPageNumber(cpn + 1)
End If
End Function
Function btnLast_onclick() ’ 翻到末页
empListsetCurrentPageNumber( empListgetMaxPageNumber() )
End Function
为保证首次进入该页时,显示的是第一页,我们还得编写该网页对象的onEnter事件。
Function empList_onEnter()
If empListfirstEntered Then
empListsetCurrentPageNumber(1)
End If
End Function
第五步:编写显示每一页的脚本。
<HR><TABLE BORDER=0><TR>//显示表头
<TH ALIGN="left" WIDTH=35></TH>
<TH ALIGN="left" WIDTH=150>Emp ID</TH>
<TH ALIGN="left" WIDTH=200>Last Name</TH>
<TH ALIGN="left" WIDTH=200>First Name</TH></TR>
<%
pageNumber = empListgetCurrentPageNumber()//计算翻页所需的各种参数,同DHTML法二
recordsPerPage = empListgetRecordsPerPage()
startRecord = ((pageNumber - 1) recordsPerPage) + 1
lastRecord = Recordset1getCount()
For recordPtr = startRecord To (startRecord + recordsPerPage - 1)%>
<%If Recordset1EOF = True Then%>
<TR>
<TD> </TD>
<TD> </TD>
<TD> </TD>
<TD> </TD>
</TR>
<%Else%>
<%Recordset1moveAbsolute(recordPtr)%>
<TR>
<% If recordPtr <= lastRecord Then %>
<TD><%=recordptr%></TD>
<%Else%>
<TD> </TD>
<% End If %>
<TD><%=Recordset1fieldsgetValue("emp ID")%></TD>
<TD><%=Recordset1fieldsgetValue("last name")%></TD>
<TD><%=Recordset1fieldsgetValue("first name")%></TD>
</TR>
<%End If%>
<%Next%>
</TABLE><HR>
第七种:Data Environment Object Model(数据环境对象模型)法
Data Environment对象模型把ADO对象模型及它的对象----“Connection”,“Command”,
“Recordset”,“Field”以及“Parameter”对象----抽象到一个更加容易的表单中。Data
Environment Object Model把命令显露为方法。用户可以调用这些方法,这些方法会执行这些命令并返回
所得到的记录集。关于DEOM对象模型详细资料请参考相关书籍。我们来看下面网页emp7asp的例子:
第一步:在VI60的“project Explorer”窗口中的工程项目上右击鼠标并从弹出式菜单选择“Add
Data Connection”。根据VI给出的导航提示建立一个到数据库的连接之后,用户就添加了一个实现从ASP
应用程序访问数据库的数据命令。同时,你将会在“Project Explorer”窗口中的globalasa文件下方看
到一个“Data Environment”对象。
第二步:右击“Data Environment”对象然后从弹出式菜单中选择“Add Data Command”选项,添加
一个数据命令Command1。根据VI60的导航提示,你可以在Command1 Properties弹出窗口的Genetal页中
选SQL Statement,输入:select from emp。按OK返回。
第三步:你创建了这个数据命令后,就已经为该Data Environment对象创建了一个方法,然后就可以
从脚本中调用这个方法,而且该方法将会给用户返回一个记录集。
thisPagecreateDE() //在SOM模式下,thisPage表示当前网页对象,createDE()方法创建了DE对象。
DECommand1//执行DE对象的命令,后面可代参数,做有条件查询时很有用。
Set rs=DErsCommand1//DErscommand1使得rs对象完全等同于一个ADO的Recordset对象。
第四步:因为rs为ADO对象,所以,以下的实现翻页代码完全参照以上介绍的几种方法,此处略过。
其它还有如FrontPage2000的数据库导航中实现的方法等,因与本主题无关,此处略。
综上所述,前面介绍的每种方法都包含了很多新的技术,由于篇幅的关系,无法深入。本文只是想通
过实现翻页这一具体的例子来介绍ASP网页编程的多种方法;让大家亲身体验一下VI60在编制网页中的强
大功能;了解和熟悉微软在网页编程中提出的ADO、DHTML、DTC控件、SOM对象模型和DEOM对象模型的使用
方法;希望能给大家在编制网页时提供更多的选择和参考。
0条评论