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
|