<% Class YY_PageCla Private APC_PageCount,APC_Conn,APC_Rs,APC_SQL,APC_PageSize,APC_SUrl,INT_CurPage,INT_TotalPage,INT_TotalRecord,STR_Url,BTN_First,BTN_Prev,BTN_Next,BTN_Last,YY_COLOR
'================================================================== 'Class_Initialize:初始化当前页的值 '================================================================== Private Sub Class_Initialize APC_PageSize=10 '设定分页的默认值为10 BTN_First="首页" '定义第一页按钮显示样式 BTN_Prev="上一页" '定义前一页按钮显示样式 BTN_Next="下一页" '定义下一页按钮显示样式 BTN_Last="尾页" '定义最后一页按钮显示样式 YY_COLOR="#FF0000" '======================== '以下过程获取当前面的值 '======================== If Request("page")="" Then INT_CurPage=1 ElseIf Not(IsNumeric(Request("page"))) Then INT_CurPage=1 ElseIf Fix(Trim(Request("page")))<1 Then INT_CurPage=1 Else INT_CurPage=Fix(Trim(Request("page"))) End If End Sub
Public Property Let BTN(BTN_BTN) BBB=split(BTN_BTN,",") if ubound(BBB)=3 then BTN_First=BBB(0) BTN_Prev=BBB(1) BTN_Next=BBB(2) BTN_Last=BBB(3) end if End Property
'================================================================= 'COLOR:设置当前页的颜色 '================================================================= Public Property Let COLOR(INT_COLOR) YY_COLOR=INT_COLOR End Property
Public Property Get COLOR COLOR=YY_COLOR End Property
'================================================================= 'PageSize:设置每页显示数量 '================================================================= Public Property Let PageSize(INT_PageSize) If IsNumeric(INT_PageSize) Then APC_PageSize=Fix(INT_PageSize) Else STR_Error=STR_Error & "PageSize(每页显示数量)的参数不正确!" ShowError() End If End Property
Public Property Get PageSize If APC_PageSize="" or (Not(IsNumeric(APC_PageSize))) Then PageSize=10 Else PageSize=APC_PageSize End If End Property
'================================================================= 'GetRS:返回分页后的记录集 '================================================================= Public Property Get GetRs() Set APC_Rs=Server.createobject("adodb.recordset") APC_Rs.PageSize=PageSize APC_Rs.Open APC_SQL,APC_Conn,1,1 If Not(APC_Rs.eof and APC_RS.BOF) Then If INT_CurPage>APC_RS.PageCount Then INT_CurPage=APC_RS.PageCount End If APC_Rs.AbsolutePage=INT_CurPage End If Set GetRs=APC_RS End Property
'================================================================ 'GetConn:得到数据库连接 '================================================================ Public Property Let GetConn(OBJ_Conn) Set APC_Conn=OBJ_Conn End Property
'================================================================ 'GetSQL:得到查询语句 '================================================================ Public Property Let GetSQL(STR_Sql) APC_SQL=STR_Sql End Property
'==================================================================== 'ShowPage:创建分页导航条,有首页、前一页、下一页、末页、还有数字导航 '==================================================================== Public Sub ShowPage() Dim STR_Tmp APC_SUrl = GetUrl() INT_TotalRecord=APC_RS.RecordCount If INT_TotalRecord<=0 Then STR_Error=STR_Error & "总记录数为零,请输入数据" Call ShowError() End If If INT_TotalRecord="" then INT_TotalPage=1 Else If INT_TotalRecord mod PageSize =0 Then INT_TotalPage = Fix(INT_TotalRecord / APC_PageSize) Else INT_TotalPage = Fix(INT_TotalRecord / APC_PageSize)+1 End If End If If INT_CurPage>INT_TotalPage Then INT_CurPage=INT_TotalPage End If
'================================================================== '显示分页信息,各个模块根据自己要求更改显求位置 '================================================================== response.write "" STR_Tmp=ShowFirstPrv response.write STR_Tmp STR_Tmp=ShowNumBtn response.write STR_Tmp STR_Tmp=ShowNextLast response.write STR_Tmp STR_Tmp=ShowPageInfo response.write STR_Tmp response.write "" End Sub
'==================================================================== 'ShowFirstPrv:显示首页、前一页 '==================================================================== Private Function ShowFirstPrv() Dim STR_Tmp,INT_PrvPage If INT_CurPage=1 Then STR_Tmp=BTN_First&" "&BTN_Prev Else INT_PrvPage=INT_CurPage-1 STR_Tmp="<a href="""&APC_SUrl & "1" & """>" & BTN_First&"</a> <a href=""" & APC_SUrl & CStr(INT_PrvPage) & """>" & BTN_Prev&"</a>" End If ShowFirstPrv=STR_Tmp End Function
'==================================================================== 'ShowNextLast:显示下一页、末页 '==================================================================== Private Function ShowNextLast() Dim STR_Tmp,INT_Nextpage If INT_CurPage>=INT_TotalPage Then STR_Tmp=BTN_Next & " " & BTN_Last Else INT_NextPage=INT_CurPage+1 STR_Tmp="<a href=""" & APC_SUrl & CStr(INT_nextpage) & """>" & BTN_Next&"</a> <a href="""& APC_SUrl & CStr(INT_TotalPage) & """>" & BTN_Last&"</a>" End If ShowNextLast=STR_Tmp End Function
'==================================================================== 'ShowNumBtn:显示数字导航 '==================================================================== Private Function ShowNumBtn() Dim i,STR_Tmp,j if INT_TotalPage<10 or INT_CurPage<6 then if INT_TotalPage<10 then j=INT_CurPage else j=10 end if For i=1 to j if i=INT_CurPage then STR_Tmp=STR_Tmp & " <font color="""&color&"""><b>"&i&"</b></font> " else STR_Tmp=STR_Tmp & " <a href=""" & APC_SUrl & CStr(i) & """>"&i&"</a> " end if Next elseif INT_CurPage+5>INT_TotalPage then For i=INT_CurPage-5 to INT_TotalPage if i=INT_CurPage then STR_Tmp=STR_Tmp & " <font color="""&color&"""><b>"&i&"</b></font> " else STR_Tmp=STR_Tmp & " <a href=""" & APC_SUrl & CStr(i) & """>"&i&"</a> " end if Next else For i=INT_CurPage-5 to INT_CurPage+5 if i=INT_CurPage then STR_Tmp=STR_Tmp & " <font color="""&color&"""><b>"&i&"</b></font> " else STR_Tmp=STR_Tmp & " <a href=""" & APC_SUrl & CStr(i) & """>"&i&"</a> " end if Next end if ShowNumBtn=STR_Tmp End Function
'==================================================================== 'ShowPageInfo:分页信息,根据要求自行修改 '==================================================================== Private Function ShowPageInfo() Dim STR_Tmp STR_Tmp=" 页次:"&INT_CurPage&"/"&INT_TotalPage&"页 共"&INT_TotalRecord&"条记录 "&APC_PageSize&"条/每页 " ShowPageInfo=STR_Tmp End Function '================================================================== 'GetURL:得到当前的URL,根据URL参数不同,获取不同的结果 '================================================================== Private Function GetURL() Dim strurl,STR_Url,i,j,search_str,result_url search_str="page=" strurl=Request.ServerVariables("URL") Strurl=split(strurl,"/") i=UBound(strurl,1) STR_Url=strurl(i)'得到当前页文件名 STR_params=Trim(Request.ServerVariables("QUERY_STRING")) If STR_params="" Then result_url=STR_Url & "?page=" Else If InstrRev(STR_params,search_str)=0 Then result_url=STR_Url & "?" & STR_params &"&page=" Else j=InstrRev(STR_params,search_str)-2 If j=-1 Then result_url=STR_Url & "?page=" Else STR_params=Left(STR_params,j) result_url=STR_Url & "?" & STR_params &"&page=" End If End If End If GetURL=result_url End Function
'==================================================================== ' 设置 Terminate 事件。 '==================================================================== Private Sub Class_Terminate APC_RS.close Set APC_RS=nothing End Sub '==================================================================== 'ShowError:错误提示 '==================================================================== Private Sub ShowError() If STR_Error <> "" Then Response.Write("" & STR_Error & "") Response.End End If End Sub End class %>
实例:
<% ssssss=Timer '==================================================================== '下面是类运用的实例 '==================================================================== set conn = server.CreateObject("adodb.connection") conn.open "driver={microsoft access driver (*.mdb)};dbq=" & server.Mappath("mdb.mdb")
'创建对象 Set Pages=New YY_PageCla '得到数据库连接 Pages.GetConn=conn 'Sql语句 Pages.GetSql="select * from [content] order by id asc" '设置每一页的记录条数据为10条 Pages.PageSize=10 '设置当前页的颜色,默认为红色 Pages.COLOR="#FF00FF" '设置文字导航,用“,”分隔,错误即用默认的显示 Pages.Btn="首页,上一页,下一页,尾页" '返回RecordSet set Rs=Pages.GetRs() '显示分页信息,可以调用多次 Pages.ShowPage()
'显示数据 Response.Write("<br/>") for i=1 to Pages.PageSize '这里就可以自定义显示方式了 if not rs.eof then response.write left(rs("content"),20) & "<br/>" rs.movenext else exit for end if next
response.write "花费时间:"&CStr(Int(((Timer - ssssss) * 10000) + 0.5) / 10)&"毫秒" %>
测试:access百万级数据量要花5秒时间
测试图:
|