我刚又下下来看。原来跟我原来看另外一个人的一模一样,如果我没记错的话,这个代码的源创者应该是“无根泉”。我受不了。想要分页代码。结合存储过程做是最先进的,本人整理的存储过程分页就有几个。基本都是经过本人修改过。
这里推荐一下本人做的那个代码生成器里就有这个方法,虽然代码不一样,但是思想却是一样的。本人努力了几天做了那个自动生成代码的软件。可以说操作数据库的所有方法都有。以下仅列出一个分页方法的原理。
<%
''''''''''''''''类描述'''''''''''''''
'软件自动生成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