4.14 Введение в программирование CGI

Важнейшей особенностью web-сервера является возможность получения информации от пользователя и обработка ее с помощью CGI(общий шлюзовый интерфейс). CGI – компонент программного обеспечения, который:

-           позволяет писать сценарии и создавать на их основе управляемые пользователем интерактивные приложения;

-           обеспечивает возможность взаимодействовать с другими программами сервера;

-           имеет средства динамического создания Web-страниц на основе информации пользователя;

-           может вызвать внешнюю программу и передать в нее пользовательские данные.

В конечном итоге пользователь, не будучи ограничен в рамках заранее написанных документов, используя CGI сценарий может создать круг приложений, которые ему необходимы для получения информации.

Программе CGI необходимо извлечь информацию, обработать ее и сообщить ответ. Рассмотрим простой пример – создание виртуального документа:

Запускаем C++Builder. В главном меню выбираем File/New и в открывшейся таблице New Items выбираем Console App.

Удаляем все, что находится в открывшемся окне и записываем код:

//Пример CGI

#include <vcl\vcl.h>

#pragma hdrstop

 char S[] = "ПРИВЕТ<P>\n";

void main(void)

{

 setvbuf(stdout, NULL, _IONBF, 0);

 printf("\nContent-type: text/html\n\n");

printf("<html>\n");

 printf("<body>\n");

 printf(S);

 printf("</body>\n");

 printf("</html>\n");

}

Запоминаем программу и запускаем на трансляцию. После этого помещаем выполняемый файл (например Prim.exe) на Web-сервер в раздел CGI.

Запускаем броузер и вызывем программу из раздела CGI.

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

- заголовок в котором описан формат возвращаемых данных

 printf("\nContent-type: text/html\n\n"); - текст формата HTML;

-           тело выходных данных – данные в формате HTML.

Сервер возвращает результаты выполнения CGI-программы броузеру.

Для Web-сервера неважен язык, на котором написана программа.

4.15 Программирование баз данных

Особенностью разработки доступа к базам данных при помощи C++Builder является полностью объектный визуальный подход. Вторая особенность заключается в том, что доступ к разным базам данных (dBase, Paradox, Oracle и другим) происходит совершенно унифицированно. Эта дает определенные преимущества по сравнению с таким мощным средством разработки баз данных как Visual FoxPro.

Интерфейсом между приложением и базами данных служит BDE - Borland Database Engine, т.е Механизм База данных Borland. Он позволяет не только осуществлять доступ к локальным базам данных, но и осуществлять доступ к данным по типу клиент-сервер. Одной из особенностей C++Builder является то,что доступ к базам данных осуществляется одинаково как на стадии разработки, так и на стадии исполнения.

Для разработки используется трех ступенчатая модель. Каждой ступени соответствует своя компонента (класс).

TDBGrid - отображает в окне область редактирования (по типу команды Browse (Grid) в FoxPro)

TdataSource - служит интерфейсом между TDBEdit и нижней компонентой.

TTable - содержит все записи таблици.

На более низком уровне работают драйвера BDE, осуществляющие непосредственный обмен с хранимыми данными.

Расмотрим более подробно описанные выше компоненты.

Источник данных (TDataSource).

Основные свойства.

AutoEdit - разрешает или запрещает редактирование записей (False или True).

DataSet - определяет имя конкретного набора данных, таблицы или запроса. Например Table1. Можно переключаться с одного набора данных на другой непосредственно во время выполнения программы.

Name - определяет название данной компоненты. Например DataSource.

С данной компонентой связаны три события OnDataChange, OnStateChange, OnUpdateData.

Таблица (TTable).

Основные свойства.

Active - разрешает или запрещает просмотр данных.

DatabaseName - псевдоним базы данных и путь к каталогу, где база данных содержится.

Name - псевдоним таблицы.

TableName - конкретное имя таблицы (в указанном каталоге).

Exclusive - разрешает или запрещает другому приложению обращаться к таблице.

IndexFiles - выбор индексного файла для таблицы.

IndexName - правило сортировки данных в индексе.

Filter - установка фильтра.

MasterFields и MasterSource - для образования связей между двумя таблицами.

Для данной компоненты определены стандартные методы используемые другими системами управления баз данных: Locate, Lookup, Append, Insert, Next, MoveBye и другие.

Отображение данных (TDBGrid).

Некоторые свойства.

DataSource - совпадает со свойством Name компоненты TDataSource. В результате имеем следующую связку:

TDBGrid TDataSource TTable

-----------------------------------------------------------------------------------------

DataSource <--> Name-DataSet <--> Name -DatabaseName-TableName

Такая связка обеспечит в окне редактирования появления записей таблицы имеющей имя TableName (см.ниже).

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

Еще одна компонента часто используется в связи с работой с базами данных.

Запросы (Tquery).

Данная компонента понадобится вам, если у вас возникнет необходимость пользоваться командами SQL-языка.

Основные свойства.

Active - разрешает или запрещает просмотр данных.

DatabaseName - содержит псевдоним базы данных или полный путь к каталогу, где эта база данных находится.

SQL - используется для ввода команды SQL. Синтаксис этих команд является стандартом и с ним можно познакомиться в любом руководстве по СУБД (например FoxPro).

