Вот мой вариант (вообще а не для 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;

Ответить