Jump to content


Photo

procedimientos almacenados con Delphi XE2, BDE 5.01, SQL Server 2008 y Win 8


  • Please log in to reply
3 replies to this topic

#1 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 posts
  • LocationDistrito Federal

Posted 06 June 2013 - 09:24 PM

Hola

tengo un problema que aun no entiendo el porque, uso el componente TStoreProc, para ejecutar un procedimiento almacenado que en la BD me funciona perfectamente. no me da errores peor no me retorna el valor esperado, siempre me retorna 0. bueno he probado dos en realidad. 

Ej1:

CREATE PROCEDURE dbo.SYS_GEN_ID (
    @IdContador        TITULOS_40,
    @Incremento        CONTADORES=1,
    @Valor              CONTADORES OUTPUT )
AS
  declare      @CantRegs      int
 
BEGIN

  set @CantRegs = (SELECT COUNT(*) FROM SYS_CONTADORES
  WHERE IDCONTADOR = @IDCONTADOR)
 
  IF @CantRegs > 0 BEGIN  /* si existe el IDCONTADOR */
    SELECT @Valor = VALOR FROM SYS_CONTADORES
    WHERE IDCONTADOR = @IDCONTADOR
   
    SET @Valor = @Valor + @Incremento
   
    UPDATE SYS_CONTADORES
    SET VALOR = @Valor
    WHERE IDCONTADOR = @IDCONTADOR   
   
  END
  ELSE  SET @Valor = 0 
   
END

Ej2:

CREATE PROCEDURE dbo.SYS_VALIDA_PSW(
    @pLog        LOGIN,
    @pPsw        PASSWORD,
    @pEntrar      LOGICO OUTPUT )
AS
BEGIN
  /* Procedimiento para validar la entrada al sistema */
  IF NOT EXISTS (SELECT * FROM SYS_USUARIOS WHERE CLAVE = @pPsw AND LOGIN = @pLog )
    BEGIN
      SET @pEntrar = 0
    END
    ELSE
    BEGIN
      SET @pEntrar = 1
    END
END

En el caso del primero debe ir dando un consecutivo, actualmente debe retornar 2, y me retorna 0. El segundo nunca me da 1.

alguien ha pasado por esto por favor?

gracias
  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 07 June 2013 - 07:19 AM

Lo que puedo ver en la primera sentencia es que obtienes el total de filas que coincidan con un Id de contador, seguramente el id no existe. Podrías mostrarnos como ejecutas la sentencia desde el SQL Manager de SQL Server?


  SET @CantRegs = (SELECT COUNT(*)
                                  FROM SYS_CONTADORES
                                WHERE IDCONTADOR = @IDCONTADOR
                              )



Lo mismo pára el segundo, seguramente tus condiciones no coinciden y por eso retorna siempre 0. Lo que yo acostumbro hacer es probar con determinados valores mis sentencias antes de meterlas al SP, luego ya que las incrusto en mi SP uso esos mismos valores en los parámetros de entrada. La finalidad es verificar que el sp hace exactamenee lo que esperas.


Saludos

  • 0

#3 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 posts
  • LocationDistrito Federal

Posted 07 June 2013 - 11:46 PM

buenas

pero no, los pruebo primero en el EMS, y despues los pongo en Delphi.  mira el contador que esta en 4, con este he hecho las pruebas, ademas un sp, que uso hace mas de 8 años, en otros sistemas que tengo, que sid eseas te envio imagen.

gracias y saludos cordiales

Attached Files


  • 0

#4 JuanPalmaSoft

JuanPalmaSoft

    Advanced Member

  • Miembros
  • PipPipPip
  • 76 posts
  • LocationDistrito Federal

Posted 07 June 2013 - 11:47 PM

olvide este detalle,

en el EMS ejecuto normal el sp, y le defino los parametris de entrada. en este caso, los parametros log y psw, cree estos valores en la DB.

tendra que ver con alguna actualizacion del Delphi que hay que pasar?

gracias y saludos cordiales.
  • 0




IP.Board spam blocked by CleanTalk.