asp 超强分页类 比传统分页提高速度100倍

‘百万数据超强分页类~
‘比传统分页提高速度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"">&nbsp;"&m&"&nbsp;</strong>&nbsp;"&vbCrLf
 Else
 result = result & "<a href="""&PageUrl&m& """ class=""divline"">&nbsp;"&m&"&nbsp;</a>&nbsp;"&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"">&nbsp;"&i&"&nbsp;</strong>&nbsp;"&vbCrLf
 Else
 result = result & "<a href="""&PageUrl&i& """ class=""divline"">&nbsp;"&i&"&nbsp;</a>&nbsp;"&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"">&nbsp;"&PageNum-9+i&"&nbsp;</strong>&nbsp;"&vbCrLf
 Else
 result = result & "<a href="""&PageUrl&PageNum-9+i& """ class=""divline"">&nbsp;"&PageNum-9+i&"&nbsp;</a>&nbsp;"&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 & "&nbsp;"&ThisPage&"/"&PageNum&"&nbsp;总共:"&RsNum&"&nbsp;"&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
%>

 

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注