Principales respuestas
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 WithUn cordial saludo a todos.
Gemma
- Editado gemma_campillo miércoles, 17 de abril de 2019 9:40
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
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
-
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
- Editado gemma_campillo miércoles, 17 de abril de 2019 14:19
-
Hola:La sentencia es
UPDATE nombre de tabla SET campo1=@Campo1, campo2=@Campo2, campo3=@Campo3 WHERE id=@IdSi 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 consultaUn saludo dsde Bilbo
Carlos- Propuesto como respuesta Javi Fernández F jueves, 18 de abril de 2019 3:30
-
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
- Editado gemma_campillo jueves, 18 de abril de 2019 10:39
-
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
-
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
- Editado gemma_campillo jueves, 18 de abril de 2019 14:29