Интернет решения от доктора Боба - страница 15
>if (keys >= 0) then
>begin
2.1.9. Последний вариант конвертора Имея объединенные фреймы и таблицы в нашем конверторе, мы можем переходить от простой BIOLIFE.DB таблицы к более реалистичной таблицы продуктов, например PARTS.DB. Данная таблица имеет больше цифровых и меньше "memo" (или тестовых) данных, и поэтому выглядит лучше когда данные отображаются в табличном виде с простыми заголовками. "Живые" HTML кнопки работают также как и ранее, и мы можем выбирать любую запись из фрейма с индексом. Заметим, что содержимое правого фрейма также содержит текущую позицию (и общее количество записей) в таблице, так как это тоже генерируется на лету. В данный момент мы уже имеем два пути для преобразования таблицы в HTML страницу, или с помощью простого текстового конвертора или с помощью более сложного конвертора фрейм /таблица, Я написал маленькую программу, которая использует оба метода. Это простое консольное приложение, которое нуждается только в имени таблицы как аргумент командной строки (таблица должна находиться в текущем каталоге). По умолчанию используется нормальный метод преобразования, тем не менее, если ввести более одного параметра, то будет использоваться метод преобразования во фреймы с таблицами (сам дополнительный параметр игнорируется). 2.1.10. Линейка прогресса Конвертирование маленьких таблиц в небольшое количество страниц не занимает много времени, не более нескольких секунд. Но конвертирование больших таблиц в сотни или тысячи страниц может занять несколько минут. По этой причине я сделал небольшой прогресс индикатор к конвертору. Простая форма с компонентом TGauge. Мы устанавливаем MinValue и Value в 0, а MaxValue в количество записей в таблице, и после генерации страницы мы увеличиваем значение Value на единицу. Небольшие часики в левом верхнем углу показываю количество пройденного времени: 2.1.11. Производительность Единственная разница между реальным приложением обработки баз данных (например с использованием BDE) и браузером базы данных это производительность. Наше "приложение" не нуждается ни в каких других приложениях, кроме стандартного браузера. Посылка данных по сети и взаимодействие эмулируется с помощью щелчков по картинке-навигатору и перехода по гипер-ссылке. Ни BDE или ISAPI/NSAPI программы не могут выполнять подобную архитектуру. Конечно, мы имеем только статические страницы, поэтому здесь нет возможности делать динамические запросы или преобразование базы данных. Поэтому нам нет нужды разрабатывать другие вещи, как CGI скрипты. Но наши сгенерированные страницы могут "имитировать" Парадокс базу, даже не Unix Web сервере! И особенно для баз, в которых изменения очень редки, например раз в неделю, это превосходная схема быстрой и простой организации web сайта. 2.1.12. Заключение В данной главе мы увидели быстрый и простой путь преобразование Дельфи таблиц в платформа независимые HTML страницы; или текстовые с заголовками или в виде фрейм/таблица. Мы изучили, как использовать HTML технологию, включая карты-картинки, для имитации "живых" клавиш и выполнения действия. Данная технология может быть применима, как в Интернет, так и в Интранет приложениях (как минимум для меня). И в результате хорошая производительность по сравнению с другими решениями (ограничением может быть нехватка места на сервере, если вы имеете действительно большое количество HTML страниц). Что еще осталось (как задание для читателя) это поддержка показа картинок из базы данных и запросы (например, для генерации master-detail HTML страниц).> writeln(g,'
'); > write(g,'
'); ')> writeln(g,RecNr:3,'
>end;
> { print fields }
>writeln(f,'
');
');>for i:=0 to Pred(FieldCount) do if FieldTypes[i] > sf_UnKnown then
>begin
> writeln(f,'
'); ');> write(f,'
',FieldDefs[i].Name,' '); > if FieldTypes[i] = sf_Memo then
> writeMemo(f,Fields[i])
> else writeln(f,Fields[i].AsString);
> writeln(f,'
> if (keys >= i) then
> writeln(g,'
',Fields[i].AsString,' ')>end;
>if (keys >= 0) then writeln(g,'');
>writeln(f,'
> program BDE2HTML;
> {$IFDEF WIN32}
> {$APPTYPE CONSOLE}
> uses
> {$ELSE}
> uses WinCrt,
> {$ENDIF}
> Convert, HTables;
> begin
> case ParamCount of
> 0: writeln('Usage: BDE2HTML tablename');
> 1: Convert.DatabaseHTML('',ParamStr(1));
> else HTables.DatabaseHTML('',ParamStr(1))
> end
> end.