Вот мой вариант (вообще а не для IBX)
if (Data^.sqlscale = 0) and (Data^.sqlsubtype = 0) then
FieldDef.DataType := ftLargeint
else
if (Data^.sqlscale >= -4) then
begin
FieldDef.DataType := ftBCD;
FieldDef.Precision := 18;
FieldDef.Size := -Data^.sqlscale;
end
else
FieldDef.DataType := ftFloat;

