FIBPlus también lo soporta en su tiempo me acuerdo haberlo implementado, pero, luego use generadores, como comentan lineas arriba.
Implementación: mediante un procedimiento obtener el valor del generador en el evento OnBeforePost y luego trabajar con dicho valor según lo requerido, cabe recalcar que uso ClientDataSet en la capa de Entidad y bueno en la Logica uso solo referencias.
El procedimiento para obtener el valor del generador es:
Código SQL
[-]
create or alter procedure Proc_Get_Sequence (
P_SEQ_NAME d_sys_field_name )
returns (
ID integer )
as
begin
execute statement
'select next value for ' || :P_SEQ_NAME || ' from rdb$database'
into :ID;
suspend;
end;
O de forma general:
Código SQL
[-]
create or alter procedure Proc_Get_Sequence (
P_TABLE type of d_sys_relation_name )
returns (
ID integer )
as
declare variable vField d_sys_field_name;
begin
P_TABLE = upper(P_TABLE);
select rdb$field_name from rdb$relation_fields
where
rdb$relation_name = :P_TABLE and
rdb$field_id = 0
into :vField;
if (vField is not null) then
begin
vField = 'S_' || vField;
if ( exists (
select rdb$generator_name from rdb$generators
where rdb$generator_name = :vField ) ) then
execute statement
'select next value for ' || :vField || ' from rdb$database'
into :ID;
end
if (ID is null) then
ID = 0;
suspend;
end;
Donde:
P_TABLE: Es es nombre de la tabla
d_sys_relation_name: dominio tipo varchar(31)
d_sys_field_name: dominio tipo varchar(31)
El nombre del generador como se puede observar es
"S_" || "El nombre del campo", en mi caso siempre es el que se define primero en la tabla (rdb$field_id = 0).
Bueno y otro requerimiento es que exista el generador, sino el procedimiento devolverá cero.
Uso Firebird 2.5, pero creo que también esta disponible para la versión 2.1