Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-12-2015
MarinaLR MarinaLR is offline
Registrado
 
Registrado: nov 2015
Posts: 1
Poder: 0
MarinaLR Va por buen camino
Could not convert variant of type (olestr) into type (boolean) al ejecutar sp

Hola a todos.
Trabajo con delphi XE2 y datasnap, sql server 2008.
Tengo un procedimiento almacenado que funciona perfectamente si lo ejecuto desde la base de datos, pero me da el error "Could not convert variant of type (olestr) into type (boolean)" cuando lo ejecuto desde delphi. Ya verifiqué los parámetros que le estoy pasando y están correctos, también eliminé y volví a configurar los componentes del lado cliente y del lado servidor, y sigue sin funcionar.
La aplicación servidor tiene los componentes Datasetprovider y SQLDataset (también lo probé con SQLStoredProc).
La aplicación cliente tiene el componente clientdataset.

Aquí pego el código del procedimiento:
Código SQL [-]
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE dbo.pSJAcumulaPromediaImportes
    @pCodigEmple VARCHAR(10),
    @pFechaIngre DATE,
    @pFechaLiqui DATE,
    @pNumerLiqui INT,
    @pCantiMeses INT,
    @pAcumuProme VARCHAR(3),    -- ACU = acumulado, PRO = promedio
    @pImporDevol VARCHAR(3),    -- SRE = suj.ret., SRT = suj.ret.c/tope, HEX = hab.exen., RET = reten., CON = contrib., SFA = salar.fliar.
    @pDecimConfi TINYINT,
    @pImporResul DECIMAL(15,4) OUTPUT
AS
BEGIN

  SET NOCOUNT ON;

  DECLARE @pFechaResta DATE;
  DECLARE @pFechaInici DATE;
  DECLARE @vMesesDesco INT;
  DECLARE @vImporCalcu DECIMAL(15,4);

  SET @vMesesDesco = @pCantiMeses - 1  -- debe tomar un mes menos porque el de liquidación también está incluido
  SET @vImporCalcu = 0 
  SET @pFechaResta = DATEADD(mm, @vMesesDesco * -1, @pFechaLiqui)         -- obtiene los meses para atrás
  SET @pFechaInici = DATEADD(MONTH, DATEDIFF(MONTH, 0, @pFechaResta), 0)  -- obtiene el primer día del mes de esa fecha
  
  IF UPPER(@pImporDevol) = 'SRE'  -- Sujeto a retenciones
  BEGIN
    SELECT @vImporCalcu = SUM(dbo.tSJTotalLiqui.ImporLiquiSujetReten) FROM dbo.tSJTotalLiqui
                            WHERE dbo.tSJTotalLiqui.FechaLiqui >= @pFechaInici 
                              AND dbo.tSJTotalLiqui.FechaLiqui <= @pFechaLiqui
                              AND dbo.tSJTotalLiqui.NumerLiqui <> @pNumerLiqui
                              AND dbo.tSJTotalLiqui.CodigEmple = @pCodigEmple     
  END

  IF UPPER(@pImporDevol) = 'SRT'  -- Sujeto a retenciones con tope
  BEGIN
    SELECT @vImporCalcu = SUM(dbo.tSJTotalLiqui.AcumuSueld + dbo.tSJTotalLiqui.AcumuVacac + dbo.tSJTotalLiqui.AcumuSac) 
                            FROM dbo.tSJTotalLiqui
                              WHERE dbo.tSJTotalLiqui.FechaLiqui >= @pFechaInici 
                                AND dbo.tSJTotalLiqui.FechaLiqui <= @pFechaLiqui
                                AND dbo.tSJTotalLiqui.NumerLiqui <> @pNumerLiqui
                                AND dbo.tSJTotalLiqui.CodigEmple = @pCodigEmple     
  END

  IF UPPER(@pImporDevol) = 'HEX'  -- Haberes exentos
  BEGIN
    SELECT @vImporCalcu = SUM(dbo.tSJTotalLiqui.ImporLiquiExent) FROM dbo.tSJTotalLiqui
                            WHERE dbo.tSJTotalLiqui.FechaLiqui >= @pFechaInici 
                              AND dbo.tSJTotalLiqui.FechaLiqui <= @pFechaLiqui
                              AND dbo.tSJTotalLiqui.NumerLiqui <> @pNumerLiqui
                              AND dbo.tSJTotalLiqui.CodigEmple = @pCodigEmple     
  END

  IF UPPER(@pImporDevol) = 'RET'  -- Retenciones
  BEGIN
    SELECT @vImporCalcu = SUM(dbo.tSJTotalLiqui.ImporLiquiReten) FROM dbo.tSJTotalLiqui
                            WHERE dbo.tSJTotalLiqui.FechaLiqui >= @pFechaInici 
                              AND dbo.tSJTotalLiqui.FechaLiqui <= @pFechaLiqui
                              AND dbo.tSJTotalLiqui.NumerLiqui <> @pNumerLiqui
                              AND dbo.tSJTotalLiqui.CodigEmple = @pCodigEmple     
  END

  IF UPPER(@pImporDevol) = 'CON'  -- Contribuciones
  BEGIN
    SELECT @vImporCalcu = SUM(dbo.tSJTotalLiqui.ImporLiquiContr) FROM dbo.tSJTotalLiqui
                            WHERE dbo.tSJTotalLiqui.FechaLiqui >= @pFechaInici 
                              AND dbo.tSJTotalLiqui.FechaLiqui <= @pFechaLiqui
                              AND dbo.tSJTotalLiqui.NumerLiqui <> @pNumerLiqui
                              AND dbo.tSJTotalLiqui.CodigEmple = @pCodigEmple     
  END

  IF UPPER(@pImporDevol) = 'SFA'  -- Salario familiar
  BEGIN
    SELECT @vImporCalcu = SUM(dbo.tSJTotalLiqui.ImporLiquiSalarFamil) FROM dbo.tSJTotalLiqui
                            WHERE dbo.tSJTotalLiqui.FechaLiqui >= @pFechaInici 
                              AND dbo.tSJTotalLiqui.FechaLiqui <= @pFechaLiqui
                              AND dbo.tSJTotalLiqui.NumerLiqui <> @pNumerLiqui
                              AND dbo.tSJTotalLiqui.CodigEmple = @pCodigEmple     
  END
  
  IF @vImporCalcu is null
    SET @vImporCalcu = 0
    
  IF UPPER(@pAcumuProme) = 'PRO'    -- Promedio   
  BEGIN
    IF @pFechaIngre > @pFechaInici  -- si el empleado ingresó dentro del período de evaluación, debo promediar solo por esa cant.de meses
    BEGIN
      SET @pCantiMeses = @pCantiMeses - DATEDIFF(mm, @pFechaInici, @pFechaIngre)      
    END
    SET @vImporCalcu = ROUND(@vImporCalcu / @pCantiMeses, @pDecimConfi)     -- calculo el promedio mensual, sirve para cualquiera de los acumulados, redondeado a la cantidad de decimales configurada para el módulo
  END
  ELSE
    SET @vImporCalcu = ROUND(@vImporCalcu, @pDecimConfi)     -- redondeo a la cantidad de decimales configurada para el módulo
  
  SET @pImporResul = @vImporCalcu  
END

Aquí pego el código de donde lo ejecuto en delphi
Código Delphi [-]
    with vdSJCalcuLiqui.ClientDataSetProceAcumuPromeImpor do
    begin
        Params.Clear;
        Params.CreateParam(ftInteger, '@RETURN_VALUE', ptResult).Value;

        Params.CreateParam(ftString, '@pCodigEmple', ptInput).AsString := '0001';
        Params.CreateParam(ftDate, '@pFechaIngre', ptInput).AsDate := StrToDate('10/01/2013');
        Params.CreateParam(ftDate, '@pFechaLiqui', ptInput).AsDate := StrToDate('14/06/2013');
        Params.CreateParam(ftInteger, '@pNumerLiqui', ptInput).AsInteger := 1;
        Params.CreateParam(ftInteger, '@pCantiMeses', ptInput).AsInteger := 2;     
        Params.CreateParam(ftInteger, '@pDecimConfi', ptInput).AsInteger := 2;

        Params.CreateParam(ftFloat, '@pImporResul', ptOutput).Value := 0;
        Params.CreateParam(ftString, '@pAcumuProme', ptInput).AsString := 'ACU';
        Params.CreateParam(ftString, '@pImporDevol', ptInput).AsString := 'SRE';

        // ejecuta el procedimiento
        Execute;
El error surge cuando hace el Execute.
La verdad hace bastante que estoy renegando con esto y no encontré nada en internet que me ayude a solucionarlo. Ya hice varios cambios en el código fuente y siempre me sigue dando el mismo error. Tampoco encontré nada parecido buscando aquí dentro de los foros.
El error me desconcierta porque no estoy utilizando nada que sea del tipo boolean.
Cualquier ayuda, guía u orientación creo que me va a servir.
Desde ya muchas gracias.

Última edición por ecfisa fecha: 22-12-2015 a las 17:45:58. Razón: Etiquetas [sql][/sql], [delphi][/delphi]
Responder Con Cita
  #2  
Antiguo 22-12-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.837
Poder: 27
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola MarinaLR , bienvenida a Club Delphi

Por favor, cuando incluyas código en tus mensajes, usa etiquetas para darle mas legibilidad:

(ya las agregué en tu mensaje)

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Type of expression must be BOOLEAN chuli17 Lazarus, FreePascal, Kylix, etc. 7 25-07-2013 00:21:55
Problema: type variant en campo a calcular Nicolas_2011 Varios 9 26-06-2012 18:16:37
Could not convert variant of type (Null) into type (Integer) Alejo15x Varios 2 30-11-2010 18:35:50
Sql que no retorna datos me da error:invalid variant type conversion bezaig SQL 6 17-03-2010 09:58:53
Statement expected, but expression of type 'Boolean' found Shikanda Conexión con bases de datos 7 06-09-2007 14:26:19


La franja horaria es GMT +2. Ahora son las 02:11:30.


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