Ver Mensaje Individual
  #2  
Antiguo 27-10-2006
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Reputación: 22
lbuelvas Va por buen camino
Hola foro,

bueno, cuando se necesita conocer el el valor de una llave generada por el motor de base de datos por medio de un generador valga la redundancia (ahora se les dice secuencia a partir de la version 2 de firebrid), deberias utilizar la propiedad GeneratorField de los TIBDataset.

Esta propiedad te permite indicarle al Dataset desde cual generador de la base de datos va a traer el nuevo valor para identificar en tu caso a los estudiantes.

Existen 3 formas de generar el valor:

1. OnNewrecord. Esta opción incrementa el generador en 1 y lo trae hacia tu dataset cuando hagas una operacion Insert. La desventaja es que si das una operacion Cancel, pierdes el uso del numero y te quedan 'huecos' en tu secuencia.

2. On Post: Esta opción incrementa el generador en 1 pero solamente cuando cuando haces la grabacion del registro (operacion post). Es la que utilizo en situaciones como la que tu planteas.

3. On Server: llevo mas de 6 años trabajando con los IBX y no se la verdad que es lo que hace, mis disculpas.

Ese es el mecanismo de tener 'en vivo' el identificador dentro de la aplicacion.

De otro lado tambien coloco un trigger tipo Before Insert por si se hace ingreso de informacion por otro via diferente al formulario, quedaria mas o menos asi:

Código SQL [-]
CREATE GENERATOR GEN_ALUMNO;

SET TERM ^ ;


CREATE TRIGGER ALUMNO_BI0 FOR ALUMNO
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  /* Colocar el identificador */
  if (new.codigo is null) then
    new.codigo = gen_id(gen_alumno, 1);
end
^

SET TERM ; ^

Si utilizas la propiedad GeneratorField es el aplicativo el que se encarga de construir el identificador y no el trigger.

Muchos exitos,

Luis F. Buelvas T.
__________________
Luis Fernando Buelvas T.
Responder Con Cita