标题:[原创]刚才做了半天完成的简易分页类
只看楼主
lq7350684
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5089
专家分:98
注 册:2006-11-6
得分:0 
我有一个分页的也是一到最后一页就出错,我那个的错误是一到最后一页就不显示了,不知道是为什么.

<table width="99%" cellpadding="2" cellspacing="2" borderColorLight=#808080 borderColorDark=#ffffff>
<tr>
<%if rs.pagecount > 0 then%>
<td width="29%" height="40" align="left" class="tdbg1 STYLE8"> 共<%=rs.recordcount%>会员 当前页<%=intpage%>/<%=rs.PageCount%></td>
<%else%>
<td width="12%" align="left" class="tdbg1 STYLE8">当前页0/0</td>
<%end if%>
<td width="59%" align="center" class="tdbg1 STYLE8"><a href="?action=tryuser&page=1">首页</a>|
<%if pre then%>
<a href="?action=tryuser&page=<%=intpage -1%>">上一页</a>|
<%end if%>
<%if last then%>
<a href="?action=tryuser&page=<%=intpage +1%>">下一页</a> |
<%end if%>
<a href="?action=tryuser&page=<%=rs.PageCount%>">最后一页</a>| 转到第
<select name="sel_page" onchange="javascript:location=this.options[this.selectedIndex].value;">
<%
for i = 1 to rs.PageCount
if i = intpage then%>
<option value="?action=tryuser&page=<%=i%>" selected><%=i%></option>
<%else%>
<option value="?action=tryuser&page=<%=i%>"><%=i%></option>
<%
end if
next
%>
</select>页</td>
</tr>
</table>
2006-11-09 15:48
ming206
Rank: 2
来 自:重庆
等 级:等待验证会员
威 望:3
帖 子:545
专家分:7
注 册:2005-8-2
得分:0 
我刚又下下来看。原来跟我原来看另外一个人的一模一样,如果我没记错的话,这个代码的源创者应该是“无根泉”。我受不了。想要分页代码。结合存储过程做是最先进的,本人整理的存储过程分页就有几个。基本都是经过本人修改过。

这里推荐一下本人做的那个代码生成器里就有这个方法,虽然代码不一样,但是思想却是一样的。本人努力了几天做了那个自动生成代码的软件。可以说操作数据库的所有方法都有。以下仅列出一个分页方法的原理。

<%
''''''''''''''''类描述'''''''''''''''
'软件自动生成userInfos类所有内容
'该类名称:userInfos
'生成时间:2006-11-8 上午 12:08:38
'主要作用:
'''''''''''''''''''''''''''''''''''''
'类代码开始
Class userInfos

'List():返回带记录集数据,当返回一条记录时,其重定义为一维数组,当返回多条记录时,例如分页返回记录集,重定义为二维数组
'Row_N:字段个数,Col_N:某当前页产生的记录数,Counts:产生的总页数
Public List(), Row_N, Col_N,Counts
'构造,初始化
Private sub class_initialize()
'类初始器内根据需要可自行添加
End sub
'销毁资源
Private sub class_terminate()
'资源释放根据需要可自行添加
End sub
'私有数据成员

Private Address
Private CompanyAddress
'更多代码不贴了。


'''''''''''''''''''''''''''''''''''''''''''''''
'软件自动生成该方法
'方法名:getList
'作 用:返回当前页的记录集
'参 数:Fields_N,字段串
'参 数:Page_N,传递过来的当前页号
'参 数:Where_str,SQL语句的Where条,不需要带Where关键字,如果为空。则不连Where条件
'参 数:SortTy,确定数据库聚集,一般取ID自动编号
'参 数:OrderBy_S,排列顺序,可以自己选择:ASC或DESC
''
'''''''''''''''''''''''''''''''''''''''''''''''
Public Sub getList(Fields_N, Page_N, PageCount_N,SortTy,Where_S,OrderBy_S)
'局部变量说明:
'SQL:SQL字符串
'Rs:Recordset对象
'SQL:SQL字符串
'AllCounts:获得数据库中总的记录集
Dim SQL, Rs, AllCounts
Set Rs = Server.CreateObject("ADODB.Recordset")
'SQL字符串,目的是取得总记录集
SQL = "Select Count(*) AS Cn From [UserInfo_Table] "
'判断SQL语句的条件部分是否为空
If (Where_S <> "") Then
SQL=SQL&" Where " & Where_S
End If
'取得总记录集
AllCounts = conn.Execute(SQL).Fields(0)
'取得页数
'先用除法取整
Counts = CInt(AllCounts / PageCount_N)
'判断是否有余数
If (AllCounts Mod PageCount_N) <> 0 Then
'存在余数则页数+1
Counts = Counts + 1
End If
'当页号大于1时候设置为1
If (CInt(Page_N) < 1) Then Page_N = 1
'当页号大于总页数,设置为最后一页
If (CInt(Page_N) >= Counts) Then Page_N = Counts
'先判断是否为1,也就是小于2
If (CInt(Page_N) <= 1) Then
'如果是第一页,则直接取得前PageCount_N条记录
SQL = "SELECT TOP " & PageCount_N & Fields_N &"From [UserInfo_Table] ORDER BY "& OrderBy_S
Else
'否则,按以下规则进行过滤抽出记录集
SQL = "SELECT TOP " & PageCount_N & Fields_N
SQL=SQL&" FROM [UserInfo_Table] WHERE ("&SortTy&" NOT In (SELECT TOP " & ((CInt(PageCount_N))) * CInt(Page_N - 1) & ""&SortTy&" FROM [UserInfo_Table] ORDER BY "&OrderBy_S&" ))"
SQL=SQL&" ORDER BY "&OrderBy_S
End If
'打开数据库取当前页号的记录集
Rs.Open SQL, conn, 1, 1
'取得字段个数
Row_N = Rs.Fields.Count - 1
'取得当前记录的条数
Col_N = Rs.RecordCount - 1
'重定义二维数组
ReDim List(Row_N, Col_N)
'判断存在,循环输入数组
If Not Rs.EOF Then
'循环取出行记录
For i = 0 To Col_N
'如果到尾,跳出循环
If Rs.EOF Then Exit For
'循环取出字段
For j = 0 To Row_N
List(j, i) = Rs.Fields(j)
Next
'移动到下一条记录
Rs.MoveNext
Next
End If
'关闭
Rs.Close
Set Rs = Nothing
End Sub
End Class
%>

