| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 707 人关注过本帖
标题:利用类写的百万级数据分页代码
只看楼主 加入收藏
天涯听雨
Rank: 2
来 自:东莞
等 级:论坛游民
威 望:4
帖 子:497
专家分:64
注 册:2007-8-25
结帖率:100%
收藏
 问题点数:0 回复次数:3 
利用类写的百万级数据分页代码
*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国 https://www.bccn.net
*/ 名称: 利用类写的百万级数据分页代码
*/ 作者: 天涯听雨(Pendy@vip.)
*/ 时间: 2009-10-17 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


<%
'调用分页类
Set MyPage = New XPage '创建对象
MyPage.GetConn = Conn  '得到数据库连接
MyPage.GetTable="TB_News" '分页表
MyPage.GetTableId="ID"    '表的主键
MyPage.GetTableField=" ID,Title "   '需查询返回的表字段
MyPage.GetStrOrder=0  '0-为降序 1-升序
MyPage.GetStrWhere=" Hits>500 "  '条件 例 (ClassId='0201') and (Hits=20) 可以为空
MyPage.PageSize = 20  '设置每一页的记录条数据为N条
Set rs = MyPage.GetRS()  '返回记录集

do while not rs.EOF
   response.write ""&trim(rs("Title"))&"<br/>"
   rs.Movenext
loop


'调用显示分页信息
response.write MyPage.ShowPage()
%>

'下页是分页所用的分页类,下面代码可以进行利用单独文件进行保存而调用:
'如:<!--#include file="pageclass.asp" -->
==============================================================================================


<%
'PapgeSize  定义分页每一页的记录数
'GetRS  返回经过分页的Recordset此属性只读
'GetConn  得到数据库连接
'GetSQL  得到查询语句
'程序方法说明
'ShowPage  显示分页导航条,唯一的公用方法

Const Btn_First="<font class=""pagetext"">首页</font>"  '定义第一页按钮显示样式
Const Btn_Prev="<font class=""pagetext"">上一页</font>"'定义前一页按钮显示样式
Const Btn_Next="<font class=""pagetext"">下一页</font>"  '定义下一页按钮显示样式
Const Btn_Last="<font class=""pagetext"">尾页</font>"  '定义最后一页按钮显示样式
Const XD_Align="Center" '定义分页信息对齐方式
Const XD_Width="100%" '定义分页信息框大小

