Интернет решения от доктора Боба - страница 19
>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 страницы и отправка ее на стандартный вывод с динамическим формированием содержимого в зависимости от запроса на форме. Уверен, что единственный способ получить еще более быстрое приложение, это вернуться обратно к статическим страницам без запросов.
2.2.9. Подсчет обращений
Код для подсчета обращений весьма прост. Для поля на форме, которое было выбрано, мы проходим через все записи и добавляем единичку в соответствующую запись при совпадении информации.
>if DataRec.Author <> '' then
>begin
>{$IFDEF DEBUG}
> writeln('Author: ',DataRec.Author,'
');
>{$ENDIF}
> for i:=1 to Books16 do
> if Pos(DataRec.Author,Book16[i].Author) <> 0 then
> Inc(Result16[i]);
> for i:=1 to Books32 do
> if Pos(DataRec.Author,Book32[i].Author) <> 0 then
>Inc(Result32[i])
>end;
Заметим, что конструкция {$IFDEF DEBUG} может быть использована для вывода значения входного поля в стандартный вывод, так что мы можем использовать наше CGI приложение для отладки формы. Отладка вашего CGI приложения может оказать трудной задачей, поскольку вам нужен Web сервер и браузер для этого…