Sur cette page

QSqlResult Class

La classe QSqlResult fournit une interface abstraite permettant d'accéder à des données provenant de bases de données SQL spécifiques. Plus d'informations...

En-tête : #include <QSqlResult>
CMake : find_package(Qt6 REQUIRED COMPONENTS Sql)
target_link_libraries(mytarget PRIVATE Qt6::Sql)
qmake : QT += sql

Fonctions publiques

virtual ~QSqlResult()
virtual QVariant handle() const

Types protégés

enum BindingSyntax { PositionalBinding, NamedBinding }

Fonctions protégées

QSqlResult(const QSqlDriver *db)
void addBindValue(const QVariant &val, QSql::ParamType paramType)
int at() const
virtual void bindValue(int index, const QVariant &val, QSql::ParamType paramType)
virtual void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)
QSql::ParamType bindValueType(int index) const
QSql::ParamType bindValueType(const QString &placeholder) const
QSqlResult::BindingSyntax bindingSyntax() const
QVariant boundValue(int index) const
QVariant boundValue(const QString &placeholder) const
int boundValueCount() const
QString boundValueName(int index) const
QStringList boundValueNames() const
QVariantList boundValues() const
QVariantList &boundValues()
void clear()
virtual QVariant data(int index) = 0
const QSqlDriver *driver() const
virtual bool exec()
QString executedQuery() const
virtual bool fetch(int index) = 0
virtual bool fetchFirst() = 0
virtual bool fetchLast() = 0
virtual bool fetchNext()
virtual bool fetchPrevious()
bool hasOutValues() const
bool isActive() const
bool isForwardOnly() const
virtual bool isNull(int index) = 0
bool isSelect() const
bool isValid() const
QSqlError lastError() const
virtual QVariant lastInsertId() const
QString lastQuery() const
virtual int numRowsAffected() = 0
virtual bool prepare(const QString &query)
virtual QSqlRecord record() const
virtual bool reset(const QString &query) = 0
void resetBindCount()
virtual bool savePrepare(const QString &query)
virtual void setActive(bool active)
virtual void setAt(int index)
virtual void setForwardOnly(bool forward)
virtual void setLastError(const QSqlError &error)
virtual void setQuery(const QString &query)
virtual void setSelect(bool select)
virtual int size() = 0

Description détaillée

Normalement, vous devriez utiliser QSqlQuery au lieu de QSqlResult, puisque QSqlQuery fournit une enveloppe générique pour les implémentations de QSqlResult spécifiques aux bases de données.

Si vous implémentez votre propre pilote SQL (en sous-classant QSqlDriver), vous devrez fournir votre propre sous-classe de QSqlResult qui implémente toutes les fonctions virtuelles pures et les autres fonctions virtuelles dont vous avez besoin.

Voir également QSqlDriver.

Documentation sur les types de membres

enum QSqlResult::BindingSyntax

Ce type d'énumération spécifie les différentes syntaxes de spécification des espaces réservés dans les requêtes préparées.

ConstanteValeurDescription de la syntaxe
QSqlResult::PositionalBinding0Utilise la syntaxe positionnelle de type ODBC, avec des " ?" comme caractères de remplacement.
QSqlResult::NamedBinding1Utiliser la syntaxe Oracle avec des espaces réservés nommés (par exemple, ":id").

Voir également bindingSyntax().

Documentation des fonctions membres

[explicit protected] QSqlResult::QSqlResult(const QSqlDriver *db)

Crée un QSqlResult en utilisant le pilote de base de données db. L'objet est initialisé à un état inactif.

Voir aussi isActive() et driver().

[virtual noexcept] QSqlResult::~QSqlResult()

Détruit l'objet et libère les ressources allouées.

[protected] void QSqlResult::addBindValue(const QVariant &val, QSql::ParamType paramType)

Relie la valeur val du paramètre de type paramType à la prochaine position disponible dans l'enregistrement (ligne) en cours.

Voir aussi bindValue().

[protected] int QSqlResult::at() const

Renvoie la position de ligne actuelle (basée sur zéro) du résultat. Peut renvoyer les valeurs spéciales QSql::BeforeFirstRow ou QSql::AfterLastRow.

Voir aussi setAt() et isValid().

[virtual protected] void QSqlResult::bindValue(int index, const QVariant &val, QSql::ParamType paramType)

Relie la valeur val du paramètre de type paramType à la position index dans l'enregistrement (ligne) en cours.

Voir aussi addBindValue().

[virtual protected] void QSqlResult::bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType)

Relie la valeur val du paramètre de type paramType au nom placeholder dans l'enregistrement actuel (ligne).

Remarque : la liaison d'un caractère générique non défini entraînera un comportement non défini.

Il s'agit d'une fonction surchargée.

