Microsoft SQL Server Web Assistant
В состав Microsoft SQL Server 6.5 входит SQL Web
Assistant (см.рис.2), с которого было бы целесообразно начать
наше рассмотрение, так как это довольно простая в использовании
утилита, не требующая знания HTML и серьезной практики работы
с SQL. Web Assistant имеет интерфейс мастера (wizard), т.е. состоит
из ряда последовательных форм с вопросами, отвечая на которые
администратор может сэкономить время по выполнению рутинного HTML-кодирования
и получить готовую (в HTML-кодах) страницу, содержащую результаты
опубликования произвольного запроса к базе. Полученная страница
не является активной в строгом смысле этого слова, так как публикуется
при помощи push-метода (cм.рис.4), т.е. обновление происходит
по инициативе сервера, и не допускает обновления со стороны клиента.
Однако сервер может производить обновление (перегенерацию) страницы
на триггерной основе или на основе расписаний задач под управлением
SQL Executive. Мастер работает только с базами данных MS SQL Server
и использует три хранимых процедуры sp_makewebtask, sp_runwebtask
и sp_dropwebtask. При необходимости они могут использоваться самостоятельно
в кодах T-SQL.
Рассмотрим следующий простой пример. Пусть мы имеем
некоторую базу данных MS SQL Server, содержащую таблицу rates
с курсами валют.
id | kod | kurs |
1 | Валюта 1 | 1000.00 |
2 | Валюта 2 | 2000.00 |
3 | Валюта 3 | 3000.00 |
4 | Валюта 4 | 4000.00 |
5 | Валюта 5 | 5000.00 |
6 | Валюта 6 | 6000.00 |
7 | Валюта 7 | 7000.00 |
8 | Валюта 8 | 8000.00 |
9 | Валюта 9 | 9000.00 |
Рис. 3
Мы хотим публиковать на Web оперативные данные об
изменении курсов, как только таковые будут иметь место. Для этого
мы определяем задачу публикации:
sp_makewebtask @outputfile
= 'c:\rates.htm', @query = 'select kod, kurs from rates', @procname=web_rates,@resultstitle
= 'Курсы валют', @URL = "http://www.microsoft.com",
@reftext = 'Microsoft Home Page', @whentype=9
Практически все значения параметров здесь интуитивно
понятны. В пояснении нуждается только последний @whentype, который
означает, что страница должна быть создана сразу по выполнении
данного оператора, а также в дальнейшем по мере поступления запросов.
Полный перечень параметров процедуры и их назначение приводится
в руководстве по языку T-SQL.
Далее мы можем определить триггер на все виды транзакций
в таблице rates:
if exists (select * from
sysobjects where id = object_id('dbo.tr') and sysstat & 0xf
= 8)
drop trigger dbo.tr
go
create trigger tr on dbo.rates
for insert,update,delete
as exec sp_runwebtask
@procname=rates
go
Рис.4
Теперь любое изменение в таблице rates вызовет обновление
страницы c:\rates.htm. В своей презентации на выставке UnixExpo'97
я немного усложнил задачу и посылал запрос на MS SQL Server по
электронной почте непосредственно в теле письма с темой SQL.
update rates set kurs=kurs+100
where id=1
На MS SQL Server в этот момент была запущена утилита
SQLMail, обеспечивающая взаимодействие с электронной почтой, и
хранимая процедура
sp_processmail @subject='SQL',
@dbuse='db_rates', @set_user='dbo',
смысл которой состоял в том, чтобы сканировать содержимое
ящика входящих сообщений, выбирать из них непрочитанные с темой
SQL и передавать содержащийся запрос на выполнение MS SQL Server.
Как только письмо поступало, запрос обрабатывался и триггер инициировал
обновление соответствующей страницы.
2. dbWeb
Microsoft dbWeb представляет собой шлюз между 32-битными
ODBC-ресурсами, в качестве которых могут выступать, например,
Microsoft SQL Server, Microsoft Access, Microsoft Visual FoxPro,
Oracle и т.д., и MS IIS. dbWeb предусматривает создание схемы,
содержащей описание данных и связанных с ними Web-страниц. Он
поддерживает исполнение запросов в реальном режиме времени на
основе "pull"-модели публикации, позволяя тем самым
создавать активные Web-страницы.
Рис.5
Microsoft dbWeb структурно состоит из двух основных
компонент: dbWeb Service и dbWeb Administrator (cм.рис.5). dbWeb
Service является типичным ISAPI-приложением, которое обрабатывает
пользовательские запросы, направляемые посетителем страницы через
браузер, и управляет соединениями между браузером, ODBC-ресурсом
и IIS. К функциям dbWeb Administrator относится создание HTML-страниц,
содержащих результаты выполнения запросов на основе уже упоминавшихся
схем, с помощью которых осуществляется управление публикуемыми
данными. Схемы определяют сам запрос и структуру страниц. При
этом не требуется знания HTML или ISAPI, так как в состав dbWeb
Administrator входит интерактивный мастер-построитель схем (Schema
Wizard), который в традиционной для любой программы-мастера манере
позволяет задать поля поиска по методу Query-by-Example (QBE),
выбрать поля для отображения в таблице страницы результатов и
определить переходы из списка записей в отдельные страницы, содержащие
развернутую информацию по текущей записи. Настройкой соответствующих
свойств можно разрешать или запрещать операции вставки, удаления
и редактирования. Для проверки прав пользователя используется
система безопасности той СУБД, к которой происходит доступ. dbWeb
имеет в своем составе широкий спектр шаблонов страниц, которые
при необходимости могут быть легко откорректированы и настроены
разработчиком для более полного соответствия его задачам. Таким
образом, dbWeb не является конечным пользовательским приложением.
Скорее его можно охарактеризовать как достаточно легкий в использовании
инструментарий разработки, который, как всякий мастер, не поддерживает
языка программирования и оттого, на мой взгляд, несколько проигрывает
в функциональности рассмотренному нами ранее SQL Web Assistant,
несмотря на возможность инициируемого посетителем обновления информации
в базе. Тем не менее, эта программа успешно справляется с автоматизацией
большинства рутинных операций по организации соединений и публикации
данных из БД и покрывает, по разным оценкам, порядка 40-60% потребностей
бизнеса среднестатистической фирмы при организации доступа к своим
источникам данных через Internet.
dbWeb является свободно распространяемым
приложением и может быть установлен с Microsoft Technet, Windows
NT Resource Kit или непосредственно с .
3. Internet Database Connector (IDC)
IDC является другим примером достаточно давно и успешно
используемого ISAPI-приложения. Он входит в состав MS IIS. С помощью
вызовов функций ODBC API IDC обеспечивает прямую связь между полями
HTML-формы и соответствующим ODBC-достижимым источником данных,
например, базой данных MS SQL Server, без необходимости написания
замысловатых CGI-скриптов. Схема работы IDC показана на рис.6.
Для доступа к данным и публикации на Web IDC использует
файлы двух типов- .idc и .htx. Файл с расширением idc содержит
всю необходимую информацию о соединении с источником данных, текст
запроса, а также ссылку на соответствующий htx-файл. Файл с расширением
htx служит шаблоном страницы, на которой будут опубликованы данные
из базы, а также элементы оформления в виде статического текста,
графики, видео и т.п.
Рис.6
MS IIS распознает расширение .idc как вызов httpodbc.dll,
которая считывает http-заголовки из управляющего блока ISAPI для
определения параметров запроса. Httpodbc.dll читает и разбирает
idc-файл, указанный в URL. Имя источника, имя пользователя, пароль
и пр. используются для подключения к соответствующему ресурсу
ODBC, после чего httpodbc передает на выполнение SQL-запрос и
получает результаты. Результаты используются для наполнения заготовки
в виде htx-файла, после чего полученный HTML-документ MS IIS передает
браузеру. Описанная последовательность действий иллюстрируется
на рис.7
Продолжим развитие нашего простого примера из п.2
средствами IDC. Опубликуем таблицу rates с помощью файлов rates.idc
и rates.htx
Рис.7
Rates.idc:
Datasource: rates
Template: rates.htx
SQLStatement: select id,kod,kurs from rates
Username: sa
Rates.htx:
<!DOCTYPE HTML PUBLIC
"-//IETF//DTD HTML//EN">
<html>
<head>
<meta http-equiv="Content-Type"
content="text/html;
charset=windows-1251">
<meta name="GENERATOR"
content="Microsoft FrontPage 2.0">
<title></title>
</head>
<body>
<p><font size="5"><strong>Курсы
валют</strong></font></p>
<table border="1">
<tr>
<th><font
face="Times New Roman CYR">Код</font></th>
<th><font
face="Times New Roman CYR">Курс</font></th>
</tr>
<%begindetail%>
<tr>
<td><a
href="http://ntalexejs/aaa/rates_edit.idc?id1=<%id%>"><font
face="Times
New Roman CYR"><%kod%></font></a></td>
<td><font
face="Times New Roman CYR"><%kurs%></font></td>
</tr>
<%enddetail%></table>
</body>
</html>
Попутно заметим, что Microsoft FrontPage предоставляет
удобный редактор для построения заготовок и программу-мастер для
генерации idc-файлов. Результат показан на рис.8.
Рис. 8
Предположим, по ссылке мы хотим предоставить возможность
редактирования текущего курса валюты. Тогда соответствующая пара
файлов может выглядеть следующим образом: