数据库分页算法类 仿LeadBBS

Class Pg_Jet_Ex

      Private sCodeVer, sCodeName, sCoder, sDis
      Private Toward, Backward, TowardOrder, BackwardOrder
      Private IdxSql, QuerySql
      Public Conn
      Public PageCount, ItemCount, PageItemCount
      Public PageLast, PageStart
      Public ViewPage, ToPage, Division, StepPage, StartID
      Public OrderKey, OrderMode
      Public IdxTable, IdxKey, IdxWhere
      Public QueryTable, QueryKeys, QueryWhere

      Private Sub Class_Initialize()
            sCodeVer = "1.1.050115"
            sCodeName = "JetPage Leader!"
            sCoder = "ashi"
            sDis = "数据分页类。"
            ViewPage = 1            '浏览页面
            ToPage = 1                  '去往页面
            Division = 20            '每页显示数目
            StepPage = 5            '允许最大跳转页数
            StartID = 0                  '索引查询开始记录号,优化查询
            PageCount = 0            '页面总数
            ItemCount = 0            '记录总数
            OrderKey = "id"            '排序字段,使用数据库中的索引字段,存在于索引表和数据表中的共有数据,在表中具有唯一值
            OrderMode = "asc"      '排序方式
            IdxKey = "id"            '索引字段名称,存在于索引表和数据表中的共有字段
            IdxTable = ""            '索引表
            IdxWhere = ""            '索引表Where
            QueryKeys = ""            '查询字段名称
            QueryTable = ""            '查询表
            QueryWhere = ""            '查询表Where
      End Sub
     
      Private Sub OrderChoose()
            Select Case LCase(OrderMode)
                  Case "desc"
                        OrderMode = "desc"
                        Toward = "<"
                        TowardOrder = "desc"
                        Backward = ">"
                        BackwardOrder = "asc"
                  Case Else
                        OrderMode = "asc"
                        Toward = ">"
                        TowardOrder = "asc"
                        Backward = "<"
                        BackwardOrder = "desc"
            End Select
      End Sub
     
      Private Sub CountPage()
            Dim Rs, Sql, sT
            If IdxWhere <> "" Then sT = " Where " & IdxWhere
            Sql = "Select Count(*) From " & IdxTable & sT
            'Debug.addsql(Sql)
            'Sys.Dbplus()
            Set Rs = Conn.ExeCute(Sql)
            If Not Rs.Eof Then
                  ItemCount = cCur(Rs(0))
            End If
            Rs.Close()
            Set Rs = Nothing
      End Sub
     
      Private Sub ListPage()
            Dim iMovePg, iaMovePg
            Dim iTop, iDis, i, itc
            Dim iMode
            Dim Rs, at, aw, sw
            Dim st
           
            PageCount = ItemCount / Division
            If ItemCount Mod Division > 0 Then PageCount = PageCount + 1

            If ToPage =< 1 Then
                  iMode = 1
            ElseIf ToPage >= PageCount Then
                  if StartId <= 0 Then
                        iMode = -1
                  Else
                        iMode = 0
                        iMovePg = ToPage - ViewPage
                        iaMovePg = Abs(iMovePg)
                        iTop = iaMovePg * Division
                        iDis = iTop - Division
                        If iaMovePg > StepPage Or iaMovePg = 0 Then iMode = -1
                        If StartID =< 0 Then iMode = -1
                  End If
            Else
                  iMode = 0
                  iMovePg = ToPage - ViewPage
                  iaMovePg = Abs(iMovePg)
                  iTop = iaMovePg * Division
                  iDis = iTop - Division
                  If iaMovePg > StepPage Or iaMovePg = 0 Then iMode = 1
                  If StartID =< 0 Then iMode = 1
            End If
                       
            If IdxWhere <> "" Then st = " Where " & IdxWhere
           
            Select Case iMode
                  Case 1
                        ToPage = 1
                        iTop = Division
                        iDis = 0
                        iMovePg = 1
                        If PageCount = 1 Then iTop = ItemCount
                        IdxSql = "Select Top " & iTop & " " & IdxKey & " From " & IdxTable & st & " Order By " & OrderKey & " " & TowardOrder
                  Case -1
                        ToPage = PageCount
                        iTop = ItemCount - (PageCount - 1) * Division
                        iDis = 0
                        iMovePg = -1
                        IdxSql = "Select Top " & iTop & " " & IdxKey & " From " & IdxTable & st & " Order By " & OrderKey & " " & BackwardOrder
                  Case 0
                        If IdxWhere <> "" Then st = IdxWhere & " And "
                        If iMovePg < 0 Then
                              IdxSql = "Select Top " & iTop & " " & IdxKey & " From " & IdxTable & " Where " & st & OrderKey & Backward & StartID & " Order By " & OrderKey & " " & BackwardOrder
                        Else
                              IdxSql = "Select Top " & iTop & " " & IdxKey & " From " & IdxTable & " Where " & st & OrderKey & Toward & StartID & " Order By " & OrderKey & " " & TowardOrder
                        End If
            End Select

            Set Rs = Conn.Execute(IdxSql)
            'Debug.AddSql IdxSql
            'Sys.Dbplus
           
            If Rs.Eof Then
                  Rs.Close()
                  Set Rs = Nothing
                  Set Conn = Noting
                  Sys.ShowErr sCodeName, sCodeVer, "未找到请求的索引(" & IdxSql & ")。"
            Else
                  If iDis > 0 Then Rs.Move(iDis)
                  If Rs.Eof Then
                        Rs.Close()
                        Set Rs = Nothing
                        ToPage = 1
                        ListPage()
                        Exit Sub
                  End If
                  aw = Rs.GetRows(-1)
                  Rs.Close()
                  Set Rs = Nothing
                  itc = Ubound(aw,2)
                  ReDim At(itc)
                  For i = 0 To itc
                        at(i) = aw(0, i)
                  Next
                  aw = Empty
                  If iMovePg < 0 Then
                        PageStart = at(itc)
                        PageLast = at(0)
                  Else
                        PageStart = at(0)
                        PageLast = at(itc)
                  End If
                  If isNumeric(at(0)) Then
                        sw = Join(at, ",")
                  Else
                        sw = "'" & join(at, "','") & "'"
                  End If
                  If QueryWhere <> "" Then
                        QueryWhere = QueryWhere & " And "
                  End If                       
                  QuerySql = "Select " & QueryKeys & " From " & QueryTable & " Where " & QueryWhere & IdxKey & " In(" & sw & ") Order By " & OrderKey & " " & OrderMode
                  'Debug.addsql(QuerySql)
                  'Sys.Dbplus()
            End If
           
            PageItemCount = iTc + 1
            ViewPage = ToPage
      End Sub
     
      Public Property Get Rec()
            If ItemCount = 0 Then
                  CountPage()
            End If
            OrderChoose()
            ListPage()
            Rec = Conn.Execute(QuerySql).Getrows(-1)
      End Property

