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

Преобразование


Если вы посмотрите на список полей Парадокса, то вам не составит труда понять, что не все поля можно просто конвертировать в текстовый формат, например типа Memo обычно не помещаются в короткие строки (Short String). А как начет Blob? Для данного типа полей я составил небольшую таблицу конвертирования.

Paradox field type

ObjectPascal conversion type

TStringField (size)

String[length]



TIntegerField, TWordField, TSmallIntField

Integer

Currency

Double

Memo, Blob

n/a (ignored)

Использую данную таблицу не трудно небольшую программу, которая берет на вход таблицу и создает программу определения записи на Паскале.

{$APPTYPE CONSOLE}

 uses DB, DBTables;

 var i: Integer;

 begin

   if ParamCount = 1 then with

TTable.Create(nil) do

   try

     TableName := ParamStr(1);

     Active := True;

     writeln('Type');

     writeln('  TRecord = record');

     for i:=0 to Pred(FieldDefs.Count) do

     begin

       if (FieldDefs[i].FieldClass = TStringField) then

         writeln(' ':4,FieldDefs[i].Name,': String[',FieldDefs[i].Size,'];')

       else

       begin

         if (FieldDefs[i].FieldClass = TIntegerField) or

            (FieldDefs[i].FieldClass = TWordField) or

            (FieldDefs[i].FieldClass = TSmallintField) then

           writeln(' ':4,FieldDefs[i].Name,': Integer;')

         else

           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.

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



Содержание раздела