Voir également QSqlQuery::bindValue().

[protected] QSql::ParamType QSqlResult::bindValueType(int index) const

Renvoie le type de paramètre pour la valeur liée à la position index.

Voir également boundValue().

[protected] QSql::ParamType QSqlResult::bindValueType(const QString &placeholder) const

Renvoie le type de paramètre pour la valeur liée au nom placeholder donné.

Il s'agit d'une fonction surchargée.

[protected] QSqlResult::BindingSyntax QSqlResult::bindingSyntax() const

Renvoie la syntaxe de liaison utilisée par les requêtes préparées.

[protected] QVariant QSqlResult::boundValue(int index) const

Renvoie la valeur liée à la position index dans l'enregistrement actuel (ligne).

Voir aussi bindValue() et boundValues().

[protected] QVariant QSqlResult::boundValue(const QString &placeholder) const

Renvoie la valeur liée au nom placeholder donné dans l'enregistrement actuel (ligne).

Il s'agit d'une fonction surchargée.

Voir aussi bindValueType().

[protected] int QSqlResult::boundValueCount() const

Renvoie le nombre de valeurs liées dans le résultat.

Voir aussi boundValues().

[protected] QString QSqlResult::boundValueName(int index) const

Renvoie le nom de la valeur liée à la position index dans l'enregistrement (ligne) en cours.

Voir également boundValue() et boundValueNames().

[protected] QStringList QSqlResult::boundValueNames() const

Renvoie les noms de toutes les valeurs liées.

Voir aussi boundValue() et boundValueName().

[protected] QVariantList QSqlResult::boundValues() const

Renvoie une liste des valeurs liées du résultat pour l'enregistrement actuel (ligne).

Voir également boundValueCount().

[protected] QVariantList &QSqlResult::boundValues()

Renvoie une référence mutable à la liste des valeurs liées du résultat pour l'enregistrement actuel (ligne).

Il s'agit d'une fonction surchargée.

Voir également boundValueCount().

[protected] void QSqlResult::clear()

Efface l'ensemble des résultats et libère toutes les ressources associées.

[pure virtual protected] QVariant QSqlResult::data(int index)

Renvoie les données du champ index de la ligne courante sous la forme d'un QVariant. Cette fonction n'est appelée que si le résultat est actif et positionné sur un enregistrement valide et si index est non négatif. Les classes dérivées doivent réimplémenter cette fonction et renvoyer la valeur du champ index, ou QVariant() si elle ne peut être déterminée.

[protected] const QSqlDriver *QSqlResult::driver() const

Renvoie le pilote associé au résultat. Il s'agit de l'objet passé au constructeur.

[virtual protected] bool QSqlResult::exec()

Exécute la requête, en renvoyant true en cas de succès ; sinon, renvoie false.

Voir aussi prepare().

[protected] QString QSqlResult::executedQuery() const

Renvoie la requête qui a été exécutée. Elle peut être différente de la requête qui a été transmise, par exemple si des valeurs liées ont été utilisées avec une requête préparée et que la base de données sous-jacente ne prend pas en charge les requêtes préparées.

Voir aussi exec() et setQuery().

[pure virtual protected] bool QSqlResult::fetch(int index)

Positionne le résultat sur une ligne arbitraire (basée sur zéro) index.

Cette fonction n'est appelée que si le résultat est dans un état actif. Les classes dérivées doivent réimplémenter cette fonction et positionner le résultat sur la ligne index, et appeler setAt() avec une valeur appropriée. La fonction retourne true pour indiquer un succès, ou false pour indiquer un échec.

Voir aussi isActive(), fetchFirst(), fetchLast(), fetchNext() et fetchPrevious().

[pure virtual protected] bool QSqlResult::fetchFirst()

Positionne le résultat sur le premier enregistrement (ligne 0) du résultat.

Cette fonction n'est appelée que si le résultat est actif. Les classes dérivées doivent réimplémenter cette fonction et positionner le résultat sur le premier enregistrement, et appeler setAt() avec une valeur appropriée. La fonction renvoie true pour indiquer un succès, ou false pour indiquer un échec.

Voir également fetch() et fetchLast().

[pure virtual protected] bool QSqlResult::fetchLast()

Positionne le résultat sur le dernier enregistrement (dernière ligne) du résultat.

Cette fonction n'est appelée que si le résultat est dans un état actif. Les classes dérivées doivent réimplémenter cette fonction et positionner le résultat sur le dernier enregistrement, et appeler setAt() avec une valeur appropriée. La fonction renvoie true pour indiquer un succès, ou false pour indiquer un échec.

Voir également fetch() et fetchFirst().

[virtual protected] bool QSqlResult::fetchNext()

Positionne le résultat sur le prochain enregistrement (ligne) disponible dans le résultat.

