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所以,大家凑合看