Class XPage
    Private XD_PageCount,XD_Conn,XD_Rs,XD_PageSize,Str_errors,int_curpage,str_URL,int_totalPage,int_totalRecord,XD_sURL
    Private XD_Table,XD_TableId,XD_TableField,XD_StrOrder,XD_StrWhere
   
    '==================================================================
    'Class_Initialize 类的初始化
    '初始化当前页的值
    '==================================================================
    Private Sub Class_Initialize
      '========================
      '设定分页的默认值
      '========================
      XD_PageSize=10  '设定分页的默认值为10
      '========================
      '获取当前面的值
      '========================
      If Request("page") = "" Then
         int_curpage=1
      ElseIf Not(IsNumeric(Request.Querystring("page"))) Then
         int_curpage=1
      ElseIf CInt(Trim(Request.Querystring("page"))) < 1 Then
         int_curpage=1
      Else
        Int_curpage = CInt(Trim(Request.Querystring("page")))
      End If
    End Sub
   
    '=================================================================
    'PageSize 属性
    '设置每一页的分页大小
    '=================================================================
    Public Property Let PageSize(int_PageSize)
      If IsNumeric(Int_PageSize) Then
        XD_PageSize=CLng(int_PageSize)
      Else
        str_error=str_error & "PageSize的参数不正确"
        ShowError()
      End If
    End Property
   
    Public Property Get PageSize
      If XD_PageSize="" or (not(IsNumeric(XD_PageSize))) Then
        PageSize=10
      Else
        PageSize=XD_PageSize
      End If
    End Property
   
    '================================================================
    'GetTable 得到查询表
    '================================================================
    Public Property Let GetTable(str_table)
      XD_Table=str_table
    End Property
   
    '================================================================
    'GetTableId 得到查询表的主键
    '================================================================
    Public Property Let GetTableId(TableId)
      XD_TableId=TableId
    End Property
   
    '================================================================
    'GetTableField 得到查询表中的字段
    '================================================================
    Public Property Let GetTableField(TableField)
      XD_TableField=TableField
    End Property
   
    '================================================================
    'GetStrOrder 得到查询排序方式
    '================================================================
    Public Property Let GetStrOrder(StrOrder)
      XD_StrOrder=StrOrder
    End Property
   
    '================================================================
    'GetStrWhere 得到查询条件
    '================================================================
    Public Property Let GetStrWhere(StrWhere)
      XD_StrWhere=StrWhere
    End Property
   
    '================================================================
    'GetConn 得到数据库连接
    '================================================================
    Public Property Let GetConn(obj_Conn)
      Set XD_Conn=obj_Conn
    End Property
   
    '=================================================================
    'GetRS 属性
    '返回分页后的记录集
    '=================================================================
    Public Property Get GetRS()
      Dim StrTmp,StrCountSql,StrSql,StrOrderBY
        
      if XD_StrOrder=0 then
         StrTmp = "<(Select min"
         StrOrderBY = " Order BY ["&XD_TableId&"] desc"
      else
          StrTmp = ">(Select max"
          StrOrderBY = " Order BY ["&XD_TableId&"] asc"
      end if
      
      if trim(XD_StrWhere)="" then
         XD_StrWhere=" 1=1 "  
      end if
      
      '定义sql语句
      StrSql="select top "&Clng(PageSize)&" "& XD_TableField &" from "&XD_Table&" "
      
      '定义求总记sql语句录
      StrCountSql="select count("&XD_TableId&") from "&XD_Table&" where "&XD_StrWhere&" "
      
      if int_curpage=1 then '如果是第一页时,执行如下代码查库速度快
         StrSql=StrSql&" Where "&XD_StrWhere & StrOrderBY&""
      else
         StrSql=StrSql&" Where "& XD_TableId & StrTmp&"("&XD_TableId&") from (Select top "& clng((Int_curpage-1)*PageSize)&" "&XD_TableId &" from "&XD_Table&" where "& XD_StrWhere & StrOrderBY &") as tblTmp) and "& XD_StrWhere & StrOrderBY&""
      end if
      
      'response.write StrSql&"<br/>"&StrCountSql
      
      set XD_Rs=XD_Conn.exeCute(StrSql)
      int_totalRecord=XD_Conn.exeCute(StrCountSql)(0)
     
      Set GetRS=XD_RS
      'response.end
    End Property
   
    '====================================================================
    'ShowPage 创建分页导航条
    '有首页、前一页、下一页、末页、还有数字导航
    '====================================================================
    Public Sub ShowPage()
      Dim str_tmp
      XD_sURL = GetUrl()
      If int_totalRecord<=0 Then
        str_error=str_error & "总记录数为零,请输入数据"
        Call ShowError()
      End If
      If int_totalRecord="" then
        int_TotalPage=1
      Else
        If int_totalRecord mod PageSize =0 Then
          int_TotalPage = CLng(int_TotalRecord / XD_PageSize * -1)*-1
        Else
          int_TotalPage = CLng(int_TotalRecord \XD_PageSize * -1)*-1+1
        End If
      End If
     
      If Int_curpage>int_Totalpage Then
        int_curpage=int_TotalPage
      End If
    '==================================================================
    '显示分页信息,各个模块根据自己要求更改显求位置
    '==================================================================
      str_tmp = ShowPageInfo
      Response.Write(str_tmp)
      Response.Write("")
      str_tmp = ShowFirstPrv
      Response.Write(str_tmp)
      str_tmp=showNumBtn
      Response.Write(str_tmp)
      str_tmp = ShowNextLast
      Response.Write str_tmp
      response.write("")
    End Sub
   
    '====================================================================
    'ShowFirstPrv 显示首页、前一页
    '====================================================================
    Private Function ShowFirstPrv()
      Dim Str_tmp,int_prvpage
      If int_curpage = 1 Then
        str_tmp = Btn_First & " " & Btn_Prev
      Else
        int_prvpage = int_curpage-1
        str_tmp = "<a href=""" & XD_sURL & "1" & """>" & Btn_First&"</a>&nbsp;<a href=""" & XD_sURL & CStr(int_prvpage) & """>" & Btn_Prev & "</a>"
      End If
      ShowFirstPrv = str_tmp
    End Function
   
    '====================================================================
    'ShowNextLast 下一页、末页
    '====================================================================
    Private Function ShowNextLast()
      Dim str_tmp,int_Nextpage
      If Int_curpage >= int_totalpage Then
        str_tmp = Btn_Next & " " & Btn_Last
      Else
        Int_NextPage = int_curpage+1
        str_tmp = "<a href=""" & XD_sURL & CStr(int_nextpage) & """>" & Btn_Next & "</a>&nbsp;<a href="""& XD_sURL & CStr(int_totalpage) & """>" & Btn_Last & "</a>"
      End If
      ShowNextLast = str_tmp
    End Function
   
    '====================================================================
    'ShowNumBtn 数字导航
    '====================================================================
    Private Function showNumBtn()
        Dim i,str_tmp,startpage,endpage
        
        '进行求出取分页数进行循环
        if int_totalpage<=9 or Int_curpage<=5 then
           startpage=1
           if int_totalpage>9 then
              endpage=9
           else
              endpage=int_totalpage
           end if
        else
           if (int_totalpage-Int_curpage)>=5 then  
               startpage=Int_curpage-4
               endpage=Int_curpage+4
           else
               endpage=int_totalpage
               startpage=int_totalpage-8
           end if            
        end if
        
        for i=startpage to endpage
            if clng(Int_curpage)=clng(i) then
               str_tmp = str_tmp & "&nbsp;<font color=""#ff0000"">["& CStr(i) &"]</font>&nbsp;"
            else
               str_tmp = str_tmp & "&nbsp;[<a href=""" & XD_sURL & CStr(i) & """ title="""&CStr(i)&""">" & i & "</a>]&nbsp;"
            end if
        next
      
      'For i=1 To int_totalpage
        'str_tmp = str_tmp & "&nbsp;[<a href=""" & XD_sURL & CStr(i) & """>" & i & "</a>]&nbsp;"
      'Next
      showNumBtn = str_tmp
    End Function
   
    '====================================================================
    'ShowPageInfo 分页信息
    '更据要求自行修改
    '====================================================================
    Private Function ShowPageInfo()
      Dim str_tmp
      str_tmp = "&nbsp;页次:" & int_curpage & "/" & int_totalpage & "页&nbsp;共" & int_totalrecord & "条记录&nbsp;" & XD_PageSize & "/页 "
      ShowPageInfo = str_tmp
    End Function
   
    '==================================================================
    'GetURL 得到当前的URL
    '更据URL参数不同,获取不同的结果
    '==================================================================
    Private Function GetURL()
      Dim strurl,str_url,i,j,search_str,result_url
      search_str = "page="
     
      strurl = Request.ServerVariables("URL")
      Strurl = split(strurl,"/")
      i = UBound(strurl,1)
      str_url = strurl(i)  '得到当前页文件名
     
      str_params=Trim(Request.ServerVariables("QUERY_STRING"))
      If str_params = "" Then
        result_url = str_url & "?page="
      Else
        If InstrRev(str_params,search_str)=0 Then
          result_url = str_url & "?" & str_params & "&page="
        Else
          j = InstrRev(str_params,search_str)-2
          If j=-1 Then
            result_url=str_url & "?page="
          Else
            str_params = Left(str_params,j)
            result_url = str_url & "?" & str_params & "&page="
          End If
        End If
      End If
      GetURL = result_url
    End Function
   
    '====================================================================
    ' 设置 Terminate 事件。
    '====================================================================
    Private Sub Class_Terminate
      XD_RS.Close
      Set XD_RS = nothing
    End Sub
   
    '====================================================================
    'ShowError 错误提示
    '====================================================================
    Private Sub ShowError()
      If str_Error <> "" Then
        Response.Write("" & str_Error & "")
        Response.End
      End If
    End Sub
End Class
%>

[ 本帖最后由 天涯听雨 于 2009-10-17 17:50 编辑 ]
搜索更多相关主题的帖子: 数据 代码 
2009-10-17 17:45
lele2007
Rank: 5Rank: 5
来 自:广东省深圳
等 级:职业侠客
威 望:6
帖 子:1028
专家分:305
注 册:2007-9-4
收藏
得分:0 
我最不会的就是分页。。。呵呵。。收藏学习!!谢谢!!

学习编程www.
2009-10-17 19:03
aspic
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:51
帖 子:2258
专家分:8050
注 册:2008-2-18
收藏
得分:0 
顶一野
2009-10-18 09:09
天涯听雨
Rank: 2
来 自:东莞
等 级:论坛游民
威 望:4
帖 子:497
专家分:64
注 册:2007-8-25
收藏
得分:0 
大家热度不高啊!!

从明天起做幸福的人,喂马劈柴周游世界!
2009-10-18 19:36
快速回复:利用类写的百万级数据分页代码
数据加载中...
 
   



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

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