asp分页的一个类
            网络编程 发布日期:2025/10/31 浏览次数:1
         
        
            正在浏览: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 
%>