When you think ASP, think...
Recent Articles
All Articles
ASP.NET Articles
ASPFAQs.com
Message Board
Related Web Technologies
User Tips!
Coding Tips

Sections:
Sample Chapters
Commonly Asked Message Board Questions
JavaScript Tutorials
MSDN Communities Hub
Official Docs
Security
Stump the SQL Guru!
XML Info
Information:
Feedback
Author an Article
ASP ASP.NET ASP FAQs Message Board Feedback
Print this page.
Published: Wednesday, July 05, 2000

Paging Records with GetRows

By Mukul Sabharwal


As databases grow in size, displaying information in organized, consumable "chunks" becomes more and more difficult. For example, if a database table contains thousands or even hundreds of rows, simply dumping the entire contents of the table can overwhelm the user and be difficult to pick through. As developers it is our job to provide information in digestible quantities. One common solution is to page database table results. That is, only a small number of database records are shown per screen, accompanied by Next and Previous buttons allowing the user to step through the database results in sensible steps.

- continued -

There are already a number of great 4Guys articles on paging database records. If you are using SQL Server it is strongly recommended that you use a stored procedure-based approach, as outlined in the article Paging through Records Using a Stored Procedure. A script that uses AbsolutePage, PageSize, and PageCount (three ADO properties designed to allow for paging) can be seen at Paged Table Display, authored by Charles Carroll and Jeff Emrich.

This article provides an alternative way to page through database records. This technique uses the GetRows method of the Recordset object. GetRows dumps the Recordset data into a two-dimensional array. The first dimension of the array stores the column information while the second dimension stores the row information. The following snippet of code illustrates how to use GetRows:

'... assumes a Connection object (objConn) has been created and opened
'    and that a recordset object (objRS) has already been instantiated ...
objRS.Open "SELECT * FROM Table1", objConn

Dim aArray
aArray = objRS.GetRows

'Now let's retrieve the total number of columns and rows in our array
Dim iColumnCount, iRowCount
iColumnCount = UBound(aArray, 1)
iRowCount = UBound(aArray, 2)

'Output the first column of the first row
Response.Write aArray(0,0)

Pretty simple, eh? Note that the array returned is zero-based. This is because arrays in modern versions of the VBScript Scripting Engine are zero-based. If you are using an older scripting engine version these arrays might be one-based. To find out what scripting engine version you have, be sure to read: Determining the Server-Side Scripting Language and Version.

Now, to page records successfully we need to know two things: the starting index in our array and how many records per page we'd like to display. We'll let this information be passed in through the QueryString. For example, the URL:

http://www.yourserver.com/GetRows.asp?Start=0&Offset=15

would display 15 records starting from record 0 (i.e., records 0 through 14). Our script is fairly straight-forward: we start by reading in the QueryString values Start and Offset. (For the remainder of the article I will present this script piece-by-piece. If you just want to get your hands on the script you can download the working script (also available from a link at the end of the article). You can also try out the live demo!)

<%@ Language = VBSCRIPT %>
<% Option Explicit %>
<%
  Dim iStart, iOffset
  iStart = Request("Start")
  iOffset = Request("Offset")

  if Not IsNumeric(iStart) or Len(iStart) = 0 then
    iStart = 0
  else
    iStart = CInt(iStart)
  end if

  if Not IsNumeric(iOffset) or Len(iOffset) = 0 then
    iOffset = 10
  else
    iOffset = Cint(iOffset)
  end if

  Response.Write "Viewing " & iOffset & " records starting at record " & _
                 iStart & "<BR>"

Next we need to create our Connection and Recordset objects. We then need to open our connection to the database and retrieve information into our Recordset object via a SQL statement.

  Dim objConn, objRS
  Set objConn = Server.CreateObject("ADODB.Connection")
  objConn.Open "DSN=DSN Name"

  Set objRS = Server.CreateObject("ADODB.Recordset")
  objRS.Open "SELECT * FROM TableName", objConn

Next, we need to create our array and use GetRows to populate the array.

  Dim aResults
  aResults = objRS.GetRows

At this point we're done using our Connection and Recordset objects, so we can go ahead and Close these objects and set them to Nothing.

  objRS.Close
  Set objRS = Nothing

  objConn.Close
  Set objConn = Nothing

We are now ready to display the correct subset of rows from our array aResults. First we find the total number of columns and rows using a pair of UBound statements. Next we loop from the starting row index (iStart) through the next iOffset records (iStart + iOffset - 1).

  Dim iRows, iCols, iRowLoop, iColLoop, iStop
  iRows = UBound(aResults, 2)
  iCols = UBound(aResults, 1)

  If iRows > (iOffset + iStart) Then
    iStop = iOffset + iStart - 1
  Else
    iStop = iRows
  End If

  For iRowLoop = iStart to iStop
    For iColLoop = 0 to iCols
      Response.Write aResults(iColLoop, iRowLoop) & " "
    Next
    Response.Write "<BR>"
  Next  

Finally we need possibly need to display the Next/Previous links. A Previous link is needed if our starting array index, iStart, is greater than the beginning index, 0. We need to display a Next link if the last record we displayed is less than the total number of rows in the array aResults.

  Response.Write "<P>"
  if iStart > 0 then
    'Show Prev link
    Response.Write "<A HREF=""GetRows.asp?Start=" & iStart-iOffset & _
                   "&Offset=" & iOffset & """>Previous " & iOffset & "</A>"
  end if

  if iStop < iRows then
    'Show Next link
    Response.Write " <A HREF=""GetRows.asp?Start=" & iStart+iOffset & _
                   "&Offset=" & iOffset & """>Next " & iOffset & "</A>"
  end if
%>

Well, that about wraps it up, a neat way to page through records. There is a lot of customization that can go into this script, such as adding new options to the search, making the output look all nice and pretty, and other fun tweaks. Be sure to take a moment and view the live demo.

Happy Programming!


Attachments:

  • Download the code to GetRows.asp in text format
  • View the live demo!


  • Mukul Sabharwal, aged 14, male, develops in asp (jscript and vbscript), php, cfm and c++. has a crush on oracle db and likes to use mysql!


  • ASP.NET [1.x] [2.0] | ASPMessageboard.com | ASPFAQs.com | Advertise | Feedback | Author an Article