Bonjour,
Je gère une base de données relationnelle sous sqlite3 (pas d'accès concurrents) pas très grande (<4000), mais complexe avec une quinzaine de tables et plusieurs contraintes de clés étrangères. Et j'utilise "intensément" la visualisation (et dans certains cas les modifications) des différentes tables et résultats de requêtes SQL grâce aux QSqlRelationalTableModel / QSortFilterProxyModel / QTableView.
Avec cette visualisation, chaque champs ayant une contrainte de clé étrangère se voit doté d'un combobox dont le contenu liste le contenu de la clé étrangère justement. Cela permet d'exclure toute erreur de saisie, et c'est bien dans cet objectif que je l'ai conçu comme ça.
Le problème est le suivant: la case d'un tel champ affiche la bonne valeur issue de la base. Mais quand je double-clique, je rentre dans l'édition de la case (QSqlRelationalDelegate) et dans plusieurs cas, j'ai une case vide affichée. j'ouvre alors le combobox, et j'ai la liste ... limitée aux 256 premières valeurs de la clé. Si je descends l’ascenseur du combobox, je finis par récupérer toutes les valeurs par paquet de 256. Ceci fait, j'ai les bonnes valeurs à l'édition sur tous les combobox de cette colonne.
Bref, c'est le même problème que je citais ici: http://www.developpez.net/forums/d12...al-qtableview/ et pour lequel j'ai une solution (sous-classer QSqlRelationalTableModel): c'est donc encore un problème de buffer que je ne sais pas contourner.
Ma question: comment forcer le remplissage complet du combobox pour que la case affiche la bonne valeur à l'entrée dans l'édition? A noter que j'ai aussi sous-classé le QSqlRelationalDelegate: j'ai donc déjà la création des combobox dans mon code.
Merci d'avance!
Partager