End Class

调用实例:

Dim obj
Set obj = New Pg_Jet_Ex

With obj
     .Division = 20
     .IdxKey = "ID"
     .IdxTable = "markList"
     .QueryKeys = "考号,姓名,语文总分"
     .QueryTable = "markList"
     .StepPage = 5
     .ViewPage = sys.Requestnum("p")
     .ToPage = sys.Requestnum("t")
     .StartId = sys.Requestnum("s")
     .OrderKey = "Id"
     .OrderMode = "asc"
     .ItemCount = 375
     Set .Conn = mCon
     Rs = .Rec
     Set .Conn = Nothing
     Set mcon = Nothing
End With
With xs
.load "plug_mark2"
.OpenTag "marks"
     .Tag "item"
           For i = 0 To obj.pageitemcount - 1
                 .pVar(Array("序号","考号","姓名","语文总分")) = Array(i+1,rs(0,i),rs(1,i),rs(2,i))
           Next
     .EndTag
     .pVar("startid") = obj.PageStart
     .pVar("endid") = obj.PageLast
     .pVar("viewpage") = obj.viewpage
     .pVar("pagecount") = obj.pagecount
     .pVar("itemcount") = obj.itemcount
     .pVar("division") = obj.division
     If b Then .pVar("ableorder") = ""
.EndTag
.res
End With

 

生成链接条的客户端脚本

           <script language="javascript">
           vpg=<xsl:value-of select="marks/viewpage" />;
           sid=<xsl:value-of select="marks/startid" />;
           eid=<xsl:value-of select="marks/endid" />;
           pagecount=<xsl:value-of select="marks/pagecount" />;
           itemcount=<xsl:value-of select="marks/itemcount" />;
           <xsl:text disable-output-escaping="yes">

           if(vpg>1){
                 document.write("<a href=netx.asp?t=1>首页</a> <a href=netx.asp?p="+vpg+"&t="+(vpg-1)+"&s="+sid+">上一页</a>")
           }
           else{
           document.write("<span disabled>首页 上一页</span>")
           }
           document.write(" 页面: "+vpg+" / "+pagecount+" 统计: "+itemcount+" 条记录 ");
           if(vpg<pagecount){
                 document.write("<a href=netx.asp?p="+vpg+"&t="+(vpg+1)+"&s="+eid+">下一页</a> <a href=netx.asp?t="+pagecount+">尾页</a>")
           }
           else{
                 document.write("<span disabled>下一页 尾页</span>")
           }

           </script>

因为我的模板用的是xslt所以,大家凑合看

阅读更多
个人分类: 脚本编程
想对作者说点什么? 我来说一句

常用的数据库分页语句

2011年06月11日 23KB 下载

数据库分页和文件上传

2018年05月22日 6.92MB 下载

数据库分页SQL

2014年08月15日 814B 下载

数据库分页用存储过程实现的

2009年03月07日 4KB 下载

数据库分页

2008年07月31日 55KB 下载

数据库分页方法

2012年12月30日 153B 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