Hola, este es el código SQL:
Código SQL
[-]
CREATE PROCEDURE INC_CONTADOR ( AUXNUMAPLIC INTEGER, AUXNUMMAX INTEGER ) RETURNS (AUXCORRECTO VARCHAR(1)) AS
DECLARE VARIABLE AUXOPCION VARCHAR(1);
DECLARE VARIABLE AUXCONTADOR INTEGER;
BEGIN
SELECT OPCION FROM PU0000 WHERE ( APLICACION = :AUXNUMAPLIC ) AND ( OPCION = '0' ) INTO :AUXOPCION;
if ( auxopcion IS NULL ) then
INSERT INTO PU0000 ( APLICACION, OPCION, CONTADOR ) VALUES ( :AUXNUMAPLIC, '0', 0 );
UPDATE PU0000 SET CONTADOR = CONTADOR + 1 WHERE ( APLICACION = :AUXNUMAPLIC ) AND ( OPCION = '0' );
SELECT CONTADOR FROM PU0000 WHERE ( APLICACION = :AUXNUMAPLIC ) AND ( OPCION = '0' ) INTO :AUXCONTADOR;
if ( AUXCONTADOR > AUXNUMMAX ) then
BEGIN
AUXCORRECTO = 'N';
UPDATE PU0000 SET CONTADOR = CONTADOR - 1 WHERE ( APLICACION = :AUXNUMAPLIC ) AND ( OPCION = '0' );
END
ELSE
BEGIN
AUXCORRECTO = 'S';
END
END
Y esta es la llamada desde Delphi:
Código Delphi
[-]
With tSQLIncrementarBase Do
Try
Params.ParamByName( 'AUXNUMAPLIC' ).AsInteger := 1;
Params.ParamByName( 'AUXNUMMAX' ).AsInteger := 100;
ExecProc;
Result := ( Params.ParamByName( 'AUXCORRECTO' ).AsString = 'S' );
Except
Result := FALSE;
End;