Cette fonction n'est appelée que si le résultat est actif. L'implémentation par défaut appelle fetch() avec l'index suivant. Les classes dérivées peuvent réimplémenter cette fonction et positionner le résultat sur l'enregistrement suivant d'une autre manière, et appeler setAt() avec une valeur appropriée. La fonction renvoie true pour indiquer un succès, ou false pour indiquer un échec.

Voir aussi fetch() et fetchPrevious().

[virtual protected] bool QSqlResult::fetchPrevious()

Positionne le résultat sur l'enregistrement (ligne) précédent dans le résultat.

Cette fonction n'est appelée que si le résultat est actif. L'implémentation par défaut appelle fetch() avec l'index précédent. Les classes dérivées peuvent réimplémenter cette fonction et positionner le résultat à l'enregistrement suivant d'une autre manière, et appeler setAt() avec une valeur appropriée. La fonction renvoie true pour indiquer un succès, ou false pour indiquer un échec.

[virtual] QVariant QSqlResult::handle() const

Renvoie l'identifiant de base de données de bas niveau pour ce jeu de résultats enveloppé dans un QVariant ou un QVariant invalide s'il n'y a pas d'identifiant.

Attention : Utilisez cette fonction avec la plus grande prudence et uniquement si vous savez ce que vous faites.

Attention : L'identifiant retourné ici peut devenir un pointeur périmé si le résultat est modifié (par exemple, si vous l'effacez).

Attention : Le handle peut être NULL si le résultat n'a pas encore été exécuté.

Attention : PostgreSQL : en mode forward-only, le handle de QSqlResult peut changer après avoir appelé fetch(), fetchFirst(), fetchLast(), fetchNext(), fetchPrevious(), nextResult().

L'identifiant retourné ici dépend de la base de données, vous devez demander le nom du type de la variante avant d'y accéder.

Cet exemple récupère l'identifiant d'un résultat sqlite :

QSqlDatabase db = QSqlDatabase::database("sales");
QSqlQuery query("SELECT NAME, DOB FROM EMPLOYEES", db);

QVariant v = query.result()->handle();
if (v.isValid() && qstrcmp(v.typeName(), "sqlite3_stmt*") == 0) {
    // v.data() returns a pointer to the handle
    sqlite3_stmt *handle = *static_cast<sqlite3_stmt **>(v.data());
    if (handle) {
        // ...
    }
}

Cet extrait renvoie l'identifiant pour PostgreSQL ou MySQL :

if (qstrcmp(v.typeName(), "PGresult*") == 0) {
    PGresult *handle = *static_cast<PGresult **>(v.data());
    if (handle) {
        // ...
        }
}

if (qstrcmp(v.typeName(), "MYSQL_STMT*") == 0) {
    MYSQL_STMT *handle = *static_cast<MYSQL_STMT **>(v.data());
    if (handle) {
        // ...
        }
    }

Voir aussi QSqlDriver::handle().

[protected] bool QSqlResult::hasOutValues() const

Renvoie true si au moins une des valeurs liées de la requête est un QSql::Out ou un QSql::InOut; sinon, renvoie false.

Voir aussi bindValueType().

[protected] bool QSqlResult::isActive() const

Renvoie true si le résultat comporte des enregistrements à extraire ; sinon, renvoie false.

[protected] bool QSqlResult::isForwardOnly() const

Renvoie true si vous ne pouvez que faire défiler l'ensemble des résultats vers l'avant ; sinon, renvoie false.

Voir aussi setForwardOnly().

[pure virtual protected] bool QSqlResult::isNull(int index)

Renvoie true si le champ situé à la position index dans la ligne actuelle est nul ; sinon, renvoie false.

[protected] bool QSqlResult::isSelect() const

Renvoie true si le résultat actuel provient d'une déclaration SELECT; sinon, renvoie false.

Voir aussi setSelect().

[protected] bool QSqlResult::isValid() const

Renvoie true si le résultat est positionné sur un enregistrement valide (c'est-à-dire que le résultat n'est pas positionné avant le premier ou après le dernier enregistrement) ; sinon, renvoie false.

Voir aussi at().

[protected] QSqlError QSqlResult::lastError() const

Renvoie la dernière erreur associée au résultat.

Voir aussi setLastError().

[virtual protected] QVariant QSqlResult::lastInsertId() const

Renvoie l'ID de l'objet de la dernière ligne insérée si la base de données le permet. Une adresse invalide QVariant sera renvoyée si la requête n'a pas inséré de valeur ou si la base de données ne renvoie pas l'identifiant. Si plus d'une ligne a été touchée par l'insertion, le comportement est indéfini.

Notez que pour les bases de données Oracle, le ROWID de la ligne sera retourné, alors que pour les bases de données MySQL, le champ auto-incrémenté de la ligne sera retourné.

Voir aussi QSqlDriver::hasFeature().

[protected] QString QSqlResult::lastQuery() const

Renvoie le texte de la requête SQL en cours, ou une chaîne vide s'il n'y en a pas.

Voir aussi setQuery().

[pure virtual protected] int QSqlResult::numRowsAffected()

Renvoie le nombre de lignes affectées par la dernière requête exécutée, ou -1 s'il n'est pas possible de le déterminer ou si la requête est une instruction SELECT.

Voir aussi size().

[virtual protected] bool QSqlResult::prepare(const QString &query)

Prépare l'exécution de la requête query; la requête utilise normalement des espaces réservés afin de pouvoir être exécutée à plusieurs reprises. Retourne vrai si la requête est préparée avec succès ; sinon, retourne false.

Voir aussi exec().

[virtual protected] QSqlRecord QSqlResult::record() const

Renvoie l'enregistrement actuel si la requête est active ; sinon, il renvoie une page vide QSqlRecord.

L'implémentation par défaut renvoie toujours un fichier vide QSqlRecord.

Voir aussi isActive().

[pure virtual protected] bool QSqlResult::reset(const QString &query)

Définit le résultat pour utiliser l'instruction SQL query pour la récupération ultérieure des données.

Les classes dérivées doivent réimplémenter cette fonction et appliquer l'adresse query à la base de données. Cette fonction n'est appelée qu'après que le résultat a été placé dans un état inactif et est positionnée avant le premier enregistrement du nouveau résultat. Les classes dérivées doivent renvoyer true si la requête a abouti et est prête à être utilisée, ou false dans le cas contraire.

Voir également setQuery().

[protected] void QSqlResult::resetBindCount()

Réinitialise le nombre de paramètres de liaison.

[virtual protected] bool QSqlResult::savePrepare(const QString &query)

Prépare la requête query, en utilisant la fonctionnalité de la base de données sous-jacente dans la mesure du possible. Retourne true si la requête est préparée avec succès ; sinon, retourne false.

Note : Cette méthode aurait dû s'appeler "safePrepare()".

Voir également prepare().

[virtual protected] void QSqlResult::setActive(bool active)

Cette fonction est fournie aux classes dérivées pour définir l'état actif interne sur active.

Voir également isActive().

[virtual protected] void QSqlResult::setAt(int index)

Cette fonction est fournie aux classes dérivées pour définir la position de ligne interne (basée sur zéro) à index.

Voir également at().

[virtual protected] void QSqlResult::setForwardOnly(bool forward)

Définit le mode "forward only" à forward. Si forward est vrai, seul fetchNext() est autorisé pour naviguer dans les résultats. Le mode "forward only" nécessite beaucoup moins de mémoire puisque les résultats ne doivent pas être mis en cache. Par défaut, cette fonctionnalité est désactivée.

Le fait de définir la valeur "forward only" à false est une suggestion au moteur de base de données, qui a le dernier mot sur la question de savoir si un ensemble de résultats est uniquement en mode "forward only" ou s'il est possible de le faire défiler. isForwardOnly() renverra toujours l'état correct de l'ensemble de résultats.

Remarque : L'appel à setForwardOnly après l'exécution de la requête entraînera au mieux des résultats inattendus, au pire des plantages.

Note : Pour s'assurer que la requête forward-only s'est terminée avec succès, l'application doit vérifier lastError() pour une erreur non seulement après l'exécution de la requête, mais aussi après avoir navigué dans les résultats de la requête.

Attention : PostgreSQL : Lors de la navigation dans les résultats de la requête en mode forward-only, n'exécutez aucune autre commande SQL sur la même connexion à la base de données. Cela entraînerait la perte des résultats de la requête.

Voir aussi isForwardOnly(), fetchNext(), et QSqlQuery::setForwardOnly().

[virtual protected] void QSqlResult::setLastError(const QSqlError &error)

Cette fonction est fournie aux classes dérivées pour définir la dernière erreur à error.

Voir également lastError().

[virtual protected] void QSqlResult::setQuery(const QString &query)

Définit la requête actuelle pour le résultat à query. Vous devez appeler reset() pour exécuter la requête dans la base de données.

Voir également reset() et lastQuery().

[virtual protected] void QSqlResult::setSelect(bool select)

Cette fonction est fournie aux classes dérivées pour indiquer si l'instruction en cours est une instruction SQL SELECT. Le paramètre select doit être vrai si l'instruction est une instruction SELECT; sinon, il doit être faux.

Voir également isSelect().

[pure virtual protected] int QSqlResult::size()

Renvoie la taille du résultat SELECT, ou -1 si elle ne peut être déterminée ou si la requête n'est pas une déclaration SELECT.

Voir aussi numRowsAffected().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.