Bonjour,

Voili voilà l'énoncé du problème... Soit une table SQLite toute bête (id INTEGER PRIMARY KEY AUTOINCREMENT, name VARCHAR(256), exist BOOLEAN) qui contenait 10 enregistrements sur lesquelles il n'en reste plus que 5, admettont :
  • id, name, exist
  • 2, toto, true
  • 3, jean, false
  • 5, joe, true
  • 7, marc, true
  • 9, alf, false

Nottez bien que l'enregistrement avec id=1 a été supprimé...


Je souhaites à la fois :
  • Afficher en temps réel le contenu complet de la table à mon utilisateur (qui va être modifiée par l'utilisateur ou certains évènements internes)
  • Effectuer des opérations courantes sélection (diverses), insertion, suppression...


Avertissement : c'est la première fois que j'utilise QSqlTableModel donc il n'est vraiment pas exclu que je m'y prenne de travers

Je pensais avoir trouvé une solution élégante qui consistait à créer un modèle pour ma table (QSqlTableModel) et l'assigner à une vue (QTableView), mais je bloque sur la gestion de ma clef primaire dans le modèle. Je m'explique.
L'affichage temps réel de ma table fonctionne à merveille, je suis juste obligé de passer par le modèle pour effectuer mes écritures dans la table (opération insert, update et remove) ce qui ne me pose à priori aucun problème. De l'autre coté j'ai besoins d'effectuer des opérations de lecture(, comptage, etc) sur un groupe donné d'enregistrements (exemple savoir s'il y a des entrées avec exist à vrai ou faux, faire un select du premier enregistrement selon un tri donné, etc). D'après ce que j'ai compris, je ne peux passer par le modèle sans quoi je modifie l'affichage, ce que je ne souhaites pas ! Je fais donc des select au travers de simples QSqlQuery.

Indépendamment, tout cela fonctionne à merveille, mais je n'ai pas de solution quand vient le moment d'effectuer une écriture dans la table via le modèle suite aux opérations de lectures faites en dehors : j'ai juste mon id, mais aucun moyen de retrouver l'enregistrement correspondant dans le modèle qui semble fonctionner avec son propre index !!!

Opération update au travers du modèle (cf: article qui va bien L'accès aux données avec Qt pour lequel son auteur reçoit au passage toute ma sympathie)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
QSqlRecord record = model.record(i);
record.setValue(2, "a new name");
model.setRecord(i, record);
i est l'index du modèle, qui diffère systématiquement de ma clef primaire...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
[*]index (row) du modèle      Table : id, name, exist
[*]0                                   2, toto, true
[*]1                                   3, jean, false
[*]2                                   5, joe, true
[*]3                                   7, marc, true
[*]4                                   9, alf, false
Existe-t-il un moyen pour retrouver la ligne du modèle (row) depuis l'index de la table ou une autre méthode qui répondrait à ma problématique ?