[ Foro de Python ]

Actualizar un registro, uff

06-May-2022 12:23
Alberto Moreno Gil
2 Respuestas

Buenos días. Voy avanzando en un proyecto y ahora le toca a "Modificar / actualizar / edit "o como queraís un registro. He creado un textbox donde entro la Id del registro que quiero modificar (la he llamado nid y también la utilizo para suprimir un registro), he descargado (mostrar) una lista de los registros por lo que tengo a la vista el registro que quiero modificar. Limpio los textboxes y relleno todos los campos. Finalmente pulso el botón que activa la función "actualizar",. El código es  como pongo al final. Siempre recibo el mensaje "Se produjo un error" y por supuesto no se coge la modificación. He puesto siete u ocho excepts de la lista de los excepts para tratar de precisar dónde está el error. Los he ido probando uno a uno y "acumuladamente", y el último except que pongo es, naturalmente "BaseException" y entonces recibo también siempre  "Error no determinado".
Aunque en la  tabla he creado el campo (columna) Id, aquí he utilizado oid, que me funciona bien cuando voy a suprimir un registro con la Id que deseo. También he probado entrar los valores de los campos en vez de en (datos), como (netapa, ninv, nimporte, etc.). Sin resultado positivo

def actualizar():
  try:
     
        datos=netapa.get(), ninv.get(), nimporte.get(), nplataforma.get(),
nbanco.get(), nfechaor.get(),nfechall.get(),nsituac.get()
        cursorObj.execute("UPDATE remesas SET etapa=?, inv=?, importe=?, plataforma=?, banco=?, fechaor=?, fechall=?, situac=?) WHERE oid=" + nid.get(), (datos ))
 
        conn.commit()
        limpiarEntrys()
        messagebox.showinfo("Información", "Registro incorporado" )
  except:
        messagebox.showwarning("Advertencia", "Se produjo un error")  
        pass
¿Qué estoy haciendo mal? Muchísimas gracias por vuestra ahyuda.


06-May-2022 16:53
Alberto Moreno Gil


He visto otro procedimiento para "actualizar" pero tampoco me funciona.  Todavía he visto un tercer procedimiento, el que figura en Codemy , pero es bastante más complicado; lo tendré que probar a ver si me funcionara.
def actualizar():  # CRUD
  conn=sqlite3.connect('inversiones.db')
  cursorObj=conn.cursor()
  try:
    cursorObj.execute("UPDATE remesas SET etapa='"+netapa.get()+ "', inv='" + ninv.get() + "', importe='"+nimporte.get()+"', plataforma ='" +nplataforma.get() +"', banco ='" +nbanco.get()+"', fechaor='" +nfechaor.get()+"', fechall='"+nfechall.get()+"', situac='" + nsituac.get() + "' WHERE Id="+ nid.GET())
       
    conn.commit()
    limpiarEntrys()
    messagebox.showinfo("Información", "Registro incorporado" )
  except:
   messagebox.showwarning("Advertencia", "Se produjo un error")  
   pass


06-May-2022 21:31
Alberto Moreno Gil

Al fin. Por si le es de utilidad a alguien tan novato como yo, aquí va cómo me funciona. He borrado todo, lo he vuelto a escvibir con la diferencia única, creo yo, que en vez de poner en el filtro
WHERE id ="+delete_box.get() he puesto
nroid= delete_box.get()

def edit():
  conn=sqlite3.connect('inversiones.db')
  cursorObj=conn.cursor()
  nroid = delete_box.get()
  try:  
        datos= (netapa.get(), ninv.get(),nimporte.get(),nplataforma.get(),nbanco.get(),nfechaor.get(),nfechall.get(),nsituac.get())
        cursorObj.execute("UPDATE remesas SET etapa=?, inv=?, importe=?, plataforma=?, banco=?, fechaor=?, fechall=?, situac=? "+ "WHERE  id ="+ nroid,(datos))
                 
        conn.commit()
        limpiarEntrys
        messagebox.showinfo("Información", "Registro modificado" )
  except:
        messagebox.showwarning("Advertencia", "Se produjo un error")  
        pass






(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.)