регистрация | карта сайта
Постоянно обновляемая лента новостей
Обзоры, комментарии и статьи
Даты и дополнительная информация о событиях компьютерного рынка
Контакты, виды деятельности, предложения и другая информация о компьютерных компаниях
Новости, анонсы и пресс-релизы компьютерных компаний
Конференции с участием ведущих специалистов и экспертов
Информация для пользователей ITware, изменения персональных настроек, персональные закладки и web-карточки, служба переадресации
   
    
     Как искать?   Расширенный поиск
 ITware :. Конкурс статей Borland      Вход для зарегистрированных пользователейВыход

Конкурс статей Borland
Главная страница
Правила участия
Общий рейтинг
Призовой фонд
Сообщество ITware

Логин:
Пароль:
Забыли пароль? Забыли логин?

Зарегистрируйтесь сейчас - это абсолютно бесплатно!
Подпишитесь на рассылку ITware, чтобы ежедневно получать анонсы последних новостей и свежих материалов


CHIP online
Best Buy
Посоветуйся с Чипом!
Downloads

Контакты
Редакция:

Web-мастер:

 
Реклама




CGI-приложения для работы с базой данных через WWW-интерфейс
14 мая 2003 09:30  igor_t количество баллов: 2

Начиная, кажется, с 4-ой версии, Delphi предоставляет разработчику простейшие в использовании средства для создания WEB приложений. Первое, что нужно сделать- это создать новое приложение, указав тип Web Server Application. Далее предлагаются варианты. Остановимся на двух- ISAPI/NSAPI Dynamic Link Library и CGI Stand-alone executable.
В первом случае мы создадим динамическую библиотеку, выполняемую в среде WEB- сервера, а во втором- отдельное приложение, запускаемое по запросу пользователя "уходящее" после завершения своей работы. Казалось бы, перый вариант привлекательнее- и работает быстрее, и "все в одном флаконе", но есть один нюанс- если вы в процессе творческих изысканий допустите ошибку и "подвесите" свою библиотеку, то зависнет весь WEB-сервер, прекратив отвечать на все запросы пользователя. Во втором случае, хоть и затрачивается время на вызов приложения для конкретного запроса, но зависание конкретного вызванного приложения не приведет к зависанию сервера. Имеет также значение количество одновременно работающих пользователей- во втором варианте каждый пользователь запускает свой экземпляр приложения. Так что принимать решение вам- в зависимости от стоящих задач.

Итак, как же это все работает? Проще всего разобрать конкретный пример. Допустим, мы пишем. Короче, что-то пишем и в составе этого чего-то нужно обеспечить ввод данных в справочник фирм с удаленного рабочего места, на котором ничего, кроме броузера, нет никакого желания устанавливать (причин вы сами придумаете не один десяток).

Как было сказано выше, создаем соответствующий тип приложения. Перед нашим взором открывается пустой WebModule. В нем мы можем создать энное количество Actions, одно из которых будет по умолчанию. Actions- это именованный список действий, который можно вызывать, указывая имя в качестве параметра приложения при запуске (например, firms.exe/new) Т.е. в одном приложении может содержаться множество действий, каждое из которых можно инициировать при запуске приложения с помощью параметра. Запуск приложения без параметра приведет к исполнению действия по умолчанию. В Actions можно прописать что угодно- сложнейший расчет с применением линейного программирования, запуск хранимой процедуры в базе данных и т.п. Но нам необходимо просто записать в базу данных идентификационный код фирмы, ее полное и сокращенное название, введенное пользователем. Как же попадает эта информация в наше приложение? Дело в том, что приложение вызывается из определенной html-страницы с помощью тега <form action="/scripts/firms.exe/new" method=post > и приложение может считывать информацию из именованных полей вызвавшей его страницы. Делается это так:

Request.ContentFields.Values['okpo']

Эта незамысловатая строчка возвращает то, что ввел пользователь в поле с названием "okpo" (<input type="text" name="okpo" size="15">). Заимев вышеуказанным способом все три параметра, мы можем их благополучно занести в базу данных любым известным вам способом (ODBC, ADO и т.п.). Теперь желательно предусмотреть возврат на страницу ввода следующей фирмы или выдачу сообщения в случае какого-либо сбоя при записи. После успешной записи делаем следующее:

