五、总结
上面我们介绍了正则表达式的基本概念,以及在vbscript和javascript中如何使用正则表达式,同时,通过一些实例让大家有了感性的认识。正则表达式的应用范围很广,能为大家解决很多实际中的问题。本文介绍的内容只是一些初步的知识,还有很多语法规则需要大家继续学习,在实践中发现问题,解决问题。 返回顶部
怎么实现数据记录的分页显示(作者:darkman)
怎么实现数据记录的分页显示 (1)
通过recordset的getrows方法,可以实现数据记录的分页显示。下面是一个完整的例子:
<%@ language = vbscript %>
<% option explicit %>
<%
dim istart, ioffset
istart = request("start")
ioffset = request("offset")
if not isnumeric(istart) or len(istart) = 0 then
istart = 0
else
istart = cint(istart)
end if
if not isnumeric(ioffset) or len(ioffset) = 0 then
ioffset = 10
else
ioffset = cint(ioffset)
end if
response.write "察看 " & ioffset & " 个记录从 " & istart & "开始 <br>"
dim objconn, objrs
set objconn = server.createobject("adodb.connection")
objconn.open "provider=sqloledb.1;data source=(local);uid=sa;pwd=;initial catalog=pubs"
set objrs = server.createobject("adodb.recordset")
objrs.open "select * from authors", objconn
dim aresults
aresults = objrs.getrows
objrs.close
set objrs = nothing
objconn.close
set objconn = nothing
dim irows, icols, irowloop, icolloop, istop
irows = ubound(aresults, 2)
icols = ubound(aresults, 1)
if irows > (ioffset + istart) then
istop = ioffset + istart – 1
else
istop = irows
end if
for irowloop = istart to istop
for icolloop = 0 to icols
response.write aresults(icolloop, irowloop) & " "
next
response.write "<br>"
next
response.write "<p>"
if istart > 0 then
显示“前 10个”连接
response.write "<a href=""paging.asp?start=" & istart-ioffset & _
"&offset=" & ioffset & """>前 " & ioffset & "</a>"
end if
if istop < irows then
显示“后 10个”连接
response.write " <a href=""paging.asp?start=" & istart+ioffset & _
"&offset=" & ioffset & """>后 " & ioffset & "</a>"
end if
%>
怎么实现数据的分页显示(2)
这里介绍另外一种分页显示的方法,是通过 ms sql的存储过程。本方法不适用于access数据库。
假设我们要对数据表mytable的数据实现分页显示,首先写一个存储过程 如下:
create procedure sp_pageditems
(
@page int,
@recsperpage int
)
as
– 加快表的 插入速度
set nocount on
– 开始记录 号
declare @reccount int
select @reccount = @recsperpage * @page + 1
–创建临时 表
create table #tempitems
(
id int identity,
name varchar(50),
price currency
)
– 准备临时 表
insert into #tempitems (name, price)
select name,price from mytable order by price
– 求出要查 询的最小id和最大id
declare @firstrec int, @lastrec int
select @firstrec = (@page – 1) * @recsperpage
select @lastrec = (@page * @recsperpage + 1)
– 得到实际 的记录,并返回是否还有数据!
select *,
morerecords =
(
select count(*)
from #tempitems ti
where ti.id >= @lastrec
)
from #tempitems
where id > @firstrec and id < @lastrec
– 恢复设置
set nocount off
在这个存储过程里,我们首先创建一个全部 记录的临时表,并增加了一个自动编号的字段id。这样,不同的记录就有一个递增的唯一标志。
根据当前的页号和每页的记录数,可以计算 出每页的最小和最大的id。从而得到当前页的所有记录。
为了显示的方便,存储过程还计算了 morerecords字段,作为显示下一页的判断条件。
利用了这个存储过程的程序代码如下:
<%
每页显示10条
const irecordsperpage = 10
dim currentpage 当前页号
dim bollastpage 在最后一页?
if len(request.querystring("page")) = 0 then
currentpage = 1
else
currentpage = cint(request.querystring("page"))
end if
得到当前页的记录
strsql = "sp_pageditems " & currentpage & "," & irecordsperpage
objrs.open strsql, objconn
判断是否在最后一页
if not objrs.eof then
if cint(objrs("morerecords")) > 0 then
bollastpage = false
else
bollastpage = true
end if
end if
%>
<p>
<table border=0 cellspacing=1 cellpadding=4 align=center>
<tr><th colspan=2 bgcolor=navy>
<font size=+1 color=white>
list of items
</font>
</th></tr>
<%
do while not objrs.eof %>
<tr><td align=left bgcolor=gray>
<%=objrs("name")%>
</td><td align=center bgcolor=gray>
<%=formatcurrency(objrs("price"))%>
</td></tr>
<% objrs.movenext
loop %>
</table>
<p>
<center>
<%
第一页不 显示“前一页”
if currentpage > 1 then %>
<input type=button value="<< 前 <%=imaxrecords%> 记录 "
onclick="document.location.href=thispage.asp?page=<%=currentpage-1%>"> ;
<% end if
最后一页 不显示“后一页”
if not bollastpage then %>
<input type=button value="后 <%=imaxrecords%> 记录 >>"
onclick="document.location.href=thispage.asp?page=<%=currentpage+1%>"> ;
<% end if %>
</center>
