Bob Swart - Интернет решения от доктора Боба

Тут можно читать онлайн Bob Swart - Интернет решения от доктора Боба - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Интернет решения от доктора Боба
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    3.89/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

Bob Swart - Интернет решения от доктора Боба краткое содержание

Интернет решения от доктора Боба - описание и краткое содержание, автор Bob Swart, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Интернет решения от доктора Боба - читать онлайн бесплатно полную версию (весь текст целиком)

Интернет решения от доктора Боба - читать книгу онлайн бесплатно, автор Bob Swart
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

begin

FDosEnvList.Free;

FDosEnvList := nil;

inheritedDestroy

end {Destroy} ;

functionTBDosEnvironment.GetDosEnvCount: Word;

begin

Result := 0;

ifAssigned(FDosEnvList) thenResult := FDosEnvList.Count

end {GetDosEnvCount} ;

functionTBDosEnvironment.GetDosEnvStr( ConstName: String): String;

vari: Integer;

Tmp: String;

begin

i := 0;

Result := '';

ifAssigned(FDosEnvList) then whilei do

begin

Tmp := FDosEnvList[i];

Inc(i);

ifPos(Name,Tmp) = 1 then

begin

Delete(Tmp,1,Length(Name));

ifTmp[1] = '=' then

begin

Delete(Tmp,1,1);

Result := Tmp;

i := FDosEnvList.Count { end while-loop }

end

end

end

end {GetDosEnvStr} ;

end.

Данный компонент получает список переменных среды во время своего создания. Свойство DosEnvCount и DosEnvList является свойством только для чтения и поэтому лучше его создавать его в на ходу, а не бросать на форму, так как берется только 'свежий' список переменных среды, а не загружается из .DFM файла).

2.2.4. Анализ

Среди переменных среды есть переменная с именем REQUEST_METHOD. Она должна иметь значение POST для нашего примера (Я не люблю другие методы). Затем мы должны найти размер информации, которая передана нам. Для этого мы должны получить переменную CONTENT_LENGTH. Сама информация поступает к нам через стандартный ввод (без маркера конца файла, поэтому наша задача не пытаться читать больше, чем нам передано). Данные поступающие через стандартный ввод имеют следующую форму FIELD=VALUE и разделяется с помощью символа '&'. Например: AUTHOR="Bob_Swart"&. Поскольку мы имеем весь входной поток, как одну длинную строку, то мы можем быстро найти параметр AUTHOR с помощью следующей функции:

var

Data: String;

functionValue(Const Field: ShortString): ShortString;

vari: Integer;

begin

Result := '';

i := Pos(Field+'=',Data);

ifi = 0 then

begin

Inc(i,Length(Field)+1);

whileData[i] <> '&' do

begin

Result := Result + Data[i];

Inc(i)

end

end

end {Value} ;

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

{$APPTYPE CONSOLE}

var

Data: String;

ContentLength,i,j: Integer;

begin

writeln('HTTP/1.0 200 OK');

writeln('SERVER: Dr.Bob''s Intranet WebServer 1.0');

writeln('CONTENT- TYPE: TEXT/HTML');

writeln;

writeln('');

writeln('

');

writeln('Generated by Dr.Bob''s CGI-Expert on ',DateTimeToStr(Now));

withTBDosEnvironment.Create( nil) do

begin

fori := 0 toPred(DosEnvCount) do

begin

ifPos('REQUEST_METHOD',DosEnvList[i]) 0 then

begin

Data := DosEnvList[i];

Delete(Data,1,Pos('=',Data))

end

end;

ifData = 'POST' then

begin

ContentLength := StrToInt(GetDosEnvStr('CONTENT_LENGTH'));

SetLength(Data,ContentLength+1);

j := 0;

fori:=1 toContentLength do

begin

Inc(j);

read(Data[j]);

end;

Data[j+1] := '&';

{ now call Value or ValueAsInteger to obtain individual values }

end;

Заметим, что первые три "writeln" строки, посылаемые на стандартный вывод, необходимы для браузера, что бы сообщить ему, что содержимое страницы имеет тип TEXT/HTML.

2.2.5. Базы данных

При написании CGI приложений, вам необходим, какой то путь для доступа к данным базы. Одним из простых решений будет использование BDE и помещение ваших данных в таблицы Парадокса или dBASE. Если по какой либо причине BDE не инсталлировано на вашем NT Web сервере (может быть ваш дружественный Internet Provider не предоставляет вам BDE), вы можете использовать технику старых дней, используйте вместо базы данных файл записей.. Все что вам нужно, определить тип TRecord и написать программу, которая конвертирует вашу базу данных в file of TRecord.

2.2.6. Преобразование

Если вы посмотрите на список полей Парадокса, то вам не составит труда понять, что не все поля можно просто конвертировать в текстовый формат, например типа Memo обычно не помещаются в короткие строки (Short String). А как начет Blob? Для данного типа полей я составил небольшую таблицу конвертирования.

Paradox field type ObjectPascal conversion type
TStringField (size) String[length]
TIntegerField, TWordField, TSmallIntField Integer
Currency Double
Memo, Blob n/a (ignored)

Использую данную таблицу не трудно небольшую программу, которая берет на вход таблицу и создает программу определения записи на Паскале.

{$APPTYPE CONSOLE}

usesDB, DBTables;

vari: Integer;

begin

ifParamCount = 1 then withTTable.Create( nil) do

try

TableName := ParamStr(1);

Active := True;

writeln('Type');

writeln(' TRecord = record');

fori:=0 toPred(FieldDefs.Count) do

begin

if(FieldDefs[i].FieldClass = TStringField) then

writeln(' ':4,FieldDefs[i].Name,': String[',FieldDefs[i].Size,'];')

else

begin

if(FieldDefs[i].FieldClass = TIntegerField) or

(FieldDefs[i].FieldClass = TWordField) or

(FieldDefs[i].FieldClass = TSmallintField) then

writeln(' ':4,FieldDefs[i].Name,': Integer;')

else

if(FieldDefs[i].FieldClass = TCurrencyField) then

writeln(' ':4,FieldDefs[i].Name,': Double;')

else

writeln('{ ':6,FieldDefs[i].Name,' }')

end

end

finally

writeln(' end;');

Free

end

else

writeln('Usage: recordtablename')

end.

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

2.2.7. Записи

После осознания, что мы можем писать на Delphi 2 CGI приложения без использования BDE, мы решили сгенерировать тип записи для нашей таблицы delbooks.db и конвертировать ее записи в файл записей. Использую программ RECORD.EXE из предыдущей главы мы получили следующее определение записи.

Type

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Bob Swart читать все книги автора по порядку

Bob Swart - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Интернет решения от доктора Боба отзывы


Отзывы читателей о книге Интернет решения от доктора Боба, автор: Bob Swart. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x