[ Foro de Python ]

tkinter

09-Feb-2023 00:02
Invitado (Mar)
1 Respuestas

Llevo dias con un error que no consigo solucionar, he creado un programa para registro de datos, añadir,  guardar, editar, eliminar.... pero no consigo editar el registro y que se actualice la base de datos que muestra a traves de una tabla , y tampoco la funcion eliminar.

def editar(cliente,id_cliente):
   conexion =conexionDB()
   sql=f"""Update clientes SET nombre='{cliente.nombre}',edad='{cliente.edad}',genero='{cliente.genero}',ncontacto='{cliente.ncontacto}',email='{cliente.email}',cuota='{cliente.cuota}'
   WHERE id_cliente={id_cliente}"""

   try:
       print("sql_editar", sql, id_cliente)
       print(cliente)
       conexion.cursor.execute(sql)
       conexion.commit()

   except:

       titulo ="conexion al registro"
       mensaje= "No se ha podido EDITAR"
       messagebox.showerror(titulo,mensaje)
       pass

def eliminar(id_cliente):
   conexion=conexionDB()
   sql=f'''DELETE FROM clientes WHERE id_cliente =?'''
   print("eliminar:",id_cliente)
   try:
       conexion.cursor.execute(sql)
       conexion.cerrar()
   except:
       titulo="ELIMINAR REGISTRO"
       mensaje= "No se puede eliminar el registro"
       messagebox.showerror(titulo,mensaje)


16-Mar-2023 21:32
Invitado (Alejandro Andrade)

¡Hola! Parece que estás teniendo algunos problemas con las funciones 'editar' y 'eliminar' de tu programa. A continuación, te proporciono algunas sugerencias para solucionarlos:

En la función 'editar', parece que estás utilizando f-strings para construir la consulta SQL. Asegúrate de que los valores de 'cliente.nombre', 'cliente.edad', 'cliente.genero', 'cliente.ncontacto', 'cliente.email' y 'cliente.cuota' estén correctamente definidos antes de pasarlos a la consulta. Además, en la línea 'conexion.cursor.execute(sql)', deberías cambiarla por 'conexion.cursor().execute(sql)' ya que 'cursor' es un método.

En la función 'eliminar', estás utilizando un placeholder en la consulta SQL, pero no estás pasando ningún valor a través de él. En su lugar, deberías usar una coma para separar los valores en la lista de parámetros que se pasa a 'execute()'. Además, en la línea 'conexion.cerrar()', deberías cambiarla por 'conexion.cerrar()' ya que 'cerrar' es un método.

Aquí te dejo una posible solución a tus problemas:

def editar(cliente, id_cliente):
   conexion = conexionDB()
   sql = f"""UPDATE clientes SET nombre='{cliente.nombre}', edad='{cliente.edad}', genero='{cliente.genero}', ncontacto='{cliente.ncontacto}', email='{cliente.email}', cuota='{cliente.cuota}'
           WHERE id_cliente={id_cliente}"""
   try:
       print("sql_editar", sql, id_cliente)
       print(cliente)
       conexion.cursor().execute(sql)
       conexion.commit()
   except:
       titulo = "conexion al registro"
       mensaje = "No se ha podido EDITAR"
       messagebox.showerror(titulo, mensaje)
       pass

def eliminar(id_cliente):
   conexion = conexionDB()
   sql = '''DELETE FROM clientes WHERE id_cliente = ?'''
   print("eliminar:", id_cliente)
   try:
       conexion.cursor().execute(sql, (id_cliente,))
       conexion.cerrar()
   except:
       titulo = "ELIMINAR REGISTRO"
       mensaje = "No se puede eliminar el registro"
       messagebox.showerror(titulo, mensaje)

Espero que esto te ayude a solucionar tus problemas. ¡Buena suerte con tu programa!






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)