Visual Basic 6. Руководство разработчика


Страница


ALLPRODS.ASP

Страница ALLPRODS.ASP отображает список категорий товаров в базе NWIND (рис. 22.8).

ASP-страница читает наименования категорий товаров и отображает их в виде гиперссылок. Когда пользователь выбирает гиперссылку, он переходит на другую страницу (PRODCAT.ASP), которая отображает все товары, принадлежащие этой категории, их цены и количество (рис. 22.9).

Если посмотреть на код страницы PRODCAT.ASP, то можно заметить, что в ней мало HTML-кода, поскольку это серверный сценарий, который открывает базу данных NWIND, создает набор записей с наименованиями категорий и отображает их в виде гиперссылок.

Наибольший интерес представляет строка, создающая гиперссылки. Если не обращать внимания на обрамление этого выражения тегами серверного сценария, то выглядит оно как обычный HTML-тег для создания гиперссылки. Поскольку имя гиперссылки и ее целевая страница в момент создания этого файла неизвестны, поместим в него выражения, которые будут замещены при обработке файла активной серверной страницей.

Рис. 22.8. Страница ALLPRODS.ASP: категории товаров в базе данных NWIND в виде гиперссылок

Рис. 22.9. файл PRODCAT.ASP: товары в категории, выбранной на рис. 22.8

Обратите внимание: все гиперссылки обращаются к одному

URL на сервере (файл PRODCAT.ASP), но каждая ссылка передает другое значение параметра. Этим значением является идентификатор (ID) категории - поле записи, хранящей сведения о каждом товаре. Страница PRODCAT ASP использует это значение для выбора товаров заданной категории. В качестве второго параметра передается наименование категории. Этот параметр не используется при выборке записей -он нужен только для отображения наименования категории. Если опустить этот параметр, то страница PRODCAT.ASP откроет таблицу Categories (Категории), чтобы найти наименование выбранной категории, отобразить его в заголовке страницы, а затем открыть таблицу Products (Товары) для извлечения наименований товаров. Передавая наименование категории в качестве второго параметра, мы избавляем сценарий от необходимости установления еще одной связи с базой данных для получения уже известной информации.


Программа 22.8. Файл ALLPRODS ASP



<HTML>

<%

Set DBObj =

Server.CreateObject("ADODB.Connection")

DBObj.Open "NWindDB"

SQLQuery = "SELECT CategoryID, CategoryName FROM Categories"

Set RSCategories = DBObj.Execute(SQLQuery)

%>

<CENTER>

<H1>List Of Product Categories</H1>

</CENTER>

<TABLE>

<% Do While Not RSCategories.EOF %>

<TR>

<TD> <FONT FACE-"Verdana" SIZE=2>

<% CategoryName = RSCategories ("CategoryName") %>

<A HREF="/ASPages/ProdCat.asp?CategoryID= _

<% "RSCategories ("CategoryID") %>&CategoryName= _

<% =CategoryName %> "> <% = CategoryName %> </A>

</FONT>

</TD>

</TR>

<%

RSCategories.MoveNext

Loop

DBObj.Close

%>

</HTML>

Файл PRODCAT ASP, обрабатывающий запросы, сделанные страницей ALLPRODS ASP, несколько сложнее Сначала он извлекает значения параметров, переданных клиентом Операторы

ReqCategory=Request.QueryString ("CategoryID")

ReqName=Request.QueryString ("CategoryName")

сохраняют эти значения в переменных ReqCategory и ReqName

Семейство QueryString хранит эти значения для дальнейшего использования Прочесть их, воспользовавшись соответствующими именами, не составляет труда Значение переменной ReqCategory необходимо для построения SQL-оператора, извлекающего записи из таблицы Products

SQLQuery = "SELECT ProductName, UnitPrice, UnitInStock _

FROM Products WHERE CategoryID = " & ReqCategory & " _

ORDER BY ProductName"

Этот SQL-оператор возвращает набор записей, содержащий сведения о товарах из выбранной категории. Затем сценарий просматривает записи и выводит их в строках таблицы. Фрагмент кода, который строит таблицу, выглядит достаточно сложно, поскольку в него входят HTML-операторы и операторы сценария. Чтобы понять, как он работает, замените каждое выражение, заключенное в теги <% и %>, соответствующем значением (например, наименованием товара в выражении <% = RSProducts ("ProductName") %> и т.д.).



Программа 22.9. Файл PRODCAT.ASP

<HTML>

<%

ReqCategory=Request. QueryString ("CategoryID")

ReqName=Request. QueryString ("CategoryName")

Set DBObj = Server.CreateObject ("ADODB.Connection")

DBObj.Open "NWindDB"

SQLQuery = " SELECT ProductName, UnitPrice, UnitsInStock FROM Products

WHERE CategoryID = " & ReqCategory S " ORDER BY ProductName"

Set RSProducts = DBObj.Execute(SQLQuery)

%>

<CENTER>

<H1>Query Results</H1>

<H3>List of products in category <% = ReqName %></H3>

</CENTER>

<TABLE>

<% Do While Not RSProducts.EOF %>

<TR>

<TD> <FONT FACE="Verdana" SIZE=2>

<% = RSProducts ("ProductName") & " (" &

RSProducts ("UnitPrice") & ")" %>

</FONT></TD>

<TD><FONT FACE="Verdana" SIZE=2>

<% = RSProducts ("UnitsInStock") %>

</FONT></TD>

  </TR>

<%

RSProducts.MoveNext

Loop

%>

</TABLE>

</HTML>

Этот пример достаточно прост. Если некоторые его фрагменты выглядят непонятно, то отделите выражения, вычисляющиеся на сервере, от HTML-кода. При этом можно использовать символические имена - ProductName и UnitPrice. Убедившись, что код работает, замените их действительными переменными серверного сценария.


Содержание раздела