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