Código SQL
[-]select A.RDB$FIELD_NAME AS CAMPO, RDB$FIELD_TYPE AS TIPO_DATO
from RDB$RELATION_FIELDS A inner join RDB$FIELDS B on (A.RDB$FIELD_SOURCE = B.RDB$FIELD_NAME)
where (A.RDB$RELATION_NAME = :tabla)
ORDER BY RDB$FIELD_POSITION
y para la llave primaria
Código SQL
[-]
select S.rdb$field_name as CAMPO, (select RDB$FIELD_TYPE
from RDB$RELATION_FIELDS A inner join RDB$FIELDS B on (A.RDB$FIELD_SOURCE = B.RDB$FIELD_NAME)
where (A.RDB$RELATION_NAME = i.rdb$relation_name) and (a.rdb$field_name = s.rdb$field_name)) AS TIPO_DATO
from ((rdb$indices i INNER JOIN rdb$index_segments s ON (i.rdb$unique_flag=1 and i.rdb$relation_name=:tabla and s.rdb$index_name=i.rdb$index_name)) INNER JOIN rdb$relation_constraints A
ON s.rdb$index_name=a.rdb$index_name and rdb$constraint_type = 'PRIMARY KEY')
ORDER BY RDB$FIELD_POSITION