Formatting Results in an .Asp File

The last part of this test drive shows how to format your query results. This portion of an .asp file contains variables that determine the information displayed in the results of a search, equivalent in function to an .htx file.


%<
  if ActiveQuery then
    if not RS.EOF then
 %>
<p>
<HR width="80%" ALIGN=center SIZE=3>
<p>

<%
     LastRecordOnPage = NextRecordNumber + RS.PageSize - 1
     CurrentPage = RS.AbsolutePage
     if RS.RecordCount <> -1 AND RS.RecordCount < LastRecordOnPage then
         LastRecordOnPage = RS.RecordCount
     end if

     Response.Write "Documents " & NextRecordNumber & " to " & LastRecordOnPage
     if RS.RecordCount <> -1 then
         Response.Write " of " & RS.RecordCount
     end if
     Response.Write " matching the query " & chr(34) & "<I>"
     Response.Write SearchString & "</I>" & chr(34) & ".<P>"
 %>

The following section is equivalent to the <%Begindetail%> <%Enddetail%> section in an .htx file.


<dl>

<!-- BEGIN first row of query results table -->
<% Do While Not RS.EOF and NextRecordNumber <= LastRecordOnPage %>

<%
    ' This is the detail portion for Title, Abstract, URL, Size, and
    ' Modification Date.

    ' If there is a title, display it, otherwise display the virtual path.
%>
    <p>
    <dt><%= NextRecordNumber%>.
        <%if VarType(RS("DocTitle")) = 1 or RS("DocTitle") = "" then%>
            <b><a href="<%=RS("vpath")%>"><%= Server.HTMLEncode( RS("filename") )%></a></b>
        <%else%>
            <b><a href="<%=RS("vpath")%>"><%= Server.HTMLEncode(RS("DocTitle"))%></a></b>
        <%end if%>
    <dd>
        <%if VarType(RS("characterization")) = 8 and RS("characterization") <> "" then%>
            <b><i>Abstract:  </I></b><%= Server.HTMLEncode(RS("characterization"))%>
            <br>
        <%end if%>
        <cite>
            <a href="<%=RS("vpath")%>">http://<%=Request("server_name")%><%=RS("vpath")%></a>
            <font size=-1> - <%if RS("size") = "" then%>(size and time unknown)<%else%>size <%=RS("size")%> bytes - <%=RS("write")%> GMT<%end if%></font>
        </cite>
  
<%
          RS.MoveNext
          NextRecordNumber = NextRecordNumber+1
      Loop
%>

</dl>

The section equivalent to the <%BeginDetail%><%EndDetail%> section in an .htx file ends here. The following section displays information about the query.


<P><BR>

<%
  else   ' NOT RS.EOF
      if NextRecordNumber = 1 then
          Response.Write "No documents matched the query<P>"
      else
          Response.Write "No more documents in the query<P>"
      end if

  end if ' NOT RS.EOF
 %>

<!-- If the index is out of date, display the fact -->

<%if Q.OutOfDate then%>
    <P>
    <I><B>The index is out of date.</B></I><BR>
<%end if%>

<!--
    If the query was not executed because it needed to enumerate to
    resolve the query instead of using the index, but AllowEnumeration
    was FALSE, let the user know
-->

<%if Q.QueryIncomplete then%>
    <P>
    <I><B>The query is too expensive to complete.</B></I><BR>
<%end if%>

<!--
    If the query took too long to execute (for example, if too much work
    was required to resolve the query), let the user know
-->

<%if Q.QueryTimedOut then%>
    <P>
    <I><B>The query took too long to complete.</B></I><BR>
<%end if%>

The next portion sets the previous and next navigation buttons when a query returns more results than called for per page. Comments within the code explain each section.


<TABLE>

<!--
    This is the "previous" button.
    This retrieves the previous page of documents for the query.
-->

<%SaveQuery = FALSE%>
<%if CurrentPage > 1 and RS.RecordCount <> -1 then ' BUGBUG - use RS.Supports(adMovePrevious)%>
    <td align=left>
        <form action="<%= QueryForm%>" method="POST">
            <INPUT TYPE="HIDDEN" NAME="SearchString" VALUE="<%=SearchString%>">
            <INPUT TYPE="HIDDEN" name="pg" VALUE="<%=CurrentPage-1%>" >
           
            <input type="submit" value="Previous <%=RS.PageSize%> documents">
        </form>
    </td>
    <%SaveQuery = TRUE%>
<%end if%>

<!--
    This is the "next" button.
    This button retrieves the next page of documents for the query.
    If the RS.RecordCount is available, the number of
    documents on the next page will be displayed.
-->

<%if Not RS.EOF then%>
    <td align=right>
        <form action="<%= QueryForm%>" method="POST">
            <INPUT TYPE="HIDDEN" NAME="SearchString" VALUE="<%=SearchString%>">
            <INPUT TYPE="HIDDEN" name="pg" VALUE="<%=CurrentPage+1%>" >

            <% NextString = "Next "
               if RS.RecordCount <> -1 then
                   NextSet = (RS.RecordCount - NextRecordNumber) + 1
                   if NextSet > RS.PageSize then
                       NextSet = RS.PageSize
                   end if
                   NextString = NextString & NextSet & " documents"
               else
                   NextString = NextString & " page of documents"
               end if
             %>
            <input type="submit" value="<%=NextString%>">
        </form>
    </td>
    <%SaveQuery = TRUE%>
<%end if%>

</TABLE>


<!-- Display the page number -->

Page <%=CurrentPage%>
<%if RS.PageCount <> -1 then
     Response.Write " of " & RS.PageCount
  end if %>

In the next section tells where the RS and Q variables are stored in the ASP session variables. Storing these variables is convenient for navigation. As an alternative you can re-execute the query when the user displays another page.


<%
    ' If either of the previous or back buttons were displayed, save the query
    ' and the recordset in session variables.
    if SaveQuery then
        set Session("Query") = Q
        set Session("RecordSet") = RS
    else
        RS.close
        Set RS = Nothing
        Set Q = Nothing
        set Session("Query") = Nothing
        set Session("RecordSet") = Nothing
    end if
 %>
<% end if 

elseif not NewQuery then
	Response.Write ""
else
	Response.Write "Please enter a word or phrase to search for."
end if

%>

</BODY>
</HTML>

© 1997 by Microsoft Corporation. All rights reserved.