Рис. 17.10. Готовая форма добавления записи в гостевую книгу
Теперь вы можете проверить созданную Web-страницу в действии. Сохраните ее, запустите Web-сервер, если он еще не запущен, и откройте страницу в Web-обозревателе.
Попробуйте ввести в поле ввода какой-нибудь текст и нажать кнопку Добавить. После этого откройте базу данных Guestbook.mdb в Access и посмотрите, что получилось. В таблице Guestbook должна появиться новая запись, введенная вами.
Если хотите, можете просмотреть исходный код созданной нами серверной страницы. Видите, сколько сценариев JavaScript добавил в нее умница Dreamweaver, чтобы мы смогли добавить запись в таблицу! Пользуясь им и документацией по языку JavaScript и технологии ASP, вы сможете изучить принципы написания серверных сценариев вручную.
Но все это потом. Теперь нам пора сделать следующий шаг к вершинам серверного программирования.
Более сложные серверные страницы
Какой толк в гостевой книге, если посетители сайта не могут просмотреть все записи, добавленные в нее ранее! (Если, конечно, это не "закрытая" книга, только для "своих".) Поэтому давайте сделаем страницу для просмотра этих записей. Создадим новую серверную страницу ASP и сохраним ее под именем Guestbook.asp. И приступим...
Создание набора данных
Но прежде чем приступим собственно к дизайну, нам нужно выполнить одно подготовительное действие — создать набор данных. Набор данных — это условие выборки данных с указанием таблиц и полей, из которых будут извлекаться данные. При этом также возможно задание фильтра — условия отбора данных из записей. После создания набора данных уже можно приступать к серверной странице, отображающей данные.
Для работы с наборами данных нам понадобится еще одна панель, не рассмотренная ранее, - Bindings. Чтобы вызвать эту панель на экран, включите пункт-выключатель Bindings меню Window или нажмите комбинацию клавиш <Ctrl>+<F10>.
Эта панель также состоит, в основном, из списка уже созданных к данному времени наборов данных. Изначально она, однако, содержит только нравоучительный текст, перечисляющий нерадивым Web-программистам шаги, которые они должны пройти перед тем, как смогут создать свой первый набор данных. Но мы-то их уже прошли! Поэтому сразу же перейдем к созданию нашего первого набора данных.
Нажмите неизменную кнопку со знаком "плюс", находящуюся в этой панели, и выберите в появившемся на экране меню пункт Recordset (Query). Также вы можете нажать кнопку Recordset вкладки Application панели объектов или выбрать пункт Recordset подменю Application Objects меню Insert. На экране появится диалоговое окно Recordset
Рис. 17.11. Кнопка Recordset панели объектов
Рис. 17.12. Диалоговое окно Recordset
В поле ввода Name вводится уникальное имя создаваемого набора данных. Введите в него, например, AddRecord. Так будет сразу понятно, зачем нужен этот набор данных.
В раскрывающемся списке Connection выберите зарегистрированную базу данных. Вы также можете нажать кнопку Define; на экране появится диалоговое окно Data Source Name (DSN), с помощью которого вы сможете зарегистрировать базу данных, если не сделали это ранее.
В раскрывающемся списке Table выберите нужную таблицу зарегистрированной базы данных. Впрочем, она у нас всего одна — Guestbook.
Группа переключателей Columns позволит вам извлечь данные из всех полей выбранной таблицы или только из некоторых. Если вы включите переключатель All (вообще-то он включен по умолчанию), данные будут извлечены из всех полей таблицы. Чтобы извлечь данные только из некоторых полей, включите переключатель Selected и выберите нужные поля в списке, расположенном ниже. Чтобы выбрать сразу несколько пунктов, щелкайте по ним, удерживая нажатой клавишу <Ctrl>.
Чтобы проверить, правильно ли введены параметры, нажмите кнопку Test. После этого на экране должно появиться диалоговое окно Test SQL Statement, похожее на уже знакомое вам окно View Data. Если параметры набора данных введены неправильно, Dreamweaver выдаст вам соответствующее окно-предупреждение.
Элементы управления, расположенные в нижней части окна Recordset и предназначенные для задания фильтров, мы рассмотрим позднее. Сейчас же просто нажмите кнопку ОК.
После того как вы создадите новый набор данных, он появится в панели Bindings в виде ветви иерархического списка. Эта ветвь будет содержать все поля созданного набора данных, а также некоторые дополнительные поля, которые не берутся из таблицы, а вычисляются самим процессором баз данных. Такие поля называются системными. Давайте их перечислим.
· [first record index] — номер первой записи набора, показываемой на текущей странице.
· [last record index] — номер последней записи набора, показываемой на текущей странице.
· [total records] — количество записей в наборе.
Вы можете использовать системные поля на своих страницах наряду с обычными полями таблицы.
Если вы хотите исправить параметры какого-либо набора данных, дважды щелкните по нужной строке списка. Учтите, что щелкать надо по начальному пункту ветви. После этого на экране появится диалоговое окно Recordset, в котором вы сможете изменить необходимые параметры.
Чтобы удалить ненужный набор данных, выделите соответствующий пункт и нажмите кнопку со знаком "минус".
А теперь поговорим о свойствах набора данных. Чтобы увидеть их, вам сначала нужно выделить соответствующий пункт списка панели Bindings. Но обычно этого мало — редактор свойств так же будет отображать параметры страницы, открытой в окне документа. Поэтому дважды щелкните по нужному набору данных в списке, чтобы вызвать диалоговое окно Recordset. и тут же закройте его, щелкнув кнопку Cancel. Только после этого редактор свойств наконец-то покажет параметры набора данных.
В поле ввода Recordset вводится имя набора данных.
Текстовое поле Connection отображает имя зарегистрированной базы данных, из которой будут извлекаться записи данного набора. Вы можете нажать кнопку Edit; на экране появится диалоговое окно Recordset, в котором вы сможете изменить параметры набора данных.
В поле ввода SQL отображается текст запроса на языке SQL, сформированный Dreamweaver. В данный момент там находится следующий текст:
SELECT * FROM Guestbook
Разберем его пословно:
· SELECT — ключевое слово, задающее набор полей;
· * (звездочка) обозначает все поля таблицы;
· FROM — ключевое слово, задающее таблицу;
· Guestbook — таблица.
Как видите, запросы на языке SQL напоминают фразы английского языка. И, в общем-то, они довольно понятны, "прозрачны", как говорят.
Раскрывающийся список Cursor Type служит для задания типа набора данных. В нем доступны четыре пункта:
· Static — статический набор данных, содержащий только те записи таблицы, которые присутствовали в ней на момент выборки. Доступен только для чтения;
· Forward Only — однонаправленный статический набор данных, по которому можно перемещаться только по направлению от первой записи к последней, но не обратно. Обеспечивает более высокое быстродействие, чем простой статический набор данных. Этот пункт выбран по умолчанию;
· Dynamic — динамический набор данных, содержащий все записи таблицы и отражающий все изменения, добавления и удаления, сделанные другими пользователями базы данных. Доступен как для чтения, так и для записи;
· Keyset — ограниченный динамический набор данных, не отражающий добавления и удаления, сделанные другими пользователями базы данных.
Раскрывающийся список Cursor Location задает местонахождение набора данных, в смысле, где он обрабатывается: на стороне клиента (пункт Client) или на стороне сервера (пункт Server). По умолчанию выбран пункт Server, и это правильно — ведь мы создаем серверное приложение.
Раскрывающийся список Lock Type задает тип блокировки. Блокировка используется для того, чтобы ограничить доступ к записи, изменяемой каким-либо пользователем базы данных, другим пользователям. Если блокировку не использовать, может произойти конфликт изменения данных, когда одновременно несколько пользователей будут пытаться сохранить изменения, сделанные в одной и той же записи. Здесь доступны четыре пункта:
· Read Only — записи набора доступны только для чтения;
· Pessimistic — пессимистическая блокировка, когда запись блокируется, как только пользователь начинает изменять значения ее полей. Как только пользователь сохранит изменения, блокировка снимается;
· Optimistic — оптимистическая блокировка, когда запись блокируется только на момент записи в нее новых значений;
· Batch Optimistic — разновидность оптимистической блокировки, используемой при операциях изменения сразу нескольких записей.
Задайте для нашего набора данных динамический тип (пункт Dynamic раскрывающегося списка Cursor Type) и оптимистическую блокировку (пункт Optimistic раскрывающегося списка Lock Type), т. к. мы будем создавать страницу, добавляющую в таблицу новую запись. Остальные элементы управления пока не трогайте.
Страница, отображающая данные
Серверную страницу, отображающую данные, создать проще простого. После того как мы создали набор данных, нам остается только перетаскивать в страницу нужные поля из панели Bindings — a Dreamweaver сделает все остальное.
Итак, откройте страницу Guestbook.asp, если вы ее еще не открыли. И поместите в нее динамический текст, отображающий содержимое поля таблицы Guestbook. Можете считать, что динамический текст — своего рода изменяемая область шаблона, содержимое которой будет взято из заданного вами поля таблицы.