另外发几个利用PL/SQL编写的存储过程分页功能。调用我就不说了。
这两个绝对没有假,直接从我SQLSERVER里调试好弄出来的。

1.

CREATE PROCEDURE ShowPage_Proc
( --参数列表
@tblName varchar(255), -- 表名
@strGetFields varchar(1000) = '', -- 需要返回的列
@fldName varchar(255)='', -- 排序的字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@doCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1500) ='' -- 查询条件 (注意: 不要加 where)
)

AS
--内部变量定义
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(110) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
--变量定义结束
if @doCount != 0
--如果@doCount传递过来的不是0,就执行总数统计。
begin
set @strSQL = "select count(*) as Total from [" + @tblName + "]"
if @strWhere !=""
--如果查询条件不为空,则加上Where条件语句
set @strSQL= @strSQL +" where "+@strWhere
end
else
--以下的所有代码都是@doCount为0的情况
begin
if @OrderType != 0
--如果@OrderType不是0,就执行降序
begin
set @strTmp = "<(select min"
set @strOrder = " order by [" + @fldName +"] desc"
end
else
--否则,就执行升序
begin
set @strTmp = ">(select max"
set @strOrder = " order by [" + @fldName +"] asc"
end
--如果启始页码为1
if @PageIndex = 1
begin
--如果查询条件不为空,则加上where条件
if @strWhere != ""
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ "
        from [" + @tblName + "] where " + @strWhere + " " + @strOrder
else
--反之不加where条件
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ "
        from ["+ @tblName + "] "+ @strOrder
end
--启始页码非1开始
else
begin
--以下代码赋予了@strSQL以真正执行的SQL代码
set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["
+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["
+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["
+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "
+ @strOrder

--如果查询条件不为空,则加上where条件
if @strWhere != ""
set @strSQL = @strSQL+ ") as tblTmp) and " + @strWhere + " " + @strOrder
end
end
exec (@strSQL)
GO

2.

/*
函数名称: GetRecordFromPage
函数功能: 获取指定页的数据
参数说明: @tblName 包含数据的表名
@fldName 关键字段名
@PageSize 每页记录数
@PageIndex 要获取的页码
@IsCount 是否要取得记录数
@OrderType 排序类型, 0 - 升序, 1 - 降序
@strWhere 查询条件 (注意: 不要加 where)
*/
CREATE PROCEDURE pGO_GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS

declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(500) -- 临时变量
declare @strOrder varchar(400) -- 排序类型

-- 如果是查询记录总数,直接使用Count(0)函数
if @IsCount != 0
begin
if @strWhere != ''
set @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhere
else
set @strSQL = 'select count(*) as Total from [' + @tblName + '] '
end
--如果是想查询记录,则
else
begin
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where ' + @strWhere

set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
else
begin
--如果是降序查询……
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
--如果是升序查询……
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end

if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder


end
end

exec (@strSQL)
GO



外贸综合平台:E贸通
2006-11-10 00:40
五岳狂人
Rank: 1
等 级:新手上路
帖 子:168
专家分:0
注 册:2006-3-24
得分:0 
谢谢


2006-11-10 12:51
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:396
帖 子:11713
专家分:43267
注 册:2006-5-13
得分:0 
我目前的页面上还没有加分页功能,这些好东西我先收下了,看懂之后再加到页面中去,在此谢谢各位。

活到老,学到老! http://www. E-mail:hu-jj@
2006-11-11 06:12
janefishfish
Rank: 1
等 级:新手上路
帖 子:50
专家分:0
注 册:2006-6-24
得分:0 
支持下先

2006-11-11 11:46
bafnje
Rank: 1
等 级:新手上路
帖 子:193
专家分:0
注 册:2006-6-9
得分:0 
好像到最后一页的时候,有点问题.
2007-01-25 16:08
melack
Rank: 1
等 级:新手上路
帖 子:230
专家分:0
注 册:2006-9-27
得分:0 
谢谢 版主

欢迎光临我的小站 晒晒网 www.
2007-01-26 09:48
cdwyj
Rank: 1
等 级:新手上路
威 望:1
帖 子:127
专家分:0
注 册:2007-2-21
得分:0 
挖到宝了…… 研究一下

2007-02-24 03:30
清音
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-2-27
得分:0 
都不错啊
2007-02-27 16:44
dk_fan
Rank: 1
等 级:新手上路
帖 子:192
专家分:0
注 册:2007-2-7
得分:0 
2007-02-27 17:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-37557-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046592 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved