[an error occurred while processing this directive]

Занятие 5

Динамическая публикация БД

Краткий обзор InternetDatabaseConnector

Web-сервер InternetInformationServer(IIS) и интерфейс OpenDataBaseConnectivity (ODBC) позволяют:

Web-броузер посылает запросы к InternetServer, используя протокол HTTP. InternetInformationServer взаимодействует с документом в HTML-формате. Поиск данных в базе данных выполняется через компонент сервера InternetDatabaseConnector (IDC), который является библиотекой ISAPI (httpodbc.dll), использующей ODBC для извлечения данных из БД.

IDC для управления доступом к базе данных и формирования выходной Web-страницы использует два типа файлов. Это InternetDatabaseConnector файлы (*.idc) и HTML-шаблоны (*.htx).

IDC-файл по сути является запросом к базе данных и содержит информацию, необходимую для соединения с нужным источником данных ODBC и выполнения SQL-предложений. IDC-файл также содержит имя и местоположение HTML-шаблона.

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

Создание запроса

Как уже было сказано, InternetInformationServer использует конфигурационный файл InternetDatabaseConnector, в котором определено какие данные будут извлекаться из базы данных и как отправляться пользователю. С помощью HTML-форм пользователь может определить различные значения для формирования запроса.

Имена элементов формы, которые задаются в качестве параметра NAME в теге INPUT, становятся именами переменных, используемых в IDC-файле. Значения этих переменных используются для формирования SQL-предложений в ODBC-запросе. IDC-файл должен обязательно содержать следующие поля:

Источник данных - это именованный ресурс в системе ODBC, связанный с определенными БД и задаваемый в панели управления ODBC. Имя HTML-шаблона - это имя шаблона, в котором описана структура и формат выходного HTML-файла. SQL-предложением является любая стандартная SQL-строка, начинающаяся со знака плюс (+). Кроме обязательных полей существуют и необязательные, которые пользователь при необходимости может определить в IDC-файле. Примером может служить поле Username, которое определяет, если это необходимо, имя пользователя для доступа к источнику данных ODBC, и поле DefaultParameters:параметр=значение [, параметр=значение ...]. В этом поле определяются значения параметров IDC-файла, которые будут использоваться, в случае, если они не определены клиентом.

Также в IDC-файле можно указывать некоторые стандартные параметры ODBC, которые позволяют повысить эффективность поиска данных в БД. Эти параметры не являются обязательными. Формат записи ODBC-параметров в IDC-файле:

ODBCOptions: Имя_параметра=Значение [,Имя_параметра=Значение ...]

Вот некоторые из ODBC-параметров:

После того, как пользователь подтвердит свой запрос к IIS нажатием клавиши Submit в форме, IDC-файл передается IDC для обработки. Эта библиотека (httpodbc.dll) объединяет результаты запроса в определенный ранее HTML-шаблон.

Создание HTML-шаблона

Самое сложное в создании HTML-шаблона - это спроектировать HTML-страницу для вывода результатов ODBC-запроса. Новые теги языка HTML, ассоциированные с представляемыми данными, - это несколько простых команд. Эти команды используются внутри HTML-шаблона вместе с другими тегами HTML. Рассмотрим эти команды.

<%FIELDNAME%>. Этот тег создает форму в виде таблицы для возвращаемых ODBC-запросом данных. Например, если запрос возвращает данные по таким полям, как Address, City и State, то данные для каждого поля каждой записи могут быть определены в любой части HTX-файла, как <%ADDRESS%>, <%CITY%> или <%STATE%>.

<%BEGINDETAIL%>, <%ENDDETAIL%>. Эти теги ограничивают область определения записи БД в шаблоне. Все HTML-коды внутри этого контейнера повторяются для каждой записи, полученной по SQL-запросу. Если запрос не возвращает ни одной записи, то все содержимое контейнера пропускается.

<%IF%>, <%ELSE%>, <%ENDIF%>. Теги <%IFCONDITION%>, <%ELSE%> и <%ENDIF%> дают возможность по условию использовать различные HTML-источники. Часть CONDITION тега <%IFCONDITION%> обычное выражение сравнения со следующим форматом:

значение1 оператор значение2

Оператором может быть одно из четырех значений:

Значение1 и значение2 могут быть именами полей, встроенными переменными, именами HTML-переменных или константами. Заметим, что если имя поля используется в качестве имени переменной, то оно обязательно обрамляется значками <% %>. Теги условия могут использоваться для проверки математических выражений и других характеристик запроса для обеспечения динамического отображения результатов запроса.

Встроенные переменные.HTML-шаблоны поддерживают две встроенные переменные: CurrentRecord и MaxRecords. Эти две переменные могут использоваться только в условии тега <%IF%>. Переменная CurrentRecord содержит число полных выполнений секции <%BEGINDETAIL%><%ENDDETAIL%>. Переменная MaxRecords содержит количество записей, определенных в IDC-файле и возвращенных ODBC-запросом.

Дополнительные возможности. Для того, чтобы уточнить результаты первого запроса, можно в каждой записи предусмотреть гиперссылку <AHREF=имя_IDC_файла>, указывающую на вторичный запрос, параметры поиска которого определены в другом IDC-файле.

Упражнение для самостоятельной работы

Динамическая публикация курса валют

На сервере находится база данных MSAccess с именем rates.mdb. Записи БД содержат следующие символьные поля:

ODBC-драйвер настроен на сервере с системным именем Rates.

Предлагается опробовать готовую часть приложения (файлы Rates.idcRates.htx) из каталога /Scripts/idctutorial. Для этого создайте начальную страницу или запускайте запрос из строки URL.

Согласуйте с преподавателем расположение на сервере Ваших файлов запросов *.IDC и шаблонов *.HTX.

Для динамического отображения изменений с интервалом 10 секунд добавьте в начало шаблона Rates.htxфрагмент гипертекста:

<HEAD>
 <METAHTTP_EQUIV="Refresh" CONTENT="10">
</HEAD>

Начальная страница IDC.htm:

<HTML>
<BODY>
<H3>Отчеты по базе данных</H3><HR>
<UL>
<LI><AHREF=citnt/Scripts/IDC/Rates.idc>
Просмотр и редактирование курсов валют</A>
 <LI>Удаление записи из БД
</UL>
</BODY>
</HTML>

Запрос отчета о курсах валют Rates.idc

Datasource: rates
Template: Rates.htx
SQLStatement: SELECTid, kod, kursFROMrates

Шаблон отчета о курсах валют Rates.htx:

<HTML>
<BODY>
<TABLEBORDER=1>
 <CAPTION> <H4>Курсы валют</H4></CAPTION>
 <TR>
 <TH> Код <TH> Курс</TH>
 <%BEGINDETAIL%>
 <TR>
 <AHREF= "/Scripts/IDC/Redit.idc?id1=<%id%>">
 <TD><%kod%><TD><%kurs%></TD></A>
 <%ENDDETAIL%>
 </TR>
</TABLE>
</BODY>
</HTML>

Пример Intranet-приложения для ведения курса валют

Для ведения БД курса валют предлагается создать приложение для обновления курса валют. Связь таблицы просмотра БД с запросом на обновление осуществляется с помощью гиперссылки. Для редактирования конкретного курса выдается HTML-форма, предварительно заполненная по запросу из БД.

Запрос валюты по коду для редактирования Redit.idc:

Datasource: rates
Template: Rеdit.htx
SQLStatement: SELECT * FROMrates
+WHEREid='%id1%'

Шаблон формы для редактирования курса Redit.htx

<HTML>
<BODY>
<FORMMETHOD=POST
 ACTION="/Scripts/IDC/Rsubm.idc">
 <P>Код валюты: <%kod%>
 <P>Курс
 <INPUTTYPE=textNAME="kurs2" VALUE=<%kurs%>>
 <INPUTTYPE=hiddenNAME="id2" VALUE=<%id%>>
<P>
 <INPUTTYPE=submitNAME="b1" VALUE="Обновить">
</FORM>
</BODY>
</HTML>

Запрос на обновление курса Rsubm.idc

Datasource: rates
Template: Rsubm.htx
SQLStatement:
+UPDATEratesSETkurs='%kurs2%'
+WHEREid='%id2%'

Для зацикливания диалога нужно создать шаблон формы, содержащей одну кнопку "ОК" с текстом "Для продолжения нажмите кнопку ОК". Атрибут ACTION этой формы должен ссылаться на Rates.idc.

Предложите необходимые изменения для возможности корректировать наименование валюты, а не только значение курса.

Как можно организовать добавление записей?

Использование технологии ASP для доступа к базам данных

В качестве примера использования ASP рассмотрим генератор запросов к кадровой системе.

Исходным файлом является файл HTML: personnel1.asp, находящийся на сервере в каталоге ASP. Он содержит код для формирования элементов списков (например, возможных должностей; при обращении к БД выбираются все значения по указанному полю) и форму, которую нужно заполнить. В форме перечислены все поля, которые есть в БД, например, "ФИО", "Возраст" ("Дата Рождения"), "Должность", "Телефон" и др., кроме поля "Табельный номер". Для того, чтобы включить определенный реквизит в выходную форму, нужно слева от него включить соответствующий checkbox.

Кроме того, форма позволяет для каждого реквизита задать определенные значения или диапазон значений (в зависимости от реквизита) для формирования условия выбора данных из БД. В данном примере показаны различные способы задания условий для отбора информации из БД. Для таких реквизитов, как "ФИО" предусмотрен простой ввод одного значения в текстовое поле (возможен ввод только первых нескольких символов). Для задания должности необходимо выбрать нужное значение из предлагаемого набора (выпадающего списка). Для таких реквизитов, как "Возраст" и "Зарплата" можно задать как одно значение, так и диапазон. Для этого у соответствующих реквизитов существуют два поля ввода. Для задания одиночного значения нужно заполнить первое поле ввода, а второе оставить пустым. Для определения диапазона значений необходимо заполнить оба поля, причем в первое ввести нижнюю границу диапазона, а во второе - верхнюю. Если сделать наоборот, то концы диапазона учитываться не будут. При определении значения возраста нужно пользоваться следующими правилами. Если введено только одно значение в первое поле, то при формировании запроса к БД подставляется условие "больше или равно", т.е. выбираются все сотрудники не младше указанного возраста. Если введено только одно значение во второе поле, то при формировании запроса к БД подставляется условие "меньше или равно", т.е. выбираются сотрудники не старше указанного возраста. Для выборки сотрудников соответствующих определенному возрасту, нужно ввести соответствующие значения сразу в оба поля. Если в поля введены разные значения, то учитывается условие "между".

Для реквизита "Зарплата" существует возможность определения пользователем необходимого логического условия (равно, больше, меньше, между и др.). Логическое условие можно выбрать из выпадающего списка. Следует отметить, что при определении одиночного значения зарплаты можно указать любое условие, кроме "между". А при указании диапазона, наоборот, нужно указать условие "между". Если это правило не будет выполняться (при ошибочном формировании условия), то условие проигнорируется. При построении запроса все определенные пользователем условия автоматически объединяются логической операцией "И".

Кроме всего перечисленного в форме еще существуют такие элементы управления как checkbox "Сумма" и две командные кнопки "Выполнить" и "Очистить".

Опция "Сумма" служит для автоматического подсчета суммы по полю "Зарплата" (при условии включения данного реквизита в выходную форму) всех выбранных по заданному пользователем критерию отбора записей (например, для вычисления фонда заработной платы сотрудников отдела). Таким образом, для подсчета суммы по полю "Зарплата" необходимо включить данную опцию. Если опция отключена, то сумма подсчитываться не будет.

После определения всех реквизитов, которые по желанию пользователя должны войти в отчет, и задания необходимых значений для формирования критериев поиска, нужно нажать командную кнопку "Выполнить". После чего запрос будет послан на сервер, обработан там, и выходные данные будут возвращены пользователю в виде другой страницы. В качестве адресата запроса выступает файл personnel2.asp, находящийся в одном каталоге с файлом personnel1.asp. Этот файл обрабатывает запрос пользователя, формирует на его основе SQL-предложение, через ODBC обращается к базе данных personnel.mdb (созданной в формате MSAccess) и посылает результат в виде выходной формы обратно пользователю. Кнопка "Очистить" служит для очистки всех ранее заполненных полей, т.е. для возвращение формы в первоначальный вид.

После тщательного изучения описанного примера, слушателям предлагается дополнить форму. Таблица People базы данных personnel.mdb содержит еще одно поле - "Табельный Номер". Это поле является индексированным. Попробуйте вставить аналогично существующим дополнительные элементы управления в форму для ввода значения табельного номера сотрудника, а также соответствующий код в файл personnel2.asp для запроса и обработки значений табельного номера.

Предложите, как дополнить ASP-файлы для выполнения редактирования и добавления записей.

Назад | Содержание | Вперед

  [an error occurred while processing this directive]