Создание фильтров

А теперь можно приступить к созданию фильтра, отбирающего записи из таблицы в набор.

Помните, как мы создали сложный набор данных? Если не помните, рассмотрим код SQL-запроса, созданного нами:

SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign=ID

Ключевое слово WHERE языка SQL задает условие, согласно которому из таблицы будут извлекаться записи. В приведенном выше примере мы уже фактически создали условие, отбирающее только те записи таблицы Guestbook, для которых в таблице signs имеется "пара". Причем "пары" мы отбирали по значениям поля sign таблицы Guestbook и поля ID таблицы signs. Такие условия называются условиями связи таблиц.

Фильтром же называется условие отбора записей. Это условие используется не для связи таблиц, а для отбора записей из таблицы. Например, в приведенном ниже SQL-запросе используется именно условие отбора записей, иначе говоря, фильтр:

SELECT Content FROM Guestbook WHERE Sign=2

Этот запрос создаст набор данных, включающий только те записи таблицы Guestbook, поля sign которых содержат значение 2 ("Нейтрально").

Чтобы создать фильтр, нам придется добавить условие отбора записей к уже существующему условию связи таблиц. Это совсем просто. Вызовите диалоговое окно Recordset для нашего набора данных Guestbook. Если оно отобразилось в обычном виде, щелкните кнопку Advanced, чтобы переключить его в расширенный вид. И посмотрите на содержимое поля ввода SQL.

Итак, нам нужно добавить в SQL-запрос Новое условие. Мы будем сравнивать значение поля sign и...

Но с чем мы его будем сравнивать?

Ах, да, с параметром sign, переданным страницей Selector.htm. Но как его сюда ввести?

Очень просто. Для этого нам понадобится создать переменную SQL-запроса, представляющую некий параметр, полученный от другой Web-страницы или в результате каких-то вычислений. И в этом нам поможет список Variables диалогового окна Recordset и относящиеся к нему элементы управления.

Нажмите кнопку со знаком "плюс". В списке появится новая строка. Щелкните по этой строке в районе колонки Name (имя создаваемой переменной) и введите это имя, в нашем случае — sign. После этого щелкните в районе колонки Default Value (значение переменной по умолчанию, присваиваемое ей изначально) и введите, скажем, 2 (т. е. по умолчанию будут выводиться только "нейтральные" записи). Теперь останется лишь ввести в колонку Run-time Value выражение, задающее истинное значение этой переменной. В нашем случае это будет следующий код:

Request.QueryString("sign")

Он извлекает из строки запроса, переданной методом GET, параметр sign. Если же вы передаете параметры методом POST, код будет несколько иным:

Request.Form("sign")

Вот и все. Мы создали переменную SQL-запроса и теперь можем ее использовать.

Откройте в списке Database Items ветви Tables и Guestbook и выберите пункт Sign. Поставьте текстовый курсор в поле ввода SQL после текста

"WHERE Sign=ID" и нажмите кнопку WHERE. Содержимое поля ввода SQL станет таким:

SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign= ID AND Sign

Поставьте текстовый курсор после текста "AND Sign" и введите вручную текст =sign. Таким образом, окончательный SQL-запрос будет выглядеть так:

SELECT Content, Desc, Color FROM Guestbook, Signs WHERE Sign=ID AND Sign=sign

Все, наш новый запрос создан. Можете нажать кнопку ОК. Перед этим, однако, лучше нажать кнопку Test, чтобы проверить правильность задания запроса. Так, на всякий случай.

Теперь сохраните страницу Guestbook_table.asp и опубликуйте ее на Web-сервере вместе со страницей Selector.htm. После этого откройте в Web-обозревателе страницу Selector.htm, набрав в строке адреса следующее:

http://localhost/HTMLs/Selector.htm

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