哪位高手愿根据我的SQL分页存储过程写一个完整的asp分页显示代码?
我的存储过程如下:USE[master]GOALTERPROCEDURE[dbo].[sp_GetRecordFromPage]@PageSizeint=10,--每页显...
我的存储过程如下:
USE [master]
GO
ALTER PROCEDURE [dbo].[sp_GetRecordFromPage]
@PageSize int=10 ,--每页显示的记录数
@PageCurrent int=1 ,--当前要显示的页号
@FdName varchar(100)='id' ,--主键名或者标识列名
@SelectStr varchar(2000)='*', --select子句,不包含select关键字,如:*或者Id,UserId,UserName等。
@FromStr varchar(1000)='hr1_base', --from子句,不包含from关键子,如:myTable或者myTable,yourTable
@WhereStr varchar(2000)='id>1', --Where子句,不包含where关键字,如空的,或者 id>2 等
@OrderByStr varchar(1000)='id',--order by 子句,不包含order by 子句 ,如id desc,UserId asc 等
@CountRows int output, --返回记录总数
@CountPage int output --返回总页数
as
--------定义局部变量---------
declare @Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
declare @OrderBySqls varchar(1000) --order by 子句
declare @WhereSqls varchar(2000) --where 子句
declare @Sqls nvarchar(4000) --最终组合成的Sqls语句
declare @TmpStr varchar(2000) --临时
----------------------------
if @OrderByStr <> ''
set @OrderBySqls = ' order by '+@OrderByStr
else
set @OrderBySqls = ''
--------
if @WhereStr <> ''
set @WhereSqls = ' where ('+@WhereStr+')'
else
set @WhereSqls = ''
--------
set @TmpStr = @WhereSqls
--如果显示第一页,可以直接用top来完成
if @PageCurrent<=1
begin
select @Id1=cast(@PageSize as varchar(20))
exec('select top '+@Id1+' '+@SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls)
goto LabelRes
end
---------------------------
select @Id1=cast(@PageSize as varchar(20))
,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20))
----------
if @WhereSqls <> ''
set @WhereSqls = @WhereSqls + ' and (' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+'))'
else
set @WhereSqls = ' where ' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+')'
----------
set @Sqls = 'select top '+@Id1+ ' '+ @SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls
exec (@Sqls)
-----------
LabelRes:
-----返回总记录数
set @Sqls = 'select @a=count(1) from '+@FromStr+@TmpStr
exec sp_executesql @sqls,N'@a int output',@CountRows output
-----返回总页数
if @CountRows <= @PageSize
set @CountPage = 1
else
begin
set @CountPage = @CountRows/@PageSize
if (@CountRows%@PageSize) > 0
set @CountPage = @CountPage + 1
end
return
我要的asp源码包括:调用此存储过程、生成记录集、按表格分页显示其中的几个字段、有分页功能。总之一句,是一个可以拿来就用的asp程序。
数据库连接字符串可用“strconn”代替就行了。
问题已经解决。 展开
USE [master]
GO
ALTER PROCEDURE [dbo].[sp_GetRecordFromPage]
@PageSize int=10 ,--每页显示的记录数
@PageCurrent int=1 ,--当前要显示的页号
@FdName varchar(100)='id' ,--主键名或者标识列名
@SelectStr varchar(2000)='*', --select子句,不包含select关键字,如:*或者Id,UserId,UserName等。
@FromStr varchar(1000)='hr1_base', --from子句,不包含from关键子,如:myTable或者myTable,yourTable
@WhereStr varchar(2000)='id>1', --Where子句,不包含where关键字,如空的,或者 id>2 等
@OrderByStr varchar(1000)='id',--order by 子句,不包含order by 子句 ,如id desc,UserId asc 等
@CountRows int output, --返回记录总数
@CountPage int output --返回总页数
as
--------定义局部变量---------
declare @Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号
declare @OrderBySqls varchar(1000) --order by 子句
declare @WhereSqls varchar(2000) --where 子句
declare @Sqls nvarchar(4000) --最终组合成的Sqls语句
declare @TmpStr varchar(2000) --临时
----------------------------
if @OrderByStr <> ''
set @OrderBySqls = ' order by '+@OrderByStr
else
set @OrderBySqls = ''
--------
if @WhereStr <> ''
set @WhereSqls = ' where ('+@WhereStr+')'
else
set @WhereSqls = ''
--------
set @TmpStr = @WhereSqls
--如果显示第一页,可以直接用top来完成
if @PageCurrent<=1
begin
select @Id1=cast(@PageSize as varchar(20))
exec('select top '+@Id1+' '+@SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls)
goto LabelRes
end
---------------------------
select @Id1=cast(@PageSize as varchar(20))
,@Id2=cast((@PageCurrent-1)*@PageSize as varchar(20))
----------
if @WhereSqls <> ''
set @WhereSqls = @WhereSqls + ' and (' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+'))'
else
set @WhereSqls = ' where ' + @FdName+' not in(select top '+@Id2+' '+@FdName+' from '+@FromStr+@WhereSqls+@OrderBySqls+')'
----------
set @Sqls = 'select top '+@Id1+ ' '+ @SelectStr+' from '+@FromStr+@WhereSqls+@OrderBySqls
exec (@Sqls)
-----------
LabelRes:
-----返回总记录数
set @Sqls = 'select @a=count(1) from '+@FromStr+@TmpStr
exec sp_executesql @sqls,N'@a int output',@CountRows output
-----返回总页数
if @CountRows <= @PageSize
set @CountPage = 1
else
begin
set @CountPage = @CountRows/@PageSize
if (@CountRows%@PageSize) > 0
set @CountPage = @CountPage + 1
end
return
我要的asp源码包括:调用此存储过程、生成记录集、按表格分页显示其中的几个字段、有分页功能。总之一句,是一个可以拿来就用的asp程序。
数据库连接字符串可用“strconn”代替就行了。
问题已经解决。 展开
展开全部
sp页面,内容如下:
<%
dim pageno '记录第几页
'函数名cut1,参数rs类型为Recordset
'该函数主要将接收一个pageno,并将这个值赋给rs的AbsolutePage
'最终达到指定当前页是第几页
function cut1(rs)
if not rs.eof or not rs.bof then
Dim i
pageno = Request("pageno")
If pageno <= 0 Then
rs.AbsolutePage = 1 '转到第一页
pageno = 1
Else
If CInt(pageno) > CInt(rs.PageCount) Then
pageno = rs.PageCount '转到最后一页
End If
rs.AbsolutePage = pageno
End If
end if
End function
'函数名cut2,参数rs类型为Recordset
'该函数主要将接收一个Request("url")和Request.QueryString,从而取得本页地址栏的内容
'在此基础上,根据当前页数pageno算出各种不同情况下,我们需要的下一页的页数
'最终达到指定下一页地址栏内容
'注:本函数没有对Request.form做处理
function cut2(rs)
Dim urlstring
Dim thisno
urlstring = Request("url") & "?" & Request.QueryString
if Request.QueryString="" then
urlstring = Request("url") & "?" & Request.form
'注:本函数在仅这里对Request.form做处理
end if
If InStr(urlstring, "pageno=") > 0 Then
urlstring = Left(urlstring, InStr(urlstring, "pageno=") - 1)
End If
If ((InStr(urlstring, "&") >= 2) or (InStr(Left(urlstring, Len(urlstring) - 1), "?") >= 2)) Then
urlstring = urlstring & "&"
End If
if InStr(urlstring, "/") >= 2 Then
urlstring1 = split(urlstring, "/")
urlstring = urlstring1(ubound(urlstring1))
end if
if instr(urlstring,"&&") then
urlstring=replace(urlstring,"&&","&")
end if
thisno=pageno 'thisno记录当前页数pageno,以后的pageno将是下一页的页数
Response.Write "<form action='" & Left(urlstring, Len(urlstring) - 1) & "' name=form method=post>"
if not rs.eof or not rs.bof then
Response.Write "<font style= color=black>第<font color=red>" & pageno & "</font>页 共<font color=red>" & rs.PageCount & "</font>页<font color=red>" & rs.RecordCount & "</font>条信息 "
else
Response.Write "<font style= color=black>第<font color=red>0</font>页 共<font color=red>" & rs.PageCount & "</font>页<font color=red>" & rs.RecordCount & "</font>条信息 "
end if
if not rs.eof or not rs.bof then
if cint(pageno)=rs.pagecount then
response.write "现在是<font color=red>"&(cint(pageno)-1)*rs.pagesize+1&"</font>条---<font color=red>"&(cint(pageno)-1)*rs.pagesize+(rs.recordcount-cint(pageno-1)*rs.pagesize)&"</font>条 "
else
response.write "现在是<font color=red>"&(cint(pageno)-1)*rs.pagesize+1&"</font>条---<font color=red>"&cint(pageno)*rs.pagesize&"</font>条 "
end if
else
response.write "现在是<font color=red>0</font>条---<font color=red>0</font>条"
end if
Response.Write "直接到第"
'文本框用于跟踪当前页数和控制下一页页数(暂停用)
'Response.Write "<input type=text name=pageno size=2 maxlength=2 value=" & pageno & "> 页"
'下拉列表框用于跟踪当前页数和控制下一页页数
Response.Write "<select name=pageno siz1=1 onchange='javascript: form.submit();'>"
for i=0 to rs.PageCount-1
Response.Write "<option value=" & (i+1)
if (i+1)=cint(thisno) then
Response.Write " selected"
end if
Response.Write ">" & (i+1)
next
Response.Write "</select>"
Response.Write "页</font> "
if pageno<=1 then
response.write "<font style= color=gray>首页</font> "
response.write "<font style= color=gray>上页</font> "
else
Response.Write "<a href='" & urlstring & "pageno=1'><font style=>首页</font></a> "
Response.Write "<a href='" & urlstring & "pageno=" & (pageno - 1) & "'><font style=>上页</font></a> "
end if
if (cint(pageno)>=cint(rs.pagecount)) then
response.write "<font style= color=gray>下页</font> "
response.write "<font style= color=gray>末页</font> "
else
Response.Write "<a href='" & urlstring & "pageno=" & (pageno + 1) & "'><font style=>下页</font></a> "
Response.Write "<a href='" & urlstring & "pageno=" & rs.PageCount & "'><font style=>末页</font></a> "
end if
Response.Write "</form>"
End function
%>
在使用的时候引用这个页面
<!--#include file="conn.asp"-->
<!--#include file="Page.asp"-->
<% sql="sql查询语句"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
rs.pagesize=20 '每页显示多少条数据
cut1(rs) '开始调用分页
dim i
i=1
do while not rs.eof and i<=rs.pagesize%>
正常读取数据
<% rs.movenext
i=i+1
loop %>
读取数据结束
<%cut2(rs)%>'这里显示上一页 下一页
<%
dim pageno '记录第几页
'函数名cut1,参数rs类型为Recordset
'该函数主要将接收一个pageno,并将这个值赋给rs的AbsolutePage
'最终达到指定当前页是第几页
function cut1(rs)
if not rs.eof or not rs.bof then
Dim i
pageno = Request("pageno")
If pageno <= 0 Then
rs.AbsolutePage = 1 '转到第一页
pageno = 1
Else
If CInt(pageno) > CInt(rs.PageCount) Then
pageno = rs.PageCount '转到最后一页
End If
rs.AbsolutePage = pageno
End If
end if
End function
'函数名cut2,参数rs类型为Recordset
'该函数主要将接收一个Request("url")和Request.QueryString,从而取得本页地址栏的内容
'在此基础上,根据当前页数pageno算出各种不同情况下,我们需要的下一页的页数
'最终达到指定下一页地址栏内容
'注:本函数没有对Request.form做处理
function cut2(rs)
Dim urlstring
Dim thisno
urlstring = Request("url") & "?" & Request.QueryString
if Request.QueryString="" then
urlstring = Request("url") & "?" & Request.form
'注:本函数在仅这里对Request.form做处理
end if
If InStr(urlstring, "pageno=") > 0 Then
urlstring = Left(urlstring, InStr(urlstring, "pageno=") - 1)
End If
If ((InStr(urlstring, "&") >= 2) or (InStr(Left(urlstring, Len(urlstring) - 1), "?") >= 2)) Then
urlstring = urlstring & "&"
End If
if InStr(urlstring, "/") >= 2 Then
urlstring1 = split(urlstring, "/")
urlstring = urlstring1(ubound(urlstring1))
end if
if instr(urlstring,"&&") then
urlstring=replace(urlstring,"&&","&")
end if
thisno=pageno 'thisno记录当前页数pageno,以后的pageno将是下一页的页数
Response.Write "<form action='" & Left(urlstring, Len(urlstring) - 1) & "' name=form method=post>"
if not rs.eof or not rs.bof then
Response.Write "<font style= color=black>第<font color=red>" & pageno & "</font>页 共<font color=red>" & rs.PageCount & "</font>页<font color=red>" & rs.RecordCount & "</font>条信息 "
else
Response.Write "<font style= color=black>第<font color=red>0</font>页 共<font color=red>" & rs.PageCount & "</font>页<font color=red>" & rs.RecordCount & "</font>条信息 "
end if
if not rs.eof or not rs.bof then
if cint(pageno)=rs.pagecount then
response.write "现在是<font color=red>"&(cint(pageno)-1)*rs.pagesize+1&"</font>条---<font color=red>"&(cint(pageno)-1)*rs.pagesize+(rs.recordcount-cint(pageno-1)*rs.pagesize)&"</font>条 "
else
response.write "现在是<font color=red>"&(cint(pageno)-1)*rs.pagesize+1&"</font>条---<font color=red>"&cint(pageno)*rs.pagesize&"</font>条 "
end if
else
response.write "现在是<font color=red>0</font>条---<font color=red>0</font>条"
end if
Response.Write "直接到第"
'文本框用于跟踪当前页数和控制下一页页数(暂停用)
'Response.Write "<input type=text name=pageno size=2 maxlength=2 value=" & pageno & "> 页"
'下拉列表框用于跟踪当前页数和控制下一页页数
Response.Write "<select name=pageno siz1=1 onchange='javascript: form.submit();'>"
for i=0 to rs.PageCount-1
Response.Write "<option value=" & (i+1)
if (i+1)=cint(thisno) then
Response.Write " selected"
end if
Response.Write ">" & (i+1)
next
Response.Write "</select>"
Response.Write "页</font> "
if pageno<=1 then
response.write "<font style= color=gray>首页</font> "
response.write "<font style= color=gray>上页</font> "
else
Response.Write "<a href='" & urlstring & "pageno=1'><font style=>首页</font></a> "
Response.Write "<a href='" & urlstring & "pageno=" & (pageno - 1) & "'><font style=>上页</font></a> "
end if
if (cint(pageno)>=cint(rs.pagecount)) then
response.write "<font style= color=gray>下页</font> "
response.write "<font style= color=gray>末页</font> "
else
Response.Write "<a href='" & urlstring & "pageno=" & (pageno + 1) & "'><font style=>下页</font></a> "
Response.Write "<a href='" & urlstring & "pageno=" & rs.PageCount & "'><font style=>末页</font></a> "
end if
Response.Write "</form>"
End function
%>
在使用的时候引用这个页面
<!--#include file="conn.asp"-->
<!--#include file="Page.asp"-->
<% sql="sql查询语句"
set rs=server.createobject("adodb.recordset")
rs.open sql,conn,1,1
rs.pagesize=20 '每页显示多少条数据
cut1(rs) '开始调用分页
dim i
i=1
do while not rs.eof and i<=rs.pagesize%>
正常读取数据
<% rs.movenext
i=i+1
loop %>
读取数据结束
<%cut2(rs)%>'这里显示上一页 下一页
追问
谢谢你的回答!但我需要的是根据我上面的分页存储过程进行的调用的详细ASP代码。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询