Je travaille sur une petite application dans Qt et j'utilise la bibliothèque SQL avec SQLite comme base de données. Jusqu'à présent, cela a bien fonctionné. La classe QSqlQuery
fournit uniquement une méthode pour obtenir les valeurs de colonne par index au lieu de nom de zone. Toutefois, en utilisant la fonction record()
, la ligne en cours sur la requête peut être transformée en QSqlRecord
, qui a la fonction value()
pour obtenir des valeurs par nom de zone.QtSql: QSqlRecord ne conserve pas les préfixes de la table
Donc, cela fonctionne très bien et me permet d'écrire du code plus court et plus propre, mais une requête de jointure comme ce qui suit apporte des problèmes:
SELECT t1.*, t2.* FROM table1 AS t1, table2 AS t2 WHERE t1.table2_id=t2.id
Nous exécutons cette requête comme d'habitude, et convertir une rangée à un enregistrement. Mais il s'avère que les noms de colonnes dans le QSqlRecord
ne sont pas préfixés avec le nom de la table - par exemple, il y a deux colonnes appelées id
qui se trouvent dans l'objet d'enregistrement. C'est évidemment un peu problématique.
Quelle est la meilleure solution à ce problème?
(je l'ai trouvé dans le this issue bug tracker Qt, mais ce n'est pas d'un grand secours.)
J'ai un problème similaire en utilisant un alias de sous-requêtes et d'instructions de cas, de sorte que mon travail est effectué par Sqllite. Malheureusement, lorsqu'il est apparu dans SqlRecord, il n'y a qu'un seul jeu de champs, donc je ne peux même pas accéder à mes données de quelque façon que ce soit (par identifiant ou par nom de champ). Quelqu'un at-il une solution? – gollumullog