Интернет решения от доктора Боба | страница 30



;');

>     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. Конечно, преобразование записей не просто сделать, но для этого мы имеем всегда оригинальную базу и можем запускать периодически программу преобразования. Так как я добавляю всего несколько записей примерно раз в два месяца, то меня это не очень волнует.