Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ERROR: SQLStoredProc: Cursor not returned from Query. (https://www.clubdelphi.com/foros/showthread.php?t=83017)

Jere_84 03-05-2013 00:58:03

ERROR: SQLStoredProc: Cursor not returned from Query.
 
Tengo un mi BD MS SQL Server un SP lo probé desde la BD y anda perfecto!. El problema surge cuando lo intento asociar al componente TSQLStoredProc y me muestra el sig. mensaje en tiempo de diseño al ponerlo Active=True o tmb cuando intento agregar los campos persistentes, los parámetros los agrega y le indico bien el tipo de dato de c/u y cual es de entrada y cual de salida.. Pero no hay forma sigue pareciendo el siguiente mensaje de error

Cita:

SQLStoredProc: Cursor not returned from Query.
Alguien sabe a que puede estar ocurriendo lo busque en otros foros pero nadie daba una solución concreta a este error.

saludos.

Casimiro Noteví 03-05-2013 11:06:47

Cita:

Empezado por Jere_84 (Mensaje 459745)
Alguien sabe a que puede estar ocurriendo lo busque en otros foros pero nadie daba una solución concreta a este error.

Obviamente, si no pones el código qué quieres que te digamos ;)

Jere_84 03-05-2013 22:18:12

Es que no hay código mas que el procedimiento almacenado y el componente que estoy enlazándolo... el Procedimiento almacenado compilo bien y se guardo en la bd ahora desde mi aplicación servidor lo llamo con el componente TSQLStoredProc al poner active en true en tiempo de diseño:

Cita:

SQLStoredProc: Cursor not returned from Query.
SP:

Código SQL [-]
CREATE PROCEDURE [dbo].[pSJFondoDesem]
  @pCodigEmple VARCHAR(10),
  @pDFecha DATE,
  @pHFecha DATE,
  @pFechaIngre DATE OUTPUT,
  @pAntig INT OUTPUT,
  @pNumerIeric VARCHAR(10) OUTPUT,
  @pPorceFondoDesem1 DECIMAL(15,4) OUTPUT,
  @pPorceFondoDesem2 DECIMAL(15,4) OUTPUT,
  @pFormaPagoFondoDesem CHAR(1) OUTPUT,  
  @pImporFinal DECIMAL(15,4) OUTPUT,
  @CuentaFondoDesem VARCHAR(12) OUTPUT,
  @LibreFondoDesem VARCHAR(10) OUTPUT,
  @Calle VARCHAR(60) OUTPUT,
  @Numer VARCHAR(5) OUTPUT,
  @CodigCiuda VARCHAR(10) OUTPUT,
  @DescrCiuda VARCHAR(60) OUTPUT
  