RequestLive - разрешает или запрещает BDE возращать набор данных в любом случае.

Приступаем теперь к разбору конкретного примера. Пример очень прост. При запуске программы появляется форма. На форме имеется окно редактирования таблицы, кнопка "Выход", кнопка "Добавить", кнопка "Удалить". Таблица содержит данные о людях: ФИО, выданная сумма, дата выдачи. У вас будет имется возможность редактировать таблицу, добавлять и удалять записи. При запуске программа проверяет наличие таблицы в указанном каталоге и при необходимости создает и индексирует эту таблицу.

Поместим на форму три кнопки, TDBGrid (для просмотра таблицы), TTable, TDataSource.. Пусть наша таблица будет находится в каталоге c:\baza\ и будет иметь имя 'proba' Заполним свойства трех компонент основных компонент:

TTable :

DatabaseName=c:\baza\

Name=Table1

TableType=ttDBase

TableName=proba

IndexName=proba

TDataSource:

DataSet=Table1

Name=DataSource1

TDBGrid:

DataSource=DataSource1

Все остальные свойства можно оставить по умолчанию и менять по ходу работы над программой.

Приведем текст модуля Unit1.cpp содержащего основные исполняемые функции.

//---------------------------------------------------------------------------

#include <vcl\vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma link "Grids"

#pragma resource "*.dfm"

TForm1 *Form1;

char * baza="proba.dbf";

char * baza1="proba";

//---------------------------------------------------------------------------

//Конструктор

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

 HANDLE handle;

//пытаемся открыть таблицу как обычный файл

 handle=CreateFile(baza,

 GENERIC_READ,

 FILE_SHARE_WRITE,

 NULL,

 OPEN_EXISTING,

 FILE_ATTRIBUTE_ARCHIVE,

 NULL);

if(handle!=INVALID_HANDLE_VALUE)

 {

 //файл есть и закроем

 CloseHandle(handle);

 } else

 {

 //файла нет

//создаем таблицу

 Table1->FieldDefs->Clear();

 Table1->FieldDefs->Add("Name", ftString, 20, true);

 Table1->FieldDefs->Add("Zarpl", ftFloat, 0, true);

 Table1->FieldDefs->Add("Data", ftDate, 0, true);

//теперь создаем индексный файл

 Table1->IndexDefs->Clear();

 TIndexOptions MyIndexOptions;

 MyIndexOptions << ixPrimary << ixUnique;

 Table1->IndexDefs->Add(baza1, "Data", MyIndexOptions);

 Table1->CreateTable();

 }

 //здесь открыть таблицу

 Table1->Active = true;

//активизировать индекс

 Table1->OpenIndexFile("proba.MDX");

}

 //----------------------------------------------

 //Деструктор

__fastcall TForm1::~TForm1()

 {

 //закрыть таблицу

 Table1->Active = false;

}

//---------------------------------------------------------------------------

//выход

void __fastcall TForm1::Button1Click(TObject *Sender)

{

//метод Close закрывает форму и вызывает деструктор

 Close();

}

//---------------------------------------------------------------------------

//кнопка "добавить запись"

void __fastcall TForm1::Button3Click(TObject *Sender)

{

 Table1->Append();

}

//---------------------------------------------------------------------------

//кнопка "удалить запись"

void __fastcall TForm1::Button2Click(TObject *Sender)

{

 Table1->Delete();

}

Прокоментируем вышеприведенный текст.

Отметим одну интересную возможность C++Builder. Он может одновременно работать как с библиотекой объектов с которой мы до сих пор работали так и непосредственно с функциями API. В нашей программе мы демонстрируем эту возможность: в конструкторе пытаемся открыть файл (функция CreateFile). Если открытие не удается, выполняется часть кода создающий таблицу и индексный файл. Ниже представлено окно работы нашей программы.



Информация о работе «Основы C»
Раздел: Информатика, программирование
Количество знаков с пробелами: 200759
Количество таблиц: 5
Количество изображений: 11

Похожие работы

Скачать
20474
0
0

... . Имеет ли право на существование эта биологизаторская интерпретация экологии? Видимо, да. Она широко представлена, и с этим следует считаться. Но она не может служить концептуальной основой комплексного непрерывного экологического образования. В структуре научного знания при таком подходе не остаётся места для географической и социальной экологии, экологии человека, а сама биология превращается ...

Скачать
5443
0
0

... хотя бы стены, чтобы нас не унижали в собственном доме, до конца не растащили наше имущество, нам нужна, обладающая высоким моральным и воинским духом достойно обеспеченная армия. Однако, значение российской армии и в том, что она представляет собой, пожалуй, единственный институт в современной виртуальной России, лишенный симулякров, поскольку ней, по крайней мере, погибают реально - в бою. ...

Скачать
8522
1
2

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

Скачать
11185
0
0

... . Для этого достаточно измерить его на карте и знать масштаб карты. Компас. Научиться пользоваться компасом нетрудно. Но компас, как правило, наилучшим помощником в ориентировании становится вместе с картой. В спортивном ориентировании пользуются специальными жидкостными компасами. Они позволяют быстро и просто взять с карты нужное направление и двигаться по местности по выбранному азимуту. ...

0 комментариев


Наверх