Bob Swart - Интернет решения от доктора Боба
- Название:Интернет решения от доктора Боба
- Автор:
- Жанр:
- Издательство:неизвестно
- Год:неизвестен
- ISBN:нет данных
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
Bob Swart - Интернет решения от доктора Боба краткое содержание
Интернет решения от доктора Боба - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
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}
usesDB, DBTables, SysUtils;
vari: Integer;
Rec: TRecord;
F: File ofTRecord;
begin
ifParamCount = 1 then withTTable.Create( nil) do
try
System.Assign(f,ChangeFileExt(ParamStr(1),'.REC'));
Rewrite(f);
TableName := ParamStr(1);
Active := True;
First;
while notEof do withRec 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. Подсчет обращений
Код для подсчета обращений весьма прост. Для поля на форме, которое было выбрано, мы проходим через все записи и добавляем единичку в соответствующую запись при совпадении информации.
ifDataRec.Author <> '' then
begin
{$IFDEF DEBUG}
writeln('Author: ',DataRec.Author,'
');
{$ENDIF}
fori:=1 toBooks16 do
ifPos(DataRec.Author,Book16[i].Author) <> 0 then
Inc(Result16[i]);
fori:=1 toBooks32 do
ifPos(DataRec.Author,Book32[i].Author) <> 0 then
Inc(Result32[i])
end;
Заметим, что конструкция {$IFDEF DEBUG} может быть использована для вывода значения входного поля в стандартный вывод, так что мы можем использовать наше CGI приложение для отладки формы. Отладка вашего CGI приложения может оказать трудной задачей, поскольку вам нужен Web сервер и браузер для этого…
2.2.10. Результаты запроса
Теперь посмотрим на последнюю часть CGI приложения: часть, в которой генерируется HTML код. Здесь я использую другое свойство расширенного HTML, именованные таблицы, что бы вывод выглядел красивее. Для каждой записи, у которой счетчик более единицы, я выводу счетчик, название, автора, издательство, ISBN, уровень, техническое содержание, качество книги, стоимость и общее значение. Я также включаю ссылку из названия на другое место, где находится более подробное описание. С помощью этого великолепного свойства динамических HTML страниц: вы даже можете включать ссылки на статические страницы, так как результат запроса, часто стартовая точка для прыжка в другое место!
writeln('
');
writeln('
');
writeln('
The following books have been found foryou:
');
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
После того как заголовок написан, самое время выводить сами записи. Я не хочу сортировать их по рейтингу от 5 до 1, так что я просто иду по списку книг и печатаю каждую со своим рейтингом. Этот путь, потому что я знаю, что книги уже отсортированы по рейтингу в основной базе delbooks.db (которая отсортирована по уровню и рейтингу). Обычно книги в верху списка уже лучший ответ на заданный вопрос.
ifDataRec.Delphi2 then
begin
forHits := 5 downto1 do
begin
fori:=1 toBooks32 do ifResult32[i] = Hits then
begin
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
writeln('
end
end;
ifDataRec.Delphi1 thenwriteln('
end;
ifDataRec.Delphi1 then
begin
forHits := 5 downto1 do
begin
fori:=1 toBooks16 do ifResult16[i] = Hits then
Интервал:
Закладка: