Ver Mensaje Individual
  #9 (permalink)  
Antiguo 06/04/2016, 05:07
ivan7
 
Fecha de Ingreso: abril-2016
Mensajes: 36
Antigüedad: 8 años, 1 mes
Puntos: 0
Respuesta: Error al realizar un update

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El error en realidad es bastante evidente: El último valor no tiene cerrado el apóstrofo...

El problema se ve claramente cuando escribes el código bien estructurado, y además usas un corrector sintáctico que entienda SQL:
Código MySQL:
Ver original
  1. UPDATE nomisferio
  2.     SET
  3.     ID_Nomisferio='1', # Por qué está esta línea? No se modifican las PK.
  4.     ID_Categoria='1',
  5.     Tipo_Mes='28',
  6.     Sueldo='605.25',
  7.     Antiguedad='23',
  8.     Dif_Ant='14.39',
  9.     C_Puesto='716.64',
  10.     C_Niv_Retr='3.28',
  11.     C_Destino='395.84',
  12.     C_Prof_1='120.08',
  13.     C_Prof_2='240.33',
  14.     C_Prof_3='320.62',
  15.     C_Prof_4='440.52',
  16.     C_Fest_Dia='43.54',
  17.     C_Fest_Noche='62.20',
  18.     Hospital='68.81',
  19.     Nocturnidad='29.00',
  20.     J_Partida='200.69 WHERE ID_Nomisferio='1';

¿Ver como la última linea se resalta mal?
Bueno, eso.

Por otro lado, hay algo que no me respondiste: ¿Por qué estás incluyendo la PK entre los campos que modificas
Eso no tiene ningún sentido.

Algunos consejos:

1) Usa una interfaz que tenga corrector sintáctico para SQL cuando estés creando las sentencias para la base. Evitará errores elementales como ese.
2) Escribe las sentencias en forma estructurada, con indentados de párrafo. Ayuda a ver claramente lo que contiene y encuentras rápidamente errores. Hacerlas como un largo chorizo de texto las hace ilegibles.
3) Respeta los espacios detrás de las comas. Ayuda a evitar la ilegibilidad del código.
4) NO PONGAS valores numéricos entre apóstrofos, si el campo es numérico. Es innecesario, obliga a MySQL a realizar conversiones implícitas que pueden fallar, esconde errores por datos faltantes de la IF visual, y no permite validar correctamente el rango o dato que se ingresa.

Código MySQL:
Ver original
  1. UPDATE nomisferio
  2.     ID_Categoria = 1,
  3.     Tipo_Mes = 28,
  4.     Sueldo = 605.25,
  5.     Antiguedad = 23,
  6.     Dif_Ant = 14.39,
  7.     C_Puesto = 716.64,
  8.     C_Niv_Retr = 3.28,
  9.     C_Destino = 395.84,
  10.     C_Prof_1 = 120.08,
  11.     C_Prof_2 = 240.33,
  12.     C_Prof_3 = 320.62,
  13.     C_Prof_4 = 440.52,
  14.     C_Fest_Dia = 43.54,
  15.     C_Fest_Noche = 62.20,
  16.     Hospital = 68.81,
  17.     Nocturnidad = 29.00,
  18.     J_Partida = 200.69
  19.     ID_Nomisferio = 1;
En el código de la modificación no pongo la PK para modificarla, lo único que en el error lo muestra porque forma parte de "la consulta", no se si me explico bien.

El código de la update modificada es la siguiente:
Código SQL:
Ver original
  1. UPDATE nomisferio SET ID_Categoria='" . $ID_Categoria . "',
  2. Tipo_Mes='" . $Tipo_Mes . "',
  3. Sueldo='" . $Sueldo . "',
  4. Antiguedad='" . $Antiguedad . "',
  5. Dif_Ant='" . $Dif_Ant . "',
  6. C_Puesto='" . $C_Puesto . "',
  7. C_Niv_Retr='" . $C_Niv_Retr . "',
  8. C_Destino='" . $C_Destino . "',
  9. C_Prof_1='" . $C_Prof_1 . "',
  10. C_Prof_2='" . $C_Prof_2 . "',
  11. C_Prof_3='" . $C_Prof_3 . "',
  12. C_Prof_4='". $C_Prof_4 . "',
  13. C_Fest_Dia='" . $C_Fest_Dia . "',
  14. C_Fest_Noche='". $C_Fest_Noche . "',
  15. Hospital='". $Hospital . "',
  16. Nocturnidad='" . $Nocturnidad . "',
  17. J_Partida='". $J_Partida . "   
  18. WHERE=ID_Nomisferio='" . $ID_Nomisferio . "';

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.
Lo que he hecho ha sido eliminar la PK de la consulta e introducir el WHERE recogiendo el valor de la PK.
Mediante esta consulta lo que se hace es introducir los valores que ya tiene cada registro. Es decir, ID_Categoria tendrá el valor que tiene el registro en ese mismo campo... y así con todos los campos.

Última edición por gnzsoloyo; 06/04/2016 a las 05:13