ASP分页类(支持多风格变换) 这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10万条数据的分页时间300多豪秒之间。复制代码 代码如下:<% '****************************** '名称:分页类 '日期:2005/12/3 '作者:西楼冷月 '网址:www.xilou.net | www.chinaCMS.org '描述:无 '版权:转载请注名出处,作者 '****************************** Class Page Private CurrPage Private PageN Private UrlStr Private TempStr Private ErrInfo Private IsErr Private TotalRecord Private TotalPage Public PageRs Private TempA(11) Private TempB(8) '------------------------------------------------------------ Private Sub Class_Initialize() CurrPage=1'//默认显示当前页为第一页 PageN=10'//默认每页显示10条数据 UrlStr="#" TempStr="" ErrInfo="ErrInfo:" IsErr=False End Sub Private Sub Class_Terminate() If IsObject(PageRs) Then PageRs.Close Set PageRs=Nothing End If Erase TempA Erase TempB End Sub '---------------------------------------------------------- '//获取当前页码 Public Property Let CurrentPage(Val) CurrPage=Val End Property Public Property Get CurrentPage() CurrentPage=CurrPage End Property '//获取每页显示条数 Public Property Let PageNum(Val) PageN=Val End Property Public Property Get PageNum() PageNum=PageN End Property '//获取URL Public Property Let Url(Val) UrlStr=Val End Property Public Property Get Url() Url=UrlStr End Property '//获取模板 Public Property Let Temp(Val) TempStr=Val End Property Public Property Get Temp() Temp=TempStr End Property '------------------------------------------------------------ Public Sub Exec(Sql,ConnObj) On Error Resume Next Set PageRs=Server.CreateObject("ADODB.RecordSet") PageRs.CursorLocation = 3 '使用客户端游标,可以使效率提高 PageRs.PageSize = PageN '定义分页记录集每页显示记录数 PageRs.Open Sql,ConnObj,0,1 If Err.Number<>0 Then Err.Clear PageRs.Close Set PageRs=Nothing ErrInfo=ErrInfo&"建立或打开记录集错误..." IsErr=True Response.Write ErrInfo Response.End End If TotalRecord=PageRs.RecordCount'//如果为0呢? If TotalRecord>=1 Then '----------------------------------------------------------------------------开始 '//计算总页数,Ps,为什么不用PageRs.PageCount呢? 'If TotalRecord Mod PageN=0 Then 'TotalPage=PageRs.RecordCount\PageN 'Else 'TotalPage=PageRs.RecordCount\PageN 'TotalPage=Abs(Int(TotalPage)) 'End If TotalPage=PageRs.PageCount '//处理当前接收页码,默认的为1,所以不是数字类型的都会为1 If IsNumeric(CurrPage) Then CurrPage=CLNg(CurrPage) If CurrPage<1 Then CurrPage=1 If CurrPage>TotalPage Then CurrPage=TotalPage Else '//Dim M:M="":IsNumeric(M)=True CurrPage=1 End If '---------------------------------------------------------------------------结束 Else TotalPage=0 CurrPage=1 End If '// PageRs.AbsolutePage = CurrPage 'absolutepage:设置指针指向某页开头 PageRs.PageSize=PageN End Sub Private Sub Init() 'Private TempA(10) TempA(1)="{N1}" '//首页 TempA(2)="{N2}"'//上一页 TempA(3)="{N3}"'//下一页 TempA(4)="{N4}"'//尾页 TempA(5)="{N5}"'//当前页码 TempA(6)="{N6}"'//页码总数 TempA(7)="{N7}"'//每页条数 TempA(8)="{N8}"'//文章总数 TempA(9)="{L}"'//循环标签开始 TempA(10)="{N}"'//循环内单标签:页码 TempA(11)="{L/}"'//循环标签结束 'Private TempB(8) TempB(1)="首页" TempB(2)="上一页" TempB(3)="下一页" TempB(4)="尾页" TempB(5)=CurrPage'//当前页码 TempB(6)=TotalPage'//页码总数 TempB(7)=PageN'//每页条数 TempB(8)=TotalRecord'//文章总数 End Sub Public Sub Show(Style) If IsErr=True Then Response.Write ErrInfo Exit Sub End If Call Init() Select Case Style Case 1 Response.Write StyleA() Case 2 Response.Write StyleB() Case 3 Response.Write StyleC() Case 4 Response.Write StyleD() Case Else ErrInfo=ErrInfo&"不存在当前样式..." Response.Write ErrInfo End Select End Sub Public Function ShowStyle(Style) If IsErr=True Then ShowStyle=ErrInfo Exit Function End If Call Init() Select Case Style Case 1 ShowStyle= StyleA() Case 2 ShowStyle= StyleB() Case Else ErrInfo=ErrInfo&"不存在当前样式..." ShowStyle=ErrInfo End Select End Function Private Function StyleA() '首页 上一页 下一页 尾页 本页为第1/20页,共20页,每页10条,文章总数200条 '//分页样例:[首页] [上页] [下页] [尾页] [页次:4/5页] [共86篇 20篇/页] 转到:_ 页 '//标签:{N1} {N2} {N3} {N4} || 共:{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条 If IsEmpty(TempStr) Then ErrInfo=ErrInfo&"模板为空..." StyleB=ErrInfo Exit Function End If Dim M If TotalPage>1 Then If CurrPage>1 Then M=""&"首页"&"" TempStr=Replace(TempStr,"{N1}",M) M=""&"上一页"&"" TempStr=Replace(TempStr,"{N2}",M) If CurrPage"&"下一页"&"" TempStr=Replace(TempStr,"{N3}",M) M=""&"尾页"&"" TempStr=Replace(TempStr,"{N4}",M) Else TempStr=Replace(TempStr,"{N3}","下一页") TempStr=Replace(TempStr,"{N4}","尾页") End If Else TempStr=Replace(TempStr,"{N1}","首页") TempStr=Replace(TempStr,"{N2}","上一页") M=""&"下一页"&"" TempStr=Replace(TempStr,"{N3}",M) M=""&"尾页"&"" TempStr=Replace(TempStr,"{N4}",M) End If Else TempStr=Replace(TempStr,"{N1}","首页") TempStr=Replace(TempStr,"{N2}","上一页") TempStr=Replace(TempStr,"{N3}","下一页") TempStr=Replace(TempStr,"{N4}","尾页") End If T=TempStr T=Replace(T,"{N8}",TotalRecord) T=Replace(T,"{N6}",TotalPage) T=Replace(T,"{N5}",CurrPage) T=Replace(T,"{N7}",PageN) TempStr=T StyleA=TempStr End Function Private Function StyleB() '首页 |< 1 2 3 4 5 6 7 >| 尾页 '//标签:{N1} {N2} {L}{N}{L/}{N3}{N4} If IsEmpty(TempStr) Then ErrInfo=ErrInfo&"模板为空..." StyleB=ErrInfo Exit Function End If Dim ForceNum,BackNum'//当前页的前面和后面显示个数 ForceNum=5 BackNum=4 Dim M '//首页 M=""&TempB(1)&"" TempStr=Replace(TempStr,"{N1}",M) '//尾页 M=""&TempB(4)&"" TempStr=Replace(TempStr,"{N4}",M) '//前一页 M="|<" If CurrPage-1>=1 Then M=""&"|<"&"" End If TempStr=Replace(TempStr,"{N2}",M) '//后一页 M=">|" If CurrPage+1<=TotalPage Then M=""&">|"&"" End If TempStr=Replace(TempStr,"{N3}",M) '//取出循环标签 Dim N1,N2,N3,N4,N5,N6 If InStr(TempStr,"{L}")>0 Then N1=InStr(TempStr,"{L}") End If If InStr(TempStr,"{L/}")>0 Then N2=InStr(TempStr,"{L/}") End If If N2<=N1 Then ErrInfo=ErrInfo&"循环标签出错..." StyleB=ErrInfo Exit Function End If N3=Mid(TempStr,N1,N2-N1+4)'//储存包括{L}{L/}循环标签的模板 N4=Replace(N3,"{L}","")'//储存不包括{L}{L/}循环标签的模板 N4=Replace(N4,"{L/}","") '//页码列表 Dim FirstPageNum,LastPageNum If CurrPage-ForceNum<=1 Then FirstPageNum=1 PageList="" Else FirstPageNum=CurrPage-ForceNum PageList="... ..." End If If CurrPage+BackNum>=TotalPage Then LastPageNum=TotalPage PageList_2="" Else LastPageNum=CurrPage+BackNum PageList_2="... ..." End If Dim I For I=FirstPageNum To LastPageNum If I=CurrPage Then N5=Replace(N4,"{N}",""&I&"") N6=N6&N5 Else M=""&I&"" N5=Replace(N4,"{N}",M) N6=N6&N5 End If Next TempStr=Replace(TempStr,N3,N6) StyleB=TempStr End Function Private Function StyleC() '首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页 '//此风格在StyleB的基础上修改,增加两个标签:{N9}上10页 {N10}下10页 '//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4} Dim T T=StyleB() '//前十页 M="|<<" If CurrPage-10>=1 Then M=""&"|<<"&"" End If T=Replace(T,"{N9}",M) M=">>|" If CurrPage+10<=TotalPage Then M=""&">>|"&"" End If T=Replace(T,"{N10}",M) StyleC=T End Function Private Function StyleD() '//此风格在StyleC的基础上修改 '//共{N8}条记录 {N6}页 当前为第{N5}页 每页{N7}条 '//首页 |< |<< 1 2 3 4 5 6 7 >>| >| 尾页 '//标签:{N1}{N2}{N9}{L}{N}{L/}{N10}{N3}{N4} Dim T T=StyleC() T=Replace(T,"{N8}",TotalRecord) T=Replace(T,"{N6}",TotalPage) T=Replace(T,"{N5}",CurrPage) T=Replace(T,"{N7}",PageN) StyleD=T End Function End Class %>