‘百万数据超强分页类~
‘比传统分页提高速度100倍
‘只使用 “select * from xxxx”格式的查询语句
‘使用方法:把这个文件 include 到你要进行分页的页面
‘ Dim Pl 定义变量,任意定义
‘ Set Pl = New AoaobPage 建立类的实例
‘ Pl.pagesize = 25 ‘每页显示个数
‘ Pl.SetPageTag = “id” ‘这是所有数据不会重复的数据库字段,一般为主键
‘ Pl.getconn = Db.Conn ‘这是数据库链接对象,根据自己的情况定义。
‘ Pl.getsql = Sql
‘ set Rs = Pl.getrs()’返回分页数据集
‘ For i=1 to 25
‘ If Rs.Eof Then Exit For
‘ ……
‘ Next
‘ set Pl = Nothing
‘版权所有 http://www.aoaob.com 欢迎转载~
‘联系邮件 webmaster@aoaob.com
<%
Const L_First="<font face=""webdings""><img src=""/images/to_r1_c1.gif"" border=""0"" /></font>" '定义第一页按钮显示样式
Const L_Prev="<font face=""webdings""><img src=""/images/to_r1_c2.gif"" border=""0"" /></font>" '定义前一页按钮显示样式
Const L_Next="<font face=""webdings""><img src=""/images/to_r1_c3.gif"" border=""0"" /></font>" '定义下一页按钮显示样式
Const L_Last="<font face=""webdings""><img src=""/images/to_r1_c4.gif"" border=""0"" /></font>" '定义最后一页按钮显示样式
Class AoaobPage
Private Conn
Private Rs
Private Sql
Private PageTag
Private ThisPageSize '一页数据量
Private RsNum '数据总量
Private PageNum '页数
Private ErrInfo
Private PageUrl
Private ThisPage '当前页面值
Private IsRs '数据是否已经初始化
Private ShowPage_info_ '分页导航缓存
Public GetCurPageNum
Public Int_CurPage
Private Sub Class_Initialize '类初始化
ThisPageSize = 10 '默认每页显示个数
GetCurPageNum = 10
PageTag = ""
ShowPage_info_ = ""
IsRs = false
If Request("page")="" Then
ThisPage=1
ElseIf not(IsNumeric(Request("page"))) Then
ThisPage=1
ElseIf CInt(Trim(Request("page")))<1 Then
ThisPage=1
Else
ThisPage=CInt(Trim(Request("page")))
End If
Int_CurPage = ThisPage
End Sub
'-----------------获取分页标识
Public Property Let SetPageTag(intvalue)
If intvalue <> "" Then
PageTag = intvalue
Else
ErrInfo=ErrInfo & "分页标识的参数不正确"
ShowError()
End If
End Property
'-----------------
Public Property Let PageSize(intvalue)
If IsNumeric(intvalue) Then
ThisPageSize=CLng(intvalue)
GetCurPageNum = ThisPageSize
If ThisPageSize < 1 Then ThisPageSize = 10
Else
ErrInfo=ErrInfo & "PageSize的参数不正确"
ShowError()
End If
End Property
'---------------返回每页个数
Public Property Get PageSize
If ThisPageSize="" or (not(IsNumeric(ThisPageSize))) Then
PageSize=10
Else
PageSize=ThisPageSize
End If
End Property
'----------------得到数据库链接
Public Property Let GetConn(sconn)
Set Conn=sconn
End Property
'-----------------------得到Sql语句
Public Property Let GetSQL(svalue)
Sql=Lcase(svalue)
End Property
'-------------------打开数据库
Private Sub OpenRs()
Set Rs = Server.CreateObject("Adodb.RecordSet")
Rs.Open Sql,Conn,1,1
End Sub
Public Property Get GetRs()
If Sql = "" Then
ErrInfo=ErrInfo & "Sql语句错误"
ShowError()
End If
Dim RsNumSql,RsNum_
RsNumSql = Replace(Sql,"*","count(*)")
If InStr(RsNumSql," order by ") > 0 Then RsNumSql = left(RsNumSql,InStrRev(RsNumSql," order by ") -1)
If Not IsObject(Conn) Then
ErrInfo=ErrInfo & "数据库链接对象错误!"
ShowError()
End If
set RsNum_ = Conn.Execute(RsNumSql)
RsNum = RsNum_(0)
RsNum_.Close
Set RsNum_ = Nothing
If RsNum mod ThisPageSize = 0 Then
PageNum = RsNum \ ThisPageSize
Else
PageNum = RsNum \ ThisPageSize + 1
End If
If ThisPage > PageNum Then ThisPage = PageNum
If(PageTag = "") Then
ErrInfo=ErrInfo & "分页标识的参数不正确!"
ShowError()
End If
If ThisPage = 1 Then
Sql = Replace(Sql,"*","Top "&ThisPageSize&" *")
ElseIf ThisPage > 1 Then
Sql = Replace(Replace(Sql,"*","Top "&ThisPageSize&" *"),"where","where "&PageTag&" not in ("&Replace(Sql,"*","Top "&(ThisPageSize*(ThisPage-1))&" "&PageTag)&") and")
End If
Call OpenRs()
IsRs = true
Set GetRs = Rs
End Property
Public Function ShowPage_info()
Dim result,i,m
PageUrl = GetUrl()
If Not IsRs Then
ErrInfo=ErrInfo & "数据执行错误!"
ShowError()
End If
If ShowPage_info_ <> "" Then
ShowPage_info = ShowPage_info_
Exit Function
End If
result = ""
If PageNum > 0 Then
If PageNum = 1 Then
Else
'第一页按钮
If ThisPage = 1 Then
result = result & L_First & vbCrLf
Else
result = result & "<a href="""&PageUrl&"1"">"&L_First&"</a>" & vbCrLf
End If
'上一数字列按钮
If ThisPage - 9 > 0 Then
result = result & "<a href="""&PageUrl&ThisPage-9&""">"&L_Prev&"</a>" & vbCrLf
Else
If ThisPage = 1 Then
result = result & L_Prev & vbCrLf
Else
result = result & "<a href="""&PageUrl&"1"">"&L_Prev&"</a>" & vbCrLf
End If
End If
'数字列按钮
If ThisPage > 5 and ThisPage + 5 < PageNum Then
For i = 1 to 9
m = ThisPage - 5 + i
If m > 0 and m <= PageNum Then
If m = ThisPage Then
result = result & "<strong class=""divline_hover""> "&m&" </strong> "&vbCrLf
Else
result = result & "<a href="""&PageUrl&m& """ class=""divline""> "&m&" </a> "&vbCrLf
End If
End If
Next
ElseIf ThisPage <= 5 and ThisPage + 5 < PageNum Then
For i = 1 to 9
If i <= PageNum Then
If i = ThisPage Then
result = result & "<strong class=""divline_hover""> "&i&" </strong> "&vbCrLf
Else
result = result & "<a href="""&PageUrl&i& """ class=""divline""> "&i&" </a> "&vbCrLf
End If
End If
Next
ElseIf ThisPage + 5 >= PageNum Then
For i = 1 to 9
If PageNum-9+i > 0 Then
If PageNum-9+i = ThisPage Then
result = result & "<strong class=""divline_hover""> "&PageNum-9+i&" </strong> "&vbCrLf
Else
result = result & "<a href="""&PageUrl&PageNum-9+i& """ class=""divline""> "&PageNum-9+i&" </a> "&vbCrLf
End If
End If
Next
End If
'下一数字列按钮
If ThisPage + 9 < PageNum Then
result = result & "<a href="""&PageUrl&ThisPage+9&""">"&L_Next&"</a>" & vbCrLf
Else
If ThisPage = PageNum or ThisPage + 5 > PageNum Then
result = result & L_Next & vbCrLf
Else
result = result & "<a href="""&PageUrl&PageNum&""">"&L_Next&"</a>" & vbCrLf
End If
End If
'最后一页按钮
If ThisPage = PageNum or ThisPage + 5 > PageNum Then
result = result & L_Last & vbCrLf
Else
result = result & "<a href="""&PageUrl&PageNum&""">"&L_Last&"</a>" & vbCrLf
End If
result = result & " "&ThisPage&"/"&PageNum&" 总共:"&RsNum&" "&ThisPageSize&"/页"&vbCrLf
End If
Else
result = "没有您要找的数据"
End If
ShowPage_info_ = result
ShowPage_info = result
End Function
Private function GetURL()
Dim strUrl,tmp_URL,i,j,search_str,result_url,str_params,str_lparams,str_rparams
search_str="page="
strUrl=Request.Servervariables("URL")
strUrl=split(strUrl,"/")
i=UBound(strUrl,1)
tmp_URL=strUrl(i)'得到当前页文件名
str_params=replace(Trim(Request.Servervariables("QUERY_STRING")),"&_=","")
If str_params="" Then
result_url=tmp_URL & "?page="
Else
If InstrRev(str_params,search_str)=0 Then
result_url=tmp_URL & "?" & str_params &"&page="
Else
j=InstrRev(str_params,search_str)-2
If j=-1 Then
result_url=tmp_URL & "?page="
Else
str_lparams=Left(str_params,j)
str_rparams=right(str_params,len(str_params)-j-1)
if InStr(str_rparams,"&")<>0 then
str_rparams=right(str_rparams,len(str_rparams)-InStr(str_rparams,"&")+1)
else
str_rparams = ""
end if
result_url=tmp_URL & "?" & str_lparams&str_rparams&"&page="
End If
End If
End If
GetURL=result_url
End function
'--------------------销毁类
Private Sub Class_Terminate
Obj_Rs.close
Set Obj_Rs=nothing
Obj_Conn.close
set Obj_Conn = nothing
End Sub
'------------------错误提示
Private Sub ShowError()
If ErrInfo <> "" Then
Response.Write("" & ErrInfo & "")
Response.End()
End If
End Sub
End Class
%>