数据库分页算法类 仿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所以,大家凑合看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值