Bonjour à tous,

J'ai un modèle QSqlTableModel qui est connecté à une base de donnée (via MYSQL). La vue associée au modèle est un QTableView.


Je voudrais que le modèle et la vue soit mis à jour tout le temps.
Par exemple lorsque je fais : je souhaite que la ligne soit supprimée dans le model est dans la vue mais pas dans la base de donnée. Je veux que la base de donnée soit mise à jour (sauvegardée) uniquement lorsque je met "submitAll()".

Je pensais qu'en utilisant la ligne de code ci-dessous, cela permettrait la mise à jour de la base de donnée seulement quand je le désirs, quand je met submitAll().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
Mais ca ne marche pas.
Supposons que j'ai un bouton "erase" connecté à la fonction eraseLigne et un bouton "submit" connecté à la fonction submit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Bdd::eraseLigne()
 {
     model->removeRow(1);
 
 }
 
void Bdd::submit()
 {
     model->database().transaction();
     if (model->submitAll())
     {
         model->database().commit();
     }
     else
     {
         model->database().rollback();
         QMessageBox::warning(this, tr("Base de données"),tr("The database reported an error: %1").arg(model->lastError().text()));
     }
 }
Lorsque je clique sur le bouton eraseLigne, la ligne '1' reste affichée (ce que je ne veux pas) mais l'index de la ligne est remplacé par un '!' dans la vue (ce que je ne comprend pas).

Lorsque je clique ensuite sur le bouton submit, la ligne est correctement effacée du modèle, de la vue et de la base de donnée.

Quelqu'un a-t-il une idée pour résoudre mon problème??
Merci

Aurélien