Upload
lucus
View
44
Download
4
Embed Size (px)
DESCRIPTION
Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета. Технологии разработки Internet -приложений. Среда Delphi: CGI, ISAPI приложения Базы данных. - PowerPoint PPT Presentation
Citation preview
ДонНУ, кафедра КТ, проф. В. К. Толстых
Технологии Технологии разработки разработки InternetInternet--приложенийприложений
Среда Среда Delphi: Delphi: CGI, ISAPI CGI, ISAPI приложенияприложения
Базы данныхБазы данных
Из цикла лекций «Технологии разработки Internet-приложений» для студентов 4-го курса кафедры Компьютерных технологий физического факультета Донецкого национального университета
Работа с базами данных(реляционные, навигационные)
Реляционные БД. Примеры SQL-запросов
Select * From Shope.dbf выбрать все поля из таблицы Shope.dbf
Select Product,Price From Shope выбрать поля Product и Price из Shope.dbf
Select Product,Price From Shope выбрать поле Product, где данные начинаются where Product like “CPU”||”%” на CPU (|| - объединить, % - любые символы)
Update Shope записать в таблицу Shope.dbf Set name = “unknown” unknown в поле name salary = “0” и 0 – в salary, where number Between -1 and 1 если поле number содержит данные от -1 до +1
Insert Into Shope добавить в таблицу Shope.dbf (code, date) поля code, dateValues (1, 31.12.2005) и заполнить их значениями 1 и 31.12.2005
Tableдоступ к данным навигационной БД
Основные свойства Table:
DataBaseName – псевдоним БД TableName :String – файл таблицы БД Active :Boolean – открыть, связаться с таблицей
Основные методы Table:
Open – открыть, связаться с таблицей (Active:=True;) Close – разорвать связь с таблицей (Active:=False;)
Queryдоступ к данным реляционной БД
Основные свойства Query:
DataBaseName – псевдоним БД Active :Boolean – открыть, связаться с таблицей
SQL :TStrings – SQL-запрос, его методы – Clear, Add(‘строка SQL’) RequestLive :Boolean – разрешение на перезапись в БД
Text :PChar – текст запроса
Основные методы Query:
Open – связаться, согласно SQL (Select), с таблицей (Active:=True;)Close – разорвать связь с таблицей (Active:=False;) ExecSQL – сформировать, проверить и выполнить SQL-запрос для
изменений БД (вместо Open)
Query – Пример
Query1.Close; – отключить БД (на всякий случай)
Query1.SQL.Clear; – очистить запрос (на всякий случай)
Query1.SQL.Add(‘Select * from test’) – составить запрос Select
Query1.Open – подключить БД, выполнить SQL-запрос
Вместо метода Query1.Close можно использовать свойство Query1.Active:=False
Вместо метода Query1.Open можно использовать свойство Query1.Active:=True
DataSourceпосредник доступа к БД для других компонент
Основное свойство:DataSet – псевдоним БД
Например,
DBGrid1.DataSource:=DataSource1;
SessionСоздает отдельные потоки доступа к БД для каждого запроса клиента (актуально для ISAPI)
Основное свойство Session:
AutoSessionName :Boolean – разрешение разным клиентам на одновременный доступ к БД (True)
QueryTableProducerгенератор HTML-таблиц на основе SQL-запросов
Основной метод:
Content – распознает POST/GET-запрос, выделяет из него параметры,инициализирует компонент Query, подставляет полученные параметрыв SQL-контейнер Query, подключает БД, создает HTML-таблицу
Количество параметров в SQL-запросе должно точно совпадать с количеством параметров в Web-запросе.
Параметры SQL-запроса - :параметр Например,
Select Product, Price From Shope where Product like :CPU || ”%”
QueryTableProducer
Основные свойства:
Query – имя компонента Query, содержащего SQL-запрос
Caption :String – HTML-код заголовка таблицы
Header :TStrings – HTML-код страницы перед таблицей (м.б. PageProducer)
Footer :TStrings – HTML-код страницы после таблицы (м.б. PageProducer
Columns – массив колонок: Count, Columns[i].BgColor='Gray‘…
визуаль- RowAttributes – свойства строк (атрибуты <Tr>): Align, BgColor, VAlign
ные TableAttributes – свойства таблицы (атрибуты <Table>): Align, BgColor, Border…
Переменные BgColor, Align… описаны в модуле HTTPProd
QueryTableProducer:
Header:<html><body><p><u> Ответ Web-сервера </u></p>
<Center><H1> Электронный магазин </H2></Center><p>
Footer:<p><b><i> Спасибо за интерес! </i></b></p></body></html>
Визуальная настройка HTML-таблицы
2 click
Свойство Active:=True
Если нет параметров в свойстве SQL
QueryTableProducer
Основные события:
onCreateContent – перед генерацией HTMLкода, параметр Continue:=False – отмена генерации
onGetTableCaption – перед генерацией заголовка таблицы, параметр Caption:=‘HTML string’
onFormatCell – перед генерацией каждой ячейки, параметр CellColumn :Integer – номер колонки
параметр CellRow :Integer – номер строки
параметры форматирования BgColor, Align, VAlign
параметр CellData :string – HTML содержимое ячейки
Рекомендации для начального тестирования Web-приложения
1. Создать Web-модуль, поместить Query1, QueryTableProducer1, Session1
2. В Session1 установить AutoSesionName:=True;
В QueryTableProducer1 заполнить DataBaseName и Query:=Query1;
В Query1 заполнить SQL-контейнер (для тестирования – Select *…
без параметров) и установить Active:=True;
3. 2 click на QueryTableProducer1 и настроить визуально HTML-таблицу;
4. Далее можно программировать передачу и прием Web-параметров,
усложнять вид HTML-таблицы, записывать данные в БД (разрешить NTFS
запись в фалы БД) и т.п.
Пример работы с БД
Shope.dbf
Запрос клиента
Пример работы с БДОтвет сервера
Настройка компонент -
БД (Таблица) – создать Alias ShopeCPU, разрешить NTFS запись в фалы БД
Свойства Query1 – DatabaseName: ShopeCPU
SQL: Select Product,Price From Shope.dbf - простой запрос для тестирования
Аctive: True (подключение БД согласно SQL)
Свойства QueryTableProducer1 – Query: Query1Caption: Таблица процессоров серии Header: <html><body><p><u> Ответ Web-сервера </u></p>
<Center><H1> Электронный магазин </H2></Center><p>Footer: <p><b><i> Спасибо за интерес! </i></b></p>
</body></html>Columns: … (визуально)
Свойства Session1 –АutoSessionName: True
Запрос клиента
<html><body>
<Center> <H1> Электронный магазин </H2></Center><form method="POST" action="http://localhost/net-web/
Scripts/ResponseSQL.exe"><input type="radio" name="CPU" value="Celeron-600" checked> Показать таблицу процессоров серии Celeron<br><input type="radio" name="CPU" value="P-2"> Показать таблицу процессоров серии P-2<br><input type="radio" name="CPU" value="P-3"> Показать таблицу процессоров серии P-3<br><input type="radio" name="CPU" value="P-4"> Показать таблицу процессоров серии P-4<P><input type="Submit" value="Отправить"></P></form></body></html>
Простые примеры ответа сервера,
обработчик события onAction
Пример простого обработчика onAction:procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);begin Response.Content:=QueryTableProducer1.Content;end;
Пример SQL запроса без параметров (тестирование связи):Query1.SQL:
Select Product,Price,Demand From Shope.dbfwhere Product like “P-2" || "%"
Пример SQL запроса с параметром:Query1.SQL:
Select Product,Price,Demand From Shope.dbfwhere Product like :CPU || "%"
Ответ – только процессоры P-2…
Ответ – процессоры в соответствие с одним
параметром CPU в запросе
Усложненные примеры (чтение/запись в БД)
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);begin // сформировать Web-клиенту требуемую (параметр :CPU) таблицу:Response.Content:=QueryTableProducer1.Content; Response.SendResponse; // отправить таблицу Web-клиенту // занести в базу данные об этом запросе: With Query1 Do begin Close; SQL.Clear; SQL.Add('Update Shope.dbf'); SQL.Add('Set Demand=Demand+1'); // статистика запросов SQL.Add('where Product'); SQL.Add(' like "'+Request.ContentFields.Values['CPU']+'" || "%"'); ExecSQL; // составить, проверить и выполнить SQL-запрос Close; end;end;
Обработчик события onGetTableCaption
// Оформление заголовка таблицыprocedure TWebModule1.QueryTableProducer1GetTableCaption(Sender: TObject; var Caption: String; var Alignment: THTMLCaptionAlignment);begin Caption:='<b>Таблица процессоров серии '+ Request.ContentFields.Values['CPU']+'</b>';end;
Обработчик события onFormatCell
procedure TWebModule1.QueryTableProducer1FormatCell(Sender: TObject; CellRow, CellColumn: Integer; var BgColor: THTMLBgColor; var Align: THTMLAlign;
var VAlign: THTMLVAlign; var CustomAttrs, CellData: String);begin if (CellRow>0)and(CellColumn=0) Then // в первом столбце, кроме заголовка -
CellData:=' <A href="URL">'+CellData+' - заказать</A>';end;