Hola Marcos, con esta vista (probada en Firebird 1.5) podrás ubicar rápidamente todos los campos que habrán de ser cambiados:
Código SQL
[-]CREATE VIEW VWCAMPOS(
TABLA,
CAMPO,
POSICION,
DESCRIPCION,
TIPO,
TAMAO,
DECIMALES,
PERMITENULOS)
AS
Select
RF.RDB$Relation_Name,
RF.RDB$Field_Name,
RF.RDB$Field_Position,
RF.RDB$Description,
Case F.RDB$Field_Type
When 261 Then
Case F.RDB$Field_Sub_Type
When 1 Then 'Texto BLOb'
Else 'BLOb'
End
When 14 Then 'Texto Char'
When 40 Then 'Texto CString'
When 11 Then 'Numérico D_Float'
When 27 Then 'Numérico Double'
When 10 Then 'Numérico Float'
When 16 Then
Case F.RDB$Field_Sub_Type
When 1 Then 'Numérico'
When 2 Then 'Decimal'
Else 'Entero Int64'
End
When 8 Then
Case F.RDB$Field_Sub_Type
When 1 Then 'Numérico'
When 2 Then 'Decimal'
Else 'Entero Integer'
End
When 9 Then 'Quad'
When 7 Then
Case F.RDB$Field_Sub_Type
When 1 Then 'Numérico'
When 2 Then 'Decimal'
Else 'Entero SmallInt'
End
When 12 Then 'Fecha Date'
When 13 Then 'Hora Time'
When 35 Then 'Fecha y hora TimeStamp'
When 37 Then 'Texto Varchar'
End,
Case F.RDB$Field_Type
When 14 Then F.RDB$Field_Length
When 11 Then F.RDB$Field_Precision
When 27 Then F.RDB$Field_Precision
When 10 Then F.RDB$Field_Precision
When 16 Then
Case F.RDB$Field_Sub_Type
When 1 Then F.RDB$Field_Precision
When 2 Then F.RDB$Field_Precision
End
When 8 Then
Case F.RDB$Field_Sub_Type
When 1 Then F.RDB$Field_Precision
When 2 Then F.RDB$Field_Precision
End
When 7 Then
Case F.RDB$Field_Sub_Type
When 1 Then F.RDB$Field_Precision
When 2 Then F.RDB$Field_Precision
End
When 37 Then F.RDB$Character_Length
End,
Case F.RDB$Field_Scale
When 0 Then Null
Else Cast (F.RDB$Field_Scale * -1 As SmallInt)
End,
Case RF.RDB$Null_Flag
When 1 Then 'No'
Else 'Si'
End
From RDB$Relation_Fields RF
Left Join RDB$Fields F On RF.RDB$Field_Source = F.RDB$Field_Name
Where RF.RDB$System_Flag = 0
;
Si no resulta ser una cantidad excesiva de campos, creo que cambiarlos manualmente en IBExpert, como ya lo has hecho con uno de ellos, no es mala alternativa. De lo contrario, podrías implementar una macroinstrucción (
script) que lleve a cabo estos cambios dentro de un ciclo (puede que sea necesario tratar con las tablas del sistema).
En cuanto a la propiedad Size de los objetos campos en Delphi, efectivamente, los que son de tipo (DataType) ftBCD y ftFMTBCD (este último generalmente corresponde al tipo Numeric de Firebird) usan dicha propiedad para indicar el número de dígitos a la derecha del separador decimal.
Espero que no te sea difícil solucionarlo, pero estaré pendiente de ello como los demás.
Un abrazo.
Al.