Ver Mensaje Individual
  #14  
Antiguo 10-09-2003
buitrago buitrago is offline
Miembro
 
Registrado: sep 2003
Posts: 156
Reputación: 21
buitrago Va por buen camino
Hey....!!!!!!!

Esto es lo que yo hago.....y me funcion perfecto. Si es para el autoincremental.

Bien ahi va:

Creo mi Generator, nombrarlo Mi_Generador.
Creo un Procedure Almacenado que se nombrará MI_Procedure_Generador
Este es su código

Create procedure MI_Procedure_Generador
returns (NUEVO integer)
As
Begin
NUEVO = GEN_ID(MI_Procedure_Generador,1);
SUSPEND
END

Y claro, tengo una tabla que le nombraremos MI_TABLA con un campo de llame primerria que le nombraremos MI_CODIGO

Voy bien?

En Delphi ahora:

Tengo un IBTable con sus campos creados.
Les creo todos sus TFields pero atención!!!!!!!, al Field del Código (MI_TABLAMI_CODIGO) cambiale la propieda required y colocala en False.

Creas un TIBStoredProc que apunte a el Procedimiento de Interbase o FireBird. A este TIBStoredProc ponle asociado otro TIBTransaction que al de la Tabla.
Además, sácale su Parametro a través de la propiedad Params
Debe decirte que es de tipo OutPut y que ademas es Integer

Ahora en el evento OnBeforePost de la Tabla, al final, despues que has visto todos los chequeos que puedan hacer explotar la grabación, esccribe esto:

if MI_TABLA.State in [dsInsert] then Begin
Aqui pones la Transaccion del Procedimiento en StartTransaction;
Le das Prepare;
desues ExecProc;
Le das Commit a la Transaccion
y ahora dices :
MI_TABLAMI_CODIGO.Value = ParamByName('NUEVO').AsInteger;
End; // del begin

Espero que sirva, esto lo uso mucho y pone casi la probabilidad que se ejecute el Generador y no se grabe a 0, ay que como ven es hecho en el OnBeforePost pero justo antes de darle el mando a Interbase.

Si amarraste todo bien, viva el consecutivo!!!!!!!!!!!!!!!!!!!

espero que sirva de ayuda.

Fernando Buitrago

Nota: Tengo los dedos cansaos', jejejejejej
Responder Con Cita