Response.Content:='<h1>Запис занесено до Бази Даних</h1><hr><INPUT TYPE="button" VALUE="OK, на попередню сторiнку" onClick="history.back()">';

Таким образом мы передаем броузеру пользователя страничку, на которой находится сообщение о удачной записи и кнопочка перехода на предыдущую страницу, т.е. страницу для ввода следующей фирмы. В случае ошибки:

Response.Content:='<h1>Помилка запису до Бази Даних !!!</h1><br>'
+ADOCommand1.CommandText + '<hr><INPUT TYPE="button" VALUE="OK, на попередню сторiнку" onClick="history.back()">';

Здесь к сообщению об ошибке добавлен текст SQL команды, с помощью которой предпринималась попытка сделать запись.
Есть и более сложный, но и обладающий большими возможностями метод выдачи информации пользователю- использование компоненты PageProducer. Он позволяет использовать шаблоны страниц со специальными тегами <#имя>. Если на странице встречается такой тег, инициируется событие OnHTMLTag. В процедуре обработки этого события можно проанализировать, тег с каким именем вызвал это событие:

if TagString='count' then ReplaceText:=IntToStr(Count);

Данная строчка заменяет тег <#count> в html-странице на значение переменной Count.
Итак, будем считать, что основную задачу наша программка выполняет. Разместив наш exe-файл в каталоге scripts web-сервера (IIS), а страничку, из которой вызывается это приложение- в другом соответствующем месте на web-сервере, мы получим функционирующую систему.
Теперь неплохо бы добавить контроль введенных данных- все ли поля заполнены, корректно ли введен идентификационный код и т.д. Конечно, некоторые проверки можно провести только на стороне сервера (дублирование идентификационного кода, например), но контроль за тем, все ли поля заполнены, было бы глупо проводить на сервере. Для этой цели прекрасно подойдет JavaScript, который исполняется на стороне клиента:

<script language="JavaScript">
function check_fields() {
if (document.all.okpo.value=="" ||
document.all.longname.value=="" ||
document.all.shotname.value=="") {
alert ("Заповнiть всi поля !");
return( false );
}
}
</script>

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

<input type="submit" value="Додати до довiдника" name="Submit" onClick="return check_fields()">

В довершении должен заметить, что даже если на одной форме присутствует несколько кнопок, а form action, соответственно, одна, в web-приложении можно разобраться, какая из кнопок бала нажата, следующим способом:

if Request.ContentFields.Values['submit']='Перевiрка' then begin
.
end
else if Request.ContentFields.Values['submit']='Додати до довiдника' then begin
.
end;

т.е. по заглавию кнопки (свойству .value.), несмотря на то, что имя у этих кнопочек одинаковое.

Итак, в результате мы получили то, что называется "дешево и сердито". На компьютере клиента ничего не нужно устанавливать, кроме ОС с IE; все изменения, вплоть до внешнего вида страницы ввода данных, проводятся на стороне сервера; всю заботу о сохранности данных возмет на себя СУБД на сервере, оснащенном средствами резервного копирования и защищенном от нерадивых пользователей, а о возможностях оформления внешнего вида нашего приложения я уже даже не говорю. Что еще нужно для счастья?



Статьи данного автора в акции Borland:
Обсуждение
30 августа 2003 - 08:01 aeff предложение
Как подметил Rollback в комментариях к статье ╚Методика разработки программного обеспечения в среде Delphi для систем промышленной автоматизации╩, особенностью конкурса на itware есть то, что в статье позволено размещать только одну картинку и то в конце статьи, а я вижу 2 статьи, к которым это не относится. У нас, есть черные и белые люди? Предлагаю исключить из конкурса статьи, у которых больше одного рисунка. ИМХО это будет справедливо...
22 мая 2003 - 09:20 rollback Ну и ну
Знал я, что в статью можно добавить теги изменюящие начертания текста. Но то, что можно впереть сюда работающую форму даже не подозревал :) Спасибо за науку.
Новое сообщение
Логин:
Пароль:
Заголовок:
Сообщение:

© ICC. Перепечатка допускается
только с разрешения .
Новости Публикации Календарь событий Пресс-центр
IT-каталог: продукты IT-каталог: компании Библиотека
Форум Персональные сервисы Регистрация Карта сайта
Звуки му последнее представление в киеве