asp分页的一个类,在50,000条记录下测试过,速度比ado的那个要快多了
- <%
- '************************************************************************************
- '具体用法
- Dim strDbPath
- Dim connstr
- Dim mp
- Set mp = New MyPage
- strDbPath = "fenye/db.mdb"
- connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
- connstr = connstr & Server.MapPath(strDbPath)
- Set conn = Server.CreateObject("Adodb.Connection")
- conn.open connstr
- set rs = mp.Execute("select * from table1",conn,29)
- while not rs.eof
- response.write rs("aaaa")&"<br>"
- rs.MoveNext
- wend
- mp.pageDispaly()
- '************************************************************************************
- Class MyPage
- private MyPage_Conn,MyPage_StrSql,MyPage_TotalStrSql,MyPage_RS,MyPage_TotalRS
- private MyPage_PageSize
- private MyPage_PageAbsolute,MyPage_PageTotal,MyPage_RecordTotal
- private MyPage_Url
- public property let conn(strConn)
- set MyPage_Conn = strConn
- end property
- public property let PageSize(intPageSize)
- MyPage_PageSize = Cint(intPageSize)
- end property
- public function PageExecute(strSql)
- MyPage_PageAbsolute = MyPage_PageAbsoluteRequest()
- MyPage_TotalStrSql = FormatMyPage_TotalStrSql(strSql)
- set MyPage_TotalRS = MyPage_Conn.execute(MyPage_TotalStrSql)
- MyPage_RecordTotal = MyPage_TotalRS("total")
- MyPage_PageTotal = Cint(MyPage_RecordTotal/MyPage_PageSize)
- MyPage_StrSql = FormatMyPage_StrSql(strSql)
- set MyPage_RS = MyPage_Conn.execute(MyPage_StrSql)
- dim i
- i = 0
- while not MyPage_RS.eof and i<(MyPage_PageAbsolute-1)*MyPage_PageSize
- i = i + 1
- MyPage_RS.MoveNext
- wend
- set PageExecute = MyPage_RS
- end function
- public function Execute(strSql,strConn,intPageSize)
- conn = strConn
- PageSize = intPageSize
- set Execute = PageExecute(strSql)
- end function
- public function pageDispaly()
- MyPage_Url = ReadMyPage_Url
- firstPageTag = "<font face=webdings>9</font>" '|<<
- LastPageTag = "<font face=webdings>:</font>" '>>|
- previewPageTag = "<font face=webdings>7</font>" '<<
- nextPageTag = "<font face=webdings>8</font>" '>>
- dim strAnd
- if instr(MyPage_Url,"?")=0 then
- strAnd = "?"
- else
- strAnd = "&"
- end if
- response.write "<table width=100% border=0 cellspacing=0 cellpadding=0>"
- response.write "<tr>"
- response.write "<td align=left>"
- response.write "页次:"&MyPage_PageAbsolute&"/"&MyPage_PageTotal&"页 "
- response.write "主题数:"&MyPage_RecordTotal
- response.write "</td>"
- response.write "<td align=right>"
- response.write "分页:"
- if MyPage_PageAbsolute>10 then
- response.write "<a href='"&MyPage_Url&strAnd&"MyPage_PageNo=1'>"&firstPageTag&"</a>"
- response.write "<a href='"&MyPage_Url&strAnd&"MyPage_PageNo="&(MyPage_PageAbsolute-10)&"'>"&previewPageTag&"</a>"
- else
- response.write firstPageTag
- response.write previewPageTag
- end if
- response.write " "
- dim CurrentStartPage,i
- i = 1
- CurrentStartPage=(Cint(MyPage_PageAbsolute)\10)*10+1
- if Cint(MyPage_PageAbsolute) mod 10=0 then
- CurrentStartPage = CurrentStartPage - 10
- end if
- while i<11 and CurrentStartPage<MyPage_PageTotal+1
- if CurrentStartPage < 10 then
- FormatCurrentStartPage = "0" & CurrentStartPage
- else
- FormatCurrentStartPage = CurrentStartPage
- end if
- response.write "<a href='"&MyPage_Url&strAnd&"MyPage_PageNo="&CurrentStartPage&"'>"&FormatCurrentStartPage&"</a> "
- i = i + 1
- CurrentStartPage = CurrentStartPage + 1
- wend
- if MyPage_PageAbsolute<(MyPage_PageTotal-10) then
- response.write "<a href='"&MyPage_Url&strAnd&"MyPage_PageNo="&(MyPage_PageAbsolute+10)&"'>"&nextPageTag&"</a>"
- response.write "<a href='"&MyPage_Url&strAnd&"MyPage_PageNo="&MyPage_PageTotal&"'>"&LastPageTag&"</a>"
- else
- response.write nextPageTag
- response.write LastPageTag
- end if
- response.write ""
- response.write "</td>"
- response.write "</tr>"
- response.write "</table>"
- end function
- public function GetPageNo()
- GetPageNo = cint(MyPage_PageAbsolute)
- end function
- public function GetPageCount()
- GetPageCount = cint(MyPage_PageTotal)
- end function
- public function GetPageNoName()
- GetPageNoName = "MyPage_PageNo"
- end function
- public function GetPageSize()
- GetPageSize = MyPage_PageSize
- end function
- public function GetRecordTotal()
- GetRecordTotal = MyPage_RecordTotal
- end function
- private function FormatMyPage_TotalStrSql(strSql)
- FormatMyPage_TotalStrSql = "select count(*) as total "
- FormatMyPage_TotalStrSql = FormatMyPage_TotalStrSql & Mid(strSql,instr(strSql,"from"))
- FormatMyPage_TotalStrSql = Mid(FormatMyPage_TotalStrSql,1,instr(FormatMyPage_TotalStrSql&"order by","order by")-1)
- end function
- private function FormatMyPage_StrSql(strSql)
- FormatMyPage_StrSql = replace(strSql,"select","select top "&(MyPage_PageAbsolute*Cint(MyPage_PageSize)))
- end function
- private function MyPage_PageAbsoluteRequest()
- if request("MyPage_PageNo")="" then
- MyPage_PageAbsoluteRequest = 1
- else
- if IsNumeric(request("MyPage_PageNo")) then
- MyPage_PageAbsoluteRequest = request("MyPage_PageNo")
- else
- MyPage_PageAbsoluteRequest = 1
- end if
- end if
- end function
- private function ReadMyPage_Url()
- ReadMyPage_Url = Request.ServerVariables("URL")
- if Request.QueryString<>"" then
- ReadMyPage_Url = ReadMyPage_Url & "?" & Request.QueryString
- end if
- set re = new RegExp
- re.Pattern = "[&|?]MyPage_PageNo=\d+?"
- re.IgnoreCase = true
- re.multiLine = true
- re.global = true
- Set Matches = re.Execute(ReadMyPage_Url)
- For Each Match in Matches
- tmpMatch = Match.Value
- ReadMyPage_Url = replace(ReadMyPage_Url,tmpMatch,"")
- next
- end function
- end Class
- %>