AS
BEGIN
  DECLARE @vNumerLiqui INT;
  DECLARE @vFechaEgres DATETIME;
  DECLARE @vFechaIngre DATETIME;

  SET NOCOUNT ON   
  
  SELECT @vFechaEgres = tSJEmple.FechaEgres
  FROM tSJEmple 
  WHERE CodigEmple = @pCodigEmple
  AND MONTH(FechaEgres) BETWEEN MONTH(@pDFecha) AND MONTH(@pHFecha)
  AND YEAR(FechaEgres) BETWEEN YEAR(@pDFecha) AND YEAR(@pHFecha)  
  
  SELECT @pNumerIeric = tKiParam.NumerIeric, 
         @pPorceFondoDesem1 = tKiParam.PorceFondoDesem1, 
         @pPorceFondoDesem2 = tKiParam.PorceFondoDesem2, 
         @pFormaPagoFondoDesem = tKiParam.FormaPagoFondoDesem
  FROM tKiParam       
  
  IF (@vFechaEgres IS NOT NULL) AND (@pFormaPagoFondoDesem = 'R')
    RETURN 1;
  ELSE
  BEGIN
    SELECT @pFechaIngre = FechaIngre
    FROM tSJEmple
    WHERE CodigEmple = @pCodigEmple 
    
    SELECT @pAntig = DATEDIFF( year, @pFechaIngre, @pHFecha) 
  
    SELECT @vNumerLiqui = MAX(NumerLiqui)
    FROM tSJTotalLiqui
    WHERE MONTH(FechaLiqui) BETWEEN MONTH(@pDFecha) AND MONTH(@pHFecha)
    AND YEAR(FechaLiqui) BETWEEN YEAR(@pDFecha) AND YEAR(@pHFecha)
    AND CodigEmple = @pCodigEmple
    AND (CuentFondoDesem <> '')  
  
    SELECT @CuentaFondoDesem = CuentFondoDesem, 
           @LibreFondoDesem = LibreFondoDesem, 
           @Calle = Calle, 
         @Numer = Numer, 
       @CodigCiuda = tSJTotalLiqui.CodigCiuda, 
       @DescrCiuda = DescrCiuda
    FROM tSJTotalLiqui
    INNER JOIN  tKiCiuda ON tSJTotalLiqui.CodigCiuda = tKiCiuda.CodigCiuda
    WHERE MONTH(FechaLiqui) BETWEEN MONTH(@pDFecha) AND MONTH(@pHFecha)
    AND YEAR(FechaLiqui) BETWEEN YEAR(@pDFecha) AND YEAR(@pHFecha)
    AND (CuentFondoDesem <> '')
    AND CodigEmple = @pCodigEmple
    AND NumerLiqui = @vNumerLiqui  
  
    SELECT @vFechaIngre = FechaIngre
    FROM tSJEmple
    WHERE MONTH(FechaIngre) BETWEEN MONTH(@pDFecha) AND MONTH(@pHFecha)
    AND YEAR(FechaIngre) BETWEEN YEAR(@pDFecha) AND YEAR(@pHFecha)
    AND CodigEmple = @pCodigEmple 
  
    IF (@vFechaIngre IS NULL) 
    BEGIN
     SELECT @pImporFinal = 
    CASE Signo
      WHEN '+' THEN ImporFinal
      WHEN '-' THEN ImporFinal * -1        
    END
      FROM tSJDetalLiqui
      WHERE FondoDesem = 'True'
      AND ((TipoConce <> 'PUE') OR (TipoConce <> 'CON'))
      AND MONTH(FechaLiqui) BETWEEN MONTH(@pDFecha) AND MONTH(@pHFecha)
      AND YEAR(FechaLiqui) BETWEEN YEAR(@pDFecha) AND YEAR(@pHFecha)
      AND CodigEmple = @pCodigEmple  
    END
    ELSE
    BEGIN
      SELECT @pImporFinal = 
      CASE Signo
        WHEN '+' THEN ImporFinal
        WHEN '-' THEN ImporFinal * -1        
    END
    FROM tSJDetalLiqui
    WHERE FondoDesem = 'True'
    AND ((TipoConce <> 'PUE') OR (TipoConce <> 'CON'))
    AND MONTH(FechaLiqui) BETWEEN MONTH(@vFechaIngre) AND MONTH(@vFechaIngre)
    AND YEAR(FechaLiqui) BETWEEN YEAR(@pDFecha) AND YEAR(@pHFecha)
    AND CodigEmple = @pCodigEmple
    END
  END  
END

Casimiro Noteví 03-05-2013 22:36:29

¿Y si lo ejecutas desde fuera de tu programa?, supongo que tendrás algún "manager" y ahí podrás ejecutarlo para probar.

TiammatMX 03-05-2013 22:42:13

Pues a mí me ha servido...
 
... llamar a los Stored Procedures con un simple y silvestre TADOQuery..., posiblemente no sea lo más indicado, pero te puedo asegurar que devuelve SIEMPRE resultados aún en las condiciones más complicadas.

Como defecto, tiene el que tarda un poco más en ejecutar. Pero como dije, siempre arroja un resultado, además de ser más "manejable" en el sentido de parámetros, interrogar a los resultados, contar registros, etc...

Jere_84 03-05-2013 22:43:45

Fuera de mi programa anda perfecto, me parece que el problema viene porque el SP tiene parámetro de entrada y salida... de lo voy a cambiar por un cursor porque
me facilitaria que los SELECT realicen estas operaciones para cada uno de los empleados.. digamos como un procedimiento dentro de un FOR me comentaron el tema de 'Cursrores' en sql server que son iguales a el FOR SELECT de Interbase... voy a investigar un poco mas el tema.


La franja horaria es GMT +2. Ahora son las 18:03:13.

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