asp分页的一个类

  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

  %>