这个分页使用的是0游标,也就是Rs.Open Sql,Conn,0,1。但是感觉也快不了多少,10万条数据的分页时间300多豪秒之间<%Class PagePrivate CurrPagePrivate PageNPrivate UrlStrPrivate TempStrPrivate ErrInfoPrivate IsErrPrivate TotalRecordPrivate TotalPagePublic PageRs
Private TempA(11)Private TempB(8)'------------------------------------------------------------Private Sub Class_Initialize() CurrPage=1'//默认显示当前页为第一页 PageN=10'//默认每页显示10条数据 UrlStr="#" TempStr="" ErrInfo="ErrInfo:" IsErr=FalseEnd SubPrivate Sub Class_Terminate() If IsObject(PageRs) Then PageRs.Close Set PageRs=Nothing End If Erase TempA Erase TempBEnd Sub'----------------------------------------------------------'//获取当前页码Public Property Let CurrentPage(Val) CurrPage=Val End PropertyPublic Property Get CurrentPage() CurrentPage=CurrPageEnd Property'//获取每页显示条数Public Property Let PageNum(Val) PageN=ValEnd PropertyPublic Property Get PageNum() PageNum=PageNEnd Property'//获取URLPublic Property Let Url(Val) UrlStr=ValEnd PropertyPublic Property Get Url() Url=UrlStrEnd Property'//获取模板Public Property Let Temp(Val) TempStr=ValEnd PropertyPublic Property Get Temp() Temp=TempStrEnd 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=PageNEnd SubPrivate 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 SubPublic 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 SelectEnd SubPublic 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 SelectEnd 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 FunctionEnd IfDim MIf TotalPage>1 Then If CurrPage>1 Then M="<a href='"&UrlStr&"Page=1'>"&"首页"&"</a>" TempStr=Replace(TempStr,"{N1}",M) M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"上一页"&"</a>" TempStr=Replace(TempStr,"{N2}",M) If CurrPage<TotalPage Then M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>" TempStr=Replace(TempStr,"{N3}",M) M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>" 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="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&"下一页"&"</a>" TempStr=Replace(TempStr,"{N3}",M) M="<a href='"&UrlStr&"Page="&TotalPage&"'>"&"尾页"&"</a>" TempStr=Replace(TempStr,"{N4}",M) End IfElse TempStr=Replace(TempStr,"{N1}","首页") TempStr=Replace(TempStr,"{N2}","上一页") TempStr=Replace(TempStr,"{N3}","下一页") TempStr=Replace(TempStr,"{N4}","尾页")End IfT=TempStrT=Replace(T,"{N8}",TotalRecord)T=Replace(T,"{N6}",TotalPage)T=Replace(T,"{N5}",CurrPage)T=Replace(T,"{N7}",PageN)TempStr=TStyleA=TempStrEnd 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 FunctionEnd IfDim ForceNum,BackNum'//当前页的前面和后面显示个数ForceNum=5BackNum=4Dim M'//首页M="<a href='"&UrlStr&"Page=1'>"&TempB(1)&"</a>"TempStr=Replace(TempStr,"{N1}",M)'//尾页M="<a href='"&UrlStr&"Page="&TempB(6)&"'>"&TempB(4)&"</a>"TempStr=Replace(TempStr,"{N4}",M)'//前一页M="|<"If CurrPage-1>=1 Then M="<a href='"&UrlStr&"Page="&CurrPage-1&"'>"&"|<"&"</a>"End IfTempStr=Replace(TempStr,"{N2}",M)'//后一页M=">|"If CurrPage+1<=TotalPage Then M="<a href='"&UrlStr&"Page="&CurrPage+1&"'>"&">|"&"</a>"End IfTempStr=Replace(TempStr,"{N3}",M)'//取出循环标签Dim N1,N2,N3,N4,N5,N6If InStr(TempStr,"{L}")>0 Then N1=InStr(TempStr,"{L}")End IfIf InStr(TempStr,"{L/}")>0 Then N2=InStr(TempStr,"{L/}")End IfIf N2<=N1 Then ErrInfo=ErrInfo&"循环标签出错..." StyleB=ErrInfo Exit FunctionEnd IfN3=Mid(TempStr,N1,N2-N1+4)'//储存包括{L}{L/}循环标签的模板N4=Replace(N3,"{L}","")'//储存不包括{L}{L/}循环标签的模板N4=Replace(N4,"{L/}","")'//页码列表Dim FirstPageNum,LastPageNumIf CurrPage-ForceNum<=1 Then FirstPageNum=1 PageList=""Else FirstPageNum=CurrPage-ForceNum PageList="... ..."End IfIf CurrPage+BackNum>=TotalPage Then LastPageNum=TotalPage PageList_2=""Else LastPageNum=CurrPage+BackNum PageList_2="... ..."End IfDim IFor I=FirstPageNum To LastPageNum If I=CurrPage Then N5=Replace(N4,"{N}","<b>"&I&"</b>") N6=N6&N5 Else M="<a href='"&UrlStr&"Page="&I&"'>"&I&"</a>" N5=Replace(N4,"{N}",M) N6=N6&N5 End IfNextTempStr=Replace(TempStr,N3,N6)StyleB=TempStrEnd 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 TT=StyleB()'//前十页M="|<<"If CurrPage-10>=1 Then M="<a href='"&UrlStr&"Page="&CurrPage-10&"'>"&"|<<"&"</a>"End IfT=Replace(T,"{N9}",M)M=">>|"If CurrPage+10<=TotalPage Then M="<a href='"&UrlStr&"Page="&CurrPage+10&"'>"&">>|"&"</a>"End IfT=Replace(T,"{N10}",M)StyleC=TEnd 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 TT=StyleC()T=Replace(T,"{N8}",TotalRecord)T=Replace(T,"{N6}",TotalPage)T=Replace(T,"{N5}",CurrPage)T=Replace(T,"{N7}",PageN)StyleD=TEnd Function
End Class%>
