<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% Response.CodePage=65001%>
<% response.charset="utf-8" %>
<!--#include file="ADOVBS.inc" -->
<%
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open "provider=sqloledb;server=127.0.0.1;user id=sa;password=sa;database=email"
REM 分页显示
function pagecute(allpages,viewpage,pageurl,pp,ps,pc)
if int(allpages)=0 or int(TotalPages)=1 then
pagecute="首页 上页 <font color=red >[1]</font> 下页 尾页 共"&allpages&"页 每页"&ps&"条 共"&pc&"条记录"
exit function
end if
dim pn,pi,page_num,ppp,pl,pr
pi=1
ppp=pp\2
if pp mod 2 = 0 then ppp=ppp-1
pl=viewpage-ppp
pr=pl+pp-1
if pl<1 then
pr=pr-pl+1:pl=1
if pr>allpages then pr=allpages
end if
if pr>int(allpages) then
pl=pl+allpages-pr:pr=allpages
if pl<1 then pl=1
end if
if pl>0 then
if viewpage=1 then
response.write " 首页 上页 "
else
'response.write " <a href='"& pageurl &"' title='第一页'>首页</a> <a href='"& pageurl &"pageno="&pl-1&"' title='上一页'>上页</a> "
response.write " <a href='"& pageurl &"' title='第一页'>首页</a> <a href='"& pageurl &"pageno="&viewpage-1&"' title='上一页'>上页</a> "
end if
end if
for pi=pl to pr
if clng(viewpage)=clng(pi) then
response.write " <span style='color:red;'>[" & pi & "]</span> "
else
response.write " <a href='"& pageurl &"pageno="& pi &"' title='第 " & pi & " 页'>[" & pi & "]</a> "
end if
next
if pr<=allpages then
if viewpage=allpages then
pagecute=pagecute&" 下页 尾页 共"&allpages&"页 每页"&ps&"条 共"&pc&"条记录"
else
'pagecute=pagecute&" <a href='"& pageurl &"pageno="&pi&"' title='后一页'>下页</a> <a href='"& pageurl &"pageno="& allpages &"' title='最后一页'>尾页</a> 共"&allpages&"页"
pagecute=pagecute&" <a href='"& pageurl &"pageno="&viewpage+1&"' title='后一页'>下页</a> <a href='"& pageurl &"pageno="& allpages &"' title='最后一页'>尾页</a> 共"&allpages&"页 每页"&ps&"条 共"&pc&"条记录"
end if
end if
end function
dim startime
startime=timer()
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
</head>
<body>
<div style="height:250px; ">
<table width="30%">
<tr>
<Td>id</Td>
<Td>title</Td>
<Td>lb</Td>
<Td>lb1</Td>
<Td>lb2</Td>
</tr>
<%
url="100wfenye存储过程.asp?"
page_size=10
pageno=request("pageno")
if Not IsNumeric(pageno) or pageno="" then
pageno=1
else
pageno=clng(pageno)
end if
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
set cmd=server.CreateObject("adodb.command")
set cmd.ActiveConnection=conn
cmd.commandtype=adCMdStoredProc
cmd.commandtext="book_Page"
set para1=cmd.createparameter("tbname",advarchar,adparaminput,1000)
set para2=cmd.createparameter("FieldKey",advarchar,adparaminput,1000)
set para3=cmd.createparameter("PageCurrent",adinteger,adparaminput,1)
set para4=cmd.createparameter("PageSize",adinteger,adparaminput,10)
set para5=cmd.createparameter("FieldShow",advarchar,adparaminput,1000)
set para6=cmd.createparameter("Fieldorder",advarchar,adparaminput,1000)
set para7=cmd.createparameter("Where",advarchar,adparaminput,1000)
set para8=cmd.createparameter("Pagecount",adinteger,adparamoutput,10)
set para9=cmd.createparameter("Recordcount",adinteger,adparamoutput,10)
cmd.parameters.append para1
cmd.parameters.append para2
cmd.parameters.append para3
cmd.parameters.append para4
cmd.parameters.append para5
cmd.parameters.append para6
cmd.parameters.append para7
cmd.parameters.append para8
cmd.parameters.append para9
cmd("tbname")="test"
cmd("FieldKey")="testid"
cmd("PageCurrent")=pageno
cmd("PageSize")=page_size
cmd("FieldShow")=""
cmd("Fieldorder")=""
cmd("Where")=""
cmd.execute()
pagecounts=cmd("PageCount")
recordcounts=cmd("recordcount")
set rs=server.CreateObject("adodb.recordset")
rs.open cmd
set cmd = nothing
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
for j= 1 to page_size
if rs.eof then
exit for
end if
%>
<tr>
<Td><%=rs("testid")%></Td>
<Td><%=rs("title")%></Td>
<Td><%=rs("lb")%></Td>
<Td><%=rs("lb1")%></Td>
<Td><%=rs("lb2")%></Td>
</tr>
<%
rs.movenext
next
%>
</table>
</div>
<p align="center">
<div class="ppage">
<%
response.Write pagecute(pagecounts,pageno,url,10,page_size,recordcounts)
rs.close
set rs=nothing
%>
</div>
</p>
<%
dim endtime
endtime=timer()
%>
页面执行时间:<%=FormatNumber((endtime-startime)*1000,3)%>毫秒
////////////////////////////////////////////////
存储过程:
CREATE PROC book_Page
@tbname nvarchar(1000), --要分页显示的表名
@FieldKey nvarchar(1000), --用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段
@PageCurrent int=1, --要显示的页码
@PageSize int=10, --每页的大小(记录数)
@FieldShow nvarchar(1000)='', --以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段
@FieldOrder nvarchar(1000)='', --以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC
-- 用于指定排序顺序
@Where nvarchar(1000)='', --查询条件
@PageCount int OUTPUT, --总页数
@RecordCount int OUTPUT --总页数
AS
SET NOCOUNT ON
--检查对象是否有效
IF OBJECT_ID(@tbname) IS NULL
BEGIN
RAISERROR(N'对象"%s"不存在',1,16,@tbname)
RETURN
END
IF OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTable')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsView')=0
AND OBJECTPROPERTY(OBJECT_ID(@tbname),N'IsTableFunction')=0
BEGIN
RAISERROR(N'"%s"不是表、视图或者表值函数',1,16,@tbname)
RETURN
END
--分页字段检查
IF ISNULL(@FieldKey,N'')=''
BEGIN
RAISERROR(N'分页处理需要主键(或者惟一键)',1,16)
RETURN
END
--其他参数检查及规范
IF ISNULL(@PageCurrent,0)<1 SET @PageCurrent=1
IF ISNULL(@PageSize,0)<1 SET @PageSize=10
IF ISNULL(@FieldShow,N'')=N'' SET @FieldShow=N'*'
IF ISNULL(@FieldOrder,N'')=N''
SET @FieldOrder=N''
ELSE
SET @FieldOrder=N'ORDER BY '+LTRIM(@FieldOrder)
IF ISNULL(@Where,N'')=N''
SET @Where=N''
ELSE
SET @Where=N'WHERE ('+@Where+N')'
--如果@PageCount为NULL值,则计算总页数(这样设计可以只在第一次计算总页数,以后调用时,把总页数传回给存储过程,避免再次计算总页数,对于不想计算总页数的处理而言,可以给@PageCount赋值)
IF @PageCount IS NULL
BEGIN
DECLARE @sql nvarchar(4000)
SET @sql=N'SELECT @PageCount=COUNT(*)'
+N' FROM '+@tbname
+N' '+@Where
EXEC sp_executesql @sql,N'@PageCount int OUTPUT',@PageCount OUTPUT
SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
END
IF @RecordCount IS NULL
BEGIN
--DECLARE @sql nvarchar(4000)
SET @sql=N'SELECT @RecordCount=COUNT(*)'
+N' FROM '+@tbname
+N' '+@Where
EXEC sp_executesql @sql,N'@RecordCount int OUTPUT',@RecordCount OUTPUT
--SET @PageCount=(@PageCount+@PageSize-1)/@PageSize
END
--计算分页显示的TOPN值
DECLARE @TopN varchar(20),@TopN1 varchar(20)
SELECT @TopN=@PageSize,
@TopN1=(@PageCurrent-1)*@PageSize
--第一页直接显示
IF @PageCurrent=1
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' '+@Where
+N' '+@FieldOrder)
ELSE
BEGIN
--处理别名
IF @FieldShow=N'*'
SET @FieldShow=N'a.*'
--生成主键(惟一键)处理条件
DECLARE @Where1 nvarchar(4000),@Where2 nvarchar(4000),
@s nvarchar(1000),@Field sysname
SELECT @Where1=N'',@Where2=N'',@s=@FieldKey
WHILE CHARINDEX(N',',@s)>0
SELECT @Field=LEFT(@s,CHARINDEX(N',',@s)-1),
@s=STUFF(@s,1,CHARINDEX(N',',@s),N''),
@Where1=@Where1+N' AND a.'+@Field+N'=b.'+@Field,
@Where2=@Where2+N' AND b.'+@Field+N' IS NULL',
@Where=REPLACE(@Where,@Field,N'a.'+@Field),
@FieldOrder=REPLACE(@FieldOrder,@Field,N'a.'+@Field),
@FieldShow=REPLACE(@FieldShow,@Field,N'a.'+@Field)
SELECT @Where=REPLACE(@Where,@s,N'a.'+@s),
@FieldOrder=REPLACE(@FieldOrder,@s,N'a.'+@s),
@FieldShow=REPLACE(@FieldShow,@s,N'a.'+@s),
@Where1=STUFF(@Where1+N' AND a.'+@s+N'=b.'+@s,1,5,N''),
@Where2=CASE
WHEN @Where='' THEN N'WHERE ('
ELSE @Where+N' AND ('
END+N'b.'+@s+N' IS NULL'+@Where2+N')'
--执行查询
EXEC(N'SELECT TOP '+@TopN
+N' '+@FieldShow
+N' FROM '+@tbname
+N' a LEFT JOIN(SELECT TOP '+@TopN1
+N' '+@FieldKey
+N' FROM '+@tbname
+N' a '+@Where
+N' '+@FieldOrder
+N')b ON '+@Where1
+N' '+@Where2
+N' '+@FieldOrder)
END
GO
</body>
</html>