asp分页的一个类

asp分页的一个类,

在50,000条记录下测试过,速度比ado的那个要快多了

<%

'************************************************************************************
'具体用法
'Set conn=Server.CreateObject("ADODB.Connection")
'conn.open "DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=1230;DATABASE=Music"
'set rs = mp.Execute("select * from MusicList",conn,29)
'while not rs.eof
' response.write rs("MusicName")&"<br>"
' rs2.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&"页&nbsp"
  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 "&nbsp"
  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>&nbsp"
   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

%><% '************************************************************************************ '具体用法 'Set conn=Server.CreateObject("ADODB.Connection") 'conn.open "DRIVER={SQL Server};SERVER=(local);UID=sa;PWD=1230;DATABASE=Music" 'pageSize=30 'set rs = mp.Execute("select * from MusicList",conn,pageSize) 'while not rs2.eof ' response.write rs2("MusicName")&"
" ' 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 = "9" '|<< LastPageTag = ":" '>>| previewPageTag = "7" '<< nextPageTag = "8" '>> dim strAnd if instr(MyPage_Url,"?")=0 then strAnd = "?" else strAnd = "&" end if response.write "

" response.write "
" response.write "
" response.write "页次:"&MyPage_PageAbsolute&"/"&MyPage_PageTotal&"页?" response.write "主题数:"&MyPage_RecordTotal response.write "
" response.write "
" response.write "分页:" if MyPage_PageAbsolute>10 then response.write ""&firstPageTag&"" response.write ""&previewPageTag&"" 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 "&FormatCurrentStartPage&"?" i = i + 1 CurrentStartPage = CurrentStartPage + 1 wend if MyPage_PageAbsolute<(MyPage_PageTotal-10) then response.write " "&nextPageTag&"" response.write " "&LastPageTag&"" else response.write nextPageTag response.write LastPageTag end if response.write "" response.write "
" response.write " " response.write " " 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 %>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值