Es que los generadores de firebird no son campos autoincrementales.
Código:
iCodigo = GEN_ID(AGenerator, 1);
Cada vez que se llame al generador devolverá +1
Aunque también puede ponerse el valor que se quiera:
Código:
iCodigo = GEN_ID(AGenerator, 2);
Eso saltará los números de 2 en dos.
Código:
iCodigo = GEN_ID(AGenerator, 0);
Así no avanza, devuelve el número último generado y no aumenta el contador.