Чтение онлайн

ЖАНРЫ

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

Swart Bob

Шрифт:

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: record tablename')

 end.

Конечно,

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

2.2.7. Записи

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

Type

TRecord = record

ISBN: String[16];

Title: String[64];

Author: String[64];

Publisher: String[32];

Price: Double;

Code: String[7];

{ Comments }

Level: Integer;

TechnicalContentsQuality: Integer;

QualityOfWriting: Integer;

ValueForMoney: Integer;

OverallAssessment: Integer;

{ Cover }

end;

Теперь нам осталось написать сам конвертор, который в цикле просматривает записи таблицы, помещает их в запись и записывает в файл.

{$APPTYPE CONSOLE}

 uses DB, DBTables, SysUtils;

 var i: Integer;

Rec: TRecord;

F: File of TRecord;

 begin

if ParamCount = 1 then with TTable.Create(nil) do

try

System.Assign(f,ChangeFileExt(ParamStr(1),'.REC'));

Rewrite(f);

TableName := ParamStr(1);

Active := True;

First;

while not Eof do with Rec do

begin

ISBN := FieldByName('ISBN').AsString;

Title := FieldByName('Title').AsString;

Author := FieldByName('Author').AsString;

Publisher := FieldByName('Publisher').AsString;

Price := FieldByName('Price').AsFloat;

Code := FieldByName('Code').AsString;

Level := FieldByName('Level').AsInteger;

TechnicalContentsQuality :=

FieldByName('TechnicalContentsQuality').AsInteger;

QualityOfWriting := FieldByName('QualityOfWriting').AsInteger;

ValueForMoney := FieldByName('ValueForMoney').AsInteger;

OverallAssessment := FieldByName('OverallAssessment').AsInteger;

write(f,Rec);

Next

end

finally

System.Close(f);

Free

end

else

writeln('Usage: convert tablename')

 end.

Данная

программа может использоваться для полного преобразования таблицы delbooks.db в файл delbooks.rec с типом записи TRecord. Delphi 2 CGI приложение может просто открыть этот файл и читать любую запись без использования BDE. Конечно, преобразование записей не просто сделать, но для этого мы имеем всегда оригинальную базу и можем запускать периодически программу преобразования. Так как я добавляю всего несколько записей примерно раз в два месяца, то меня это не очень волнует.

2.2.8. Производительность

Единственное различие между обычным CGI приложением, которое использует BDE для получения данных и нашим приложением без использования BDE это производительность. Кроме того, наше CGI всего лишь 70 KB, оно не нуждается в загрузке BDE, так что время загрузки еще меньше (в результате еще более высокая производительность). В действительности реальные CGI приложения, использующие BDE, часто используют ISAPI (Information Server API) или NSAPI (Netscape Server API) расширения для сохранения CGI приложения "все-время-в-полете (in the air)".

Еще больше можно повысить производительность, если вместо файла записей использовать массив записей с предварительно инициализированными значениями! Вместо создания файла с записями, Я генерирую Паскаль код для этой цели. Таким образом, я могу генерировать исходный Паскаль код сразу с нужной информацией. Не нужды в файле записей. И сразу после компиляции я имею одиночное приложение на Дельфи 2, размером всего 77824 байта, которое содержит информацию об 44 книгах внутри самого себя.

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

Поделиться с друзьями: