query = QtSql.QSqlQuery()
query.prepare(''' DELETE
FROM books
WHERE book_id = :idLivre ''')
query.bindValue(":idLivre",self.livres[indiceLivre].idLivre)
query.exec_()
self.beginRemoveRows(QModelIndex(),indiceLivre,indiceLivre)
del self.livres[indiceLivre]
self.endRemoveRows()
On crée ici une requête DELETE en lui passant l'identificateur du livre à supprimer dans
la condition WHERE. Attention : cet identificateur n'est pas indiceLivre, qui est
l'indice du livre dans le tableau du modèle en mémoire. Pour retrouver l'identificateur
du livre à supprimer, il faut d'abord retrouver l'objet livre dans le modèle et ensuite
extraire l'attribut identificateur : c'est le sens de l'expression
self.livres[indiceLivre].idLivre.
Pour terminer, voici la méthode remplaceLivre mise à jour (les deux dernières
instructions sont inchangées) :
def remplaceLivre(self,indiceLivre,livre):
query = QSqlQuery()
query.prepare(''' UPDATE books
SET title = :titre,
author = :auteur,
publisher = :editeur,
genre_id = :idGenre,
year = :annee,
summary = :resume,
price = :prix
WHERE book_id = :idLivre ''')
query.bindValue(":idLivre", self.livres[indiceLivre].idLivre)
query.bindValue(":titre", livre.titre)
query.bindValue(":auteur", livre.auteur)
query.bindValue(":editeur", livre.editeur)
query.bindValue(":idGenre",self.idGenres[livre.genre])
query.bindValue(":annee", livre.annee)
query.bindValue(":resume", livre.resume)
query.bindValue(":prix", livre.prix)
query.exec_()
self.livres[indiceLivre] = livre
self.dataChanged.emit(self.createIndex(indiceLivre,0),
self.createIndex(indiceLivre,2))
Comme on ne sait pas a priori quels champs ont changé, on fait un UPDATE sur tous les
champs, sauf (bien sûr) l'identificateur du livre qui est indiqué dans la condition WHERE.
168
Précédent

- 169/494

Suivant