none
Error en cláusula UPDATE

    Pregunta

  • Hola a todos:

    Tengo un error en la siguiente consulta, no me acepta correctamente los parámetros marcados en negrita, si en vez de parámetros utilizo su valor 'BAJA' ,'ALTA' O 'MEDIA' no da ningún error, solamente lo da al sustituir esos strings por un parámetro. Utilizo los parámetros con el fin de poder traducir esos valores a otros idiomas.

    He probado de varias maneras y me da error: Error al actualizar la consulta [Token line member = 1, Token line offset= 113, Token in error = = ]

    cmd.CommandText = "UPDATE VariosAuditoria Set " &
                                    "ImpPorc1 = CASE WHEN PorcTot1 = 0 Then '-' WHEN PorcTot1 * 100 < @baja Then @ImpBAJA WHEN PorcTot1 * 100 >= @alta THEN  @ImpALTA Else @ImpMEDIA End, " &
                                    "ImpDesv1 = Case WHEN PorcDesv1 = 0 Then '-' WHEN PorcDesv1 * 100 < @baja THEN @ImpBAJA WHEN PorcDesv1 * 100 >= @alta THEN @ImpALTA Else @ImpMEDIA End, " &
                                    "ImpPorc2 = CASE WHEN PorcTot2 = 0 Then '-' WHEN PorcTot2 * 100 < @baja Then @ImpBAJA WHEN PorcTot2 * 100 >= @alta THEN @ImpALTA Else ImpMEDIA End, " &
                                    "ImpDesv2 = Case WHEN PorcDesv2 = 0 Then '-' WHEN PorcDesv2 * 100 < @baja THEN @ImpBAJA WHEN PorcDesv2 * 100 >= @alta THEN @ImpALTA Else @ImpMEDIA End " &
                                    "WHERE Cod_Empresa = @empresa And Grupo IN ('DISPORD','FONEXIS','FONTES','REALIZ','EXISTENC','PASCOR','ACIDTEST','COEACTEST')"

     With cmd.Parameters
                        .Add(Configuracion.CreateParameter(cmd, "@baja", AccesoDatosConsultas.DiferBaja))
                        .Add(Configuracion.CreateParameter(cmd, "@ImpBAJA", VarGlobal.strBAJA))
                        .Add(Configuracion.CreateParameter(cmd, "@alta", AccesoDatosConsultas.DiferAlta))
                        .Add(Configuracion.CreateParameter(cmd, "@ImpALTA", VarGlobal.strALTA))
                        .Add(Configuracion.CreateParameter(cmd, "@ImpMEDIA", VarGlobal.strMedia))
                        .Add(Configuracion.CreateParameter(cmd, "@empresa", VarGlobal.StrCodEmpresa))
                    End With

     

    Un cordial saludo a todos. 

    Gemma



    miércoles, 17 de abril de 2019 9:37

Respuestas

  • Hola:
    Lo de las comas es que estaba copiado de la primera respuesta
    ¿La consulta siguiente te funcionaria?

    cmd.CommandText = "UPDATE VariosAuditoria Set
    ImpPorc1 =
    Case When PorcTot1 = 0 Then '-'
    WHEN PorcTot1 * 100 < @baja Then 'BAJA'
    WHEN PorcTot1 * 100 >= @alta THEN @ImpALTA
    Else @ImpMEDIA
    End
    WHERE Cod_Empresa = @empresa And Grupo IN ('DISPORD','FONEXIS','FONTES','REALIZ','EXISTENC','PASCOR','ACIDTEST','COEACTEST')"

    With cmd.Parameters
        .Add(Configuracion.CreateParameter(cmd, "@baja", AccesoDatosConsultas.DiferBaja))
        .Add(Configuracion.CreateParameter(cmd, "@alta", AccesoDatosConsultas.DiferAlta))
        .Add(Configuracion.CreateParameter(cmd, "@ImpALTA", VarGlobal.strALTA))
        .Add(Configuracion.CreateParameter(cmd, "@ImpMEDIA", VarGlobal.strMedia))
        .Add(Configuracion.CreateParameter(cmd, "@empresa", VarGlobal.StrCodEmpresa))
    End With

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta gemma_campillo jueves, 18 de abril de 2019 14:28
    jueves, 18 de abril de 2019 12:55

Todas las respuestas

  • Por que pones ese & ? por que no encierras toda al consulta en solo dos comillas dobles ?

    cmd.CommandText = "UPDATE VariosAuditoria Set 
                                     ImpPorc1 = CASE WHEN PorcTot1 = 0 Then '-' WHEN PorcTot1 * 100 < @baja Then @ImpBAJA WHEN PorcTot1 * 100 >= @alta THEN   @ImpALTA Else @ImpMEDIA End
                                     ImpDesv1 = Case WHEN PorcDesv1 = 0 Then '-' WHEN PorcDesv1 * 100 < @baja THEN @ImpBAJA WHEN PorcDesv1 * 100 >= @alta THEN @ImpALTA Else @ImpMEDIA End 
                                     ImpPorc2 = CASE WHEN PorcTot2 = 0 Then '-' WHEN PorcTot2 * 100 < @baja Then @ImpBAJA WHEN PorcTot2 * 100 >= @alta THEN @ImpALTA Else ImpMEDIA End 
                                     ImpDesv2 = Case WHEN PorcDesv2 = 0 Then '-' WHEN PorcDesv2 * 100 < @baja THEN @ImpBAJA WHEN PorcDesv2 * 100 >= @alta THEN @ImpALTA Else @ImpMEDIA End 
                                     WHERE Cod_Empresa = @empresa And Grupo IN (DISPORD,FONEXIS,FONTES,REALIZ,EXISTENC,PASCOR,ACIDTEST,COEACTEST)"


    • Editado AlejandroMst miércoles, 17 de abril de 2019 13:39
    • Propuesto como respuesta Carlos_Ruiz_M miércoles, 17 de abril de 2019 14:17
    miércoles, 17 de abril de 2019 13:38
  • Hola Alejandro:

    Lo de las comillas es un vicio adquirido y que realmente nos hace nada o bien, servía, para enlazar una línea con otra, pero realmente no hace nada,.

    Por otro lado, continua dando error, creo que a esos parámetros se les tendría que anteponer algo, no tiene sentido si lo estoy pasando un valor correcto, he pasado por cada línea de los parámetros y dan su valor correctamente, es en la cláusula UPDATE donde tiene que estar el error.

    Bueno, seguimos.

    Gracias y un cordial saludo.

    Gemma


    miércoles, 17 de abril de 2019 14:18
  • Hola:
    La sentencia es
    UPDATE nombre de tabla SET campo1=@Campo1, campo2=@Campo2, campo3=@Campo3 WHERE id=@Id

    Si la consulta la visualizas de esta forma veras entre parentesis (FALTA COMA PARA SEPARAR LOS CAMPOS)

    "UPDATE VariosAuditoria Set ImpPorc1 =

    CASE WHEN PorcTot1 = 0 Then '-'
    WHEN PorcTot1 * 100 < @baja Then @ImpBAJA
    WHEN PorcTot1 * 100 >= @alta THEN @ImpALTA
    Else @ImpMEDIA
    End (FALTA COMA PARA SEPARAR LOS CAMPOS)
    ImpDesv1 =
    Case WHEN PorcDesv1 = 0 Then '-'
    WHEN PorcDesv1 * 100 < @baja THEN @ImpBAJA
    WHEN PorcDesv1 * 100 >= @alta THEN @ImpALTA
    Else @ImpMEDIA
    End (FALTA COMA PARA SEPARAR LOS CAMPOS)
    ImpPorc2 =
    CASE WHEN PorcTot2 = 0 Then '-'
    WHEN PorcTot2 * 100 < @baja Then @ImpBAJA
    WHEN PorcTot2 * 100 >= @alta THEN @ImpALTA
    Else ImpMEDIA
    End (FALTA COMA PARA SEPARAR LOS CAMPOS)
    ImpDesv2 =
    Case WHEN PorcDesv2 = 0 Then '-'
    WHEN PorcDesv2 * 100 < @baja THEN @ImpBAJA
    WHEN PorcDesv2 * 100 >= @alta THEN @ImpALTA
    Else @ImpMEDIA
    End
    WHERE Cod_Empresa = @empresa And Grupo IN (DISPORD,FONEXIS,FONTES,REALIZ,EXISTENC,PASCOR,ACIDTEST,COEACTEST)"

    P.D.
    Pruebala en el SSMS y veras los errores de la consulta

    Un saludo dsde Bilbo
    Carlos

    miércoles, 17 de abril de 2019 21:08
  • Hola Carlos, gracias querido amigo por responder.

    Las comas ya las lleva para separar los campos "End,

    Si te fijas en mi consulta la de la parte de arriba del todo, ya lleva incorporados los separadores ",". Para no liar el tema, la cosa es que si le pongo en vez del parámetro @ImpBAJA el valor 'BAJA' lo coge perfectamente y no da ningún error, solo lo da si le sustituyo el valor string 'BAJA' por el maldito parámetro.

    No se si al meter el parámetro en ese tipo de update con CASE, WHEN, ETX., debería contemplar alguna cosa más.

    Bueno, un abrazo siempre y muchas gracias.

    Gemma


    jueves, 18 de abril de 2019 10:36
  • Hola:
    Lo de las comas es que estaba copiado de la primera respuesta
    ¿La consulta siguiente te funcionaria?

    cmd.CommandText = "UPDATE VariosAuditoria Set
    ImpPorc1 =
    Case When PorcTot1 = 0 Then '-'
    WHEN PorcTot1 * 100 < @baja Then 'BAJA'
    WHEN PorcTot1 * 100 >= @alta THEN @ImpALTA
    Else @ImpMEDIA
    End
    WHERE Cod_Empresa = @empresa And Grupo IN ('DISPORD','FONEXIS','FONTES','REALIZ','EXISTENC','PASCOR','ACIDTEST','COEACTEST')"

    With cmd.Parameters
        .Add(Configuracion.CreateParameter(cmd, "@baja", AccesoDatosConsultas.DiferBaja))
        .Add(Configuracion.CreateParameter(cmd, "@alta", AccesoDatosConsultas.DiferAlta))
        .Add(Configuracion.CreateParameter(cmd, "@ImpALTA", VarGlobal.strALTA))
        .Add(Configuracion.CreateParameter(cmd, "@ImpMEDIA", VarGlobal.strMedia))
        .Add(Configuracion.CreateParameter(cmd, "@empresa", VarGlobal.StrCodEmpresa))
    End With

    Un saludo desde Bilbo
    Carlos

    • Marcado como respuesta gemma_campillo jueves, 18 de abril de 2019 14:28
    jueves, 18 de abril de 2019 12:55
  • Hola Carlos.

    Tampoco va, ahora si dejo tu consulta sin utilizar los parámetros si que funciona, a la que le cambio un solo parámetro ya no.

    cmd.CommandText = "UPDATE VariosAuditoria Set 
                                        ImpPorc1 = 
                                        Case When PorcTot1 = 0 Then '-' 
                                        WHEN PorcTot1 * 100 < @baja Then 'BAJA'
                                        WHEN PorcTot1 * 100 >= @alta THEN 'ALTA'
                                        Else 'MEDIA'
                                        End
                                        WHERE Cod_Empresa = @empresa And Grupo IN ('DISPORD','FONEXIS','FONTES','REALIZ','EXISTENC','PASCOR','ACIDTEST','COEACTEST')"

    Voy a dejarla o a intentar realizarla de otra manera, voy a ir probando cosas. Yal como la has puesto tu ahora es como la tenía antes, el problema se da al usar idiomas, que le tengo que para el valor del idioma mediante una variable.

    No te preocupes, de una manera u otra la saco.

    Cierro la pregunta y te agradezco tu interés como siempre querido amigo.

    Un abrazo.

    Gemma


    jueves, 18 de abril de 2019 14:28