Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MS SQL Server (https://www.clubdelphi.com/foros/forumdisplay.php?f=23)
-   -   Error en procedimiento almacenado (https://www.clubdelphi.com/foros/showthread.php?t=63423)

Tauro78 12-02-2009 20:40:43

Error en procedimiento almacenado
 
hola he estado tratando de hacer un SP que verifique la existencia de un nombre y si encuentra una coincideincia me devuelva el nombre, si no lo encuentra me devuelve vacio, o sea @sp_nombre es entrada al SP y luego si ya existe ese nombre, me devuelve ese nombre en @sp_npombre como salida, si no existe ese nombre me devuelve @sp_npombre vacio.
Pero me da el siguiente error al correr la aplicacion.

ALTERPROCEDURE [dbo].[SP_EXISTE_EMPRESA]
-- Add the parameters for the stored procedure here
@SP_NOMBRE NVARCHAR(50) OUTPUT
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
SELECT NOMBRE FROM EMPRESAS
WHERE NOMBRE = @SP_NOMBRE
RETURN @SP_NOMBRE
-- Insert statements for procedure here
END

Database Server Error: SQL State: 4200, Server ErrorCode: 201
Procedure 'SP_EXISTE_EMPRESA' expects parameter '@SP_NOMBRE', wich was not supplied.

ContraVeneno 12-02-2009 22:07:39

Código SQL [-]
Exec SP_Existe_Empresa 'Lonchería juanito'

¿esa instrucción te da error?

Tauro78 13-02-2009 11:17:57

Creo que lo que me da error es que al parecer cuando corro el programa, no se recibe el parametro esperado, lo que hago en el SP es volcar el valor del parametro con la instruccion RETURN @SP_NOMBRE (creo que return actua como INTO en firebird) y pasarlo a Delphi, pero no me doy cuenta que estoy haciendo mal cuando paso o recibo el parametro.

jcarteagaf 13-02-2009 11:39:22

En realidad RETURN en un Stored Procedure devuelve un valor entero para indicar el resultado de la ejecución (mas o menos como los .BAT del D.O.S.), si no se coloca devuelve 0.

Si lo que deseas es devolver el nombre de la empresa en una variable deberias usar algo asi:

Código SQL [-]
ALTER PROCEDURE [dbo][SP_EXISTE_EMPRESA]
@SP_NOMBRE NVARCHAR(50) OUTPUT
AS
BEGIN 
   SET NOCOUNT ON;
   SELECT @SP_NOMBRE = NOMBRE 
   FROM EMPRESAS
   WHERE NOMBRE = @SP_NOMBRE 
   IF @SP_NOMBRE IS NULL     -- Si no existe la variable tendra Valor NULL
      SET @SP_NOMBRE=''   -- Entonces le asignamos un string vacio
END

Ahora bien en delphi tu llamada seria asi

Código Delphi [-]
spExisteEmpresa.parameters.parambyname('@SP_NOMBRE').value := 'Mi_Empresa';
spExisteEmpresa.ExecProc;
if spExisteEmpresa.parameters.parambyname('@SP_NOMBRE').value = '' then
  ShowMessage('No existe');
else
  ShowMessage('Existe');

Lo anterior usando el TADOStoredProc

Espero que te ayude. Saludos

Tauro78 13-02-2009 17:53:00

gracias por la info, ya no me arroja más ese error, sin embargo ahora me tira
el siguiente error: 'SQLSPExiste_Empresa: Cursor not returned from query'.

A que se debe este error, creo que puede ser por el tema de la bidireccion de los controles dbExpress, tal vez me esta faltando algun componente intermedio, desde ya gracias.


La franja horaria es GMT +2. Ahora son las 02:55:16.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi