简单的分页类



<%@ Language=VBScript %><% Option Explicit %><SCRIPT LANGUAGE=VBScript RUNAT=SERVER>  '确保引用 ADO Typelib 或使用 ADOVBS.Inc  Dim iPageNum, iRowsPerPage

  Main    Sub Main()   Dim rst   Dim sSQL, sConnString

   If Request.QueryString("iPageNum") = "" Then     iPageNum = 1   Else     iPageNum = Request.QueryString("iPageNum")     iPageNum = CInt(iPageNum)   End If

   iRowsPerPage = 10

   sConnString = "Provider=SQLOLEDB.1;password=Xyz123;user id=WebUser;" & _          "Initial Catalog=NorthWind;Data Source=MySQLServer;" & _          "network=dbmssocn;"

   '下列 SQL 从 SQL 视图中检索所有列。   '要优化性能:   '- 使用存储过程、视图或在 SELECT 中指定列   '- 使用限制返回的记录的条件(例如,WHERE 子句)   sSQL = "SELECT CategoryName, ProductName, QuantityPerUnit,"   sSQL = sSQL & "UnitsInStock, Discontinued"      sSQL = sSQL & " FROM [Products By Category]"

   Set rst = GetRecords(sConnString, sSQL)

   WriteTableHeader rst   WriteTableBody rst, iRowsPerPage, iPageNum   ShowNavBar rst

   'ShowFastNavBar 方法不使用 RecordCount   '或 PageCount,所以它重试的记录数仅等于   '记录集的 CacheSize 指定的数量。

   'ShowFastNavBar rst

   CleanUp rst  End Sub

  Function GetRecords(sConnString, sSQL)  Dim cnn  Dim rst

    set cnn = Server.CreateObject("ADODB.CONNECTION")    cnn.ConnectionString = sConnString    nn.Open

    Set rst = Server.CreateObject("ADODB.RECORDSET")

    Set rst.ActiveConnection = cnn

     '当记录集打开时,adUseClient 的 CursorLocation     ' 将检索所有的记录。     'adUseServer 允许沿用 CacheSize     rst.CursorLocation = adUseServer

     '在使用服务器端游标时,CacheSize       '限制了取回的行数。我们将只抓取正在显示的     '的记录的数目 - iRowsPerPage     rst.CacheSize = iRowsPerPage

     rst.Open sSQL,,adOpenStatic, adLockReadOnly牋?     Set GetRecords = rst    end Function

    Sub WriteTableHeader(rst)    Dim fld

     Response.Write "<TABLE WIDTH=80% BORDER=1>"     Response.Write "<TR>"

     '建立表的列标题      For Each fld in rst.Fields       Response.Write "<TD><B>" & fld.Name & "</B></TD>"    Next    Response.Write "</TR>"   End Sub

   Sub WriteTableBody(rst, iRowsPerPage, iPageNum)   Dim iLoop   Dim fld

   iLoop = 1

   rst.PageSize = iRowsPerPage   rst.AbsolutePage = iPageNum

   '写出记录的当前页   Do While (Not rst.EOF) and (iLoop <= iRowsPerPage)     Response.Write "<TR>"      For Each fld in rst.Fields       Response.Write "<TD>" & fld.value & "</TD>"        Next         iLoop = iLoop + 1         rst.MoveNext         Response.Write "</TR>"     Loop     Response.Write "</TABLE>"   End Sub

   Sub ShowNavBar(rst)   Dim iPageCount   Dim iLoop   Dim sScriptName

    '本版本提供了更丰富的用户导航,但是    '依赖于 RecordCount 和 PageCount,    '它抵消了为服务器端游标    '指定 CacheSize 的好处。

    Response.Write "<BR><BR>"    sScriptName = Request.ServerVariables("SCRIPT_NAME")

    If iPageNum > 1 Then      Response.Write " <a href=" & sScriptName & "?iPageNum="      Response.Write (iPageNum -1) & "><< Previous</a>"    End If

    iPageCount = rst.PageCount    Do Until iLoop > iPageCount    f iLoop = iPageNum Then       Response.Write " <B>" & CStr(iLoop) & "</B>"      Else       Response.Write " <a href=" & sScriptName & "?iPageNum=" & _       Cstr(iLoop) & ">" & iLoop & "</a>"       End If       iLoop = iLoop + 1    Loop

    If Not rst.EOF Then     Response.Write " <a href=" & sScriptName & "?iPageNum="     Response.Write (iPageNum +1) & "> Next >></a><BR>"    Else       Response.Write "<BR>"    End If

    Response.Write "Page " & iPageNum & " of " & iPageCount & "<BR>"    Response.Write rst.RecordCount & " Records" 牋?   End Sub

   Sub ShowFastNavBar(rst)   Dim iPageCount   Dim iLoop   Dim sScriptName

     '在指定 CacheSize 和使用服务器端游标时,     '该方法特别有效,因为它不使用 RecordCount      '和 PageCount。需要用户具有经验。

     Response.Write "<BR><BR>"     sScriptName = Request.ServerVariables("SCRIPT_NAME")

     If iPageNum > 1 Then      Response.Write " <a href=" & sScriptName & "?iPageNum="      Response.Write (iPageNum -1) & "><< Previous</a>"    End If

    If Not rst.EOF Then      Response.Write " <a href=" & sScriptName & "?iPageNum="      Response.Write (iPageNum +1) & "> Next >></a><BR>"    Else      Response.Write "<BR>"    End If

    Response.Write "Page " & iPageNum

   End Sub

   Sub CleanUp(rst)     If Not rst Is Nothing then       If rst.state = adStateOpen then rst.close       set rst = nothing     End If   End Sub

</SCRIPT>

posted @ 2005-04-24 11:13  spring3  阅读(147)  评论(0编辑  收藏  举报