Sur cette page

QSqlResult Class

La classe QSqlResult fournit une interface abstraite permettant d'accéder aux données de certaines bases de données SQL. En savoir plus...

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

En règle générale, il est préférable d’utiliser ` QSqlQuery ` plutôt que `QSqlResult`, car ` QSqlQuery ` fournit un wrapper générique pour les implémentations spécifiques à chaque base de données de `QSqlResult`.

Si vous implémentez votre propre pilote SQL (en créant une sous-classe de ` 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 définit les différentes syntaxes permettant de spécifier des espaces réservés dans les requêtes préparées.

ConstanteValeurDescription
QSqlResult::PositionalBinding0Utilise la syntaxe positionnelle de type ODBC, avec « ? » comme espace réservé.
QSqlResult::NamedBinding1Utilise la syntaxe de type Oracle avec des espaces réservés nommés (par exemple, « :id »)

Voir également bindingSyntax().

Documentation sur les fonctions membres

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

Crée un objet QSqlResult à l'aide du pilote de base de données db. L'objet est initialisé à l'état inactif.

Voir également isActive() et driver().

[virtual noexcept] QSqlResult::~QSqlResult()

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

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

Associe la valeur val, de type paramType, à la prochaine position disponible dans l'enregistrement (ligne) actuel.

Voir également bindValue().

[protected] int QSqlResult::at() const

Renvoie la position actuelle (à partir de zéro) de la ligne dans le résultat. Peut renvoyer les valeurs spéciales QSql::BeforeFirstRow ou QSql::AfterLastRow.

Voir également setAt() et isValid().

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

Associe la valeur val, de type paramType, à la position index dans l'enregistrement (ligne) actuel.

Voir également addBindValue().

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

Associe la valeur val, de type paramType, au nom placeholder dans l'enregistrement (ligne) actuel.

Remarque : l'affectation d'un espace réservé non défini entraînera un comportement indéfini.

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

Voir également QSqlQuery::bindValue().

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

Renvoie le type du paramètre correspondant à la valeur associée à la position index.

Voir également boundValue().

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

Renvoie le type du paramètre associé à la valeur liée au nom d'placeholder ion indiqué.

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 associée à la position index dans l'enregistrement (ligne) actuel.

Voir également bindValue() et boundValues().

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

Renvoie la valeur associée au nom d'placeholder ion indiqué dans l'enregistrement (ligne) actuel.

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) actuel.

Voir également boundValue() et boundValueNames().

[protected] QStringList QSqlResult::boundValueNames() const

Renvoie les noms de toutes les valeurs liées.

Voir également boundValue() et boundValueName().

[protected] QVariantList QSqlResult::boundValues() const

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

Voir également boundValueCount().

[protected] QVariantList &QSqlResult::boundValues()

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

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 objet de type QVariant. Cette fonction n’est appelée que si le résultat est actif, s’il est positionné sur un enregistrement valide et si index est un nombre non négatif. Les classes dérivées doivent réimplémenter cette fonction et renvoyer la valeur du champ index, ou QVariant() si celle-ci 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 qui a été transmis au constructeur.

[virtual protected] bool QSqlResult::exec()

Exécute la requête et renvoie « true » en cas de réussite ; sinon, renvoie « false ».

Voir également prepare().

[protected] QString QSqlResult::executedQuery() const

Renvoie la requête qui a été effectivement exécutée. Celle-ci peut différer de la requête 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 également exec() et setQuery().

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

Place le résultat à une ligne arbitraire (comptée à partir de 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 à l’ index de la ligne, puis appeler setAt() avec une valeur appropriée. Renvoie « true » en cas de réussite, ou « false » en cas d’échec.

Voir également isActive(), fetchFirst(), fetchLast(), fetchNext() et fetchPrevious().

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

Place le résultat sur le premier enregistrement (ligne 0) 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, positionner le résultat sur le premier enregistrement et appeler setAt() avec une valeur appropriée. Renvoie true pour indiquer que l'opération a réussi, ou false pour signaler un échec.

Voir également ` fetch()` et ` fetchLast()`.

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

Place 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, positionner le résultat sur le dernier enregistrement et appeler setAt() avec une valeur appropriée. Renvoie true pour indiquer que l'opération a réussi, ou false pour indiquer qu'elle a échoué.

Voir également ` fetch()` et ` fetchFirst()`.

[virtual protected] bool QSqlResult::fetchNext()

Place le résultat sur l'enregistrement (ligne) suivant disponible dans le résultat.

Cette fonction n'est appelée que si le résultat est dans un état 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, puis appeler setAt() avec une valeur appropriée. Renvoie true pour indiquer que l'opération a réussi, ou false pour signifier un échec.

Voir également 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 dans un état 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 sur l'enregistrement suivant d'une autre manière, puis appeler ` setAt()` avec une valeur appropriée. Renvoie `true` pour indiquer que l'opération a réussi, ou `false` pour signifier un échec.

[virtual] QVariant QSqlResult::handle() const

Renvoie le descripteur de base de données de bas niveau correspondant à cet ensemble de résultats, encapsulé dans un objet ` QVariant ` ou, en l'absence de descripteur, dans un objet ` QVariant ` invalide.

Avertissement : utilisez cette fonction avec la plus grande prudence et uniquement si vous savez exactement ce que vous faites.

Avertissement : le descripteur renvoyé ici peut devenir un pointeur obsolète si le résultat est modifié (par exemple, si vous l'effacez).

Avertissement : le descripteur peut être NULL si le résultat n’a pas encore été exécuté.

Avertissement : PostgreSQL : en mode « forward-only », le descripteur de QSqlResult peut changer après l’appel de fetch(), fetchFirst(), fetchLast(), fetchNext(), fetchPrevious() ou nextResult().

Le descripteur renvoyé ici dépend de la base de données ; vous devez interroger le nom du type de la variante avant d’y accéder.

Cet exemple récupère le descripteur 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 de code renvoie le descripteur 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 également QSqlDriver::handle().

[protected] bool QSqlResult::hasOutValues() const

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

Voir également bindValueType().

[protected] bool QSqlResult::isActive() const

Renvoie « true » si le résultat contient des enregistrements à récupérer ; sinon, renvoie « false ».

[protected] bool QSqlResult::isForwardOnly() const

Renvoie « true » si le défilement ne peut se faire que vers l'avant dans le jeu de résultats ; sinon, renvoie « false ».

Voir également setForwardOnly().

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

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

[protected] bool QSqlResult::isSelect() const

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

Voir également setSelect().

[protected] bool QSqlResult::isValid() const

Renvoie « true » si le résultat se trouve sur un enregistrement valide (c'est-à-dire s'il ne se trouve ni avant le premier enregistrement, ni après le dernier) ; sinon, renvoie « false ».

Voir également 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 correspondant à la dernière ligne insérée, si la base de données le prend en charge. Une erreur « QVariant » sera renvoyée si la requête n'a inséré aucune valeur ou si la base de données ne renvoie pas l'ID. Si plusieurs lignes ont été concernées par l'insertion, le comportement n'est pas défini.

Notez que pour les bases de données Oracle, c’est le ROWID de la ligne qui sera renvoyé, tandis que pour les bases de données MySQL, c’est le champ à incrémentation automatique de la ligne qui sera renvoyé.

Voir également 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 concernées par la dernière requête exécutée, ou -1 s'il est impossible 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'query fournie en vue de son exécution ; la requête utilise généralement des variables de remplacement afin de pouvoir être exécutée à plusieurs reprises. Renvoie « true » si la requête a été préparée avec succès ; sinon, renvoie « false ».

Voir également exec().

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

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

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

Voir aussi isActive().

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

Définit le résultat de manière à utiliser l'query de l'instruction SQL pour les récupérations de données suivantes.

Les classes dérivées doivent réimplémenter cette fonction et appliquer l'query à la base de données. Cette fonction n'est appelée qu'après que le résultat a été mis à l'état inactif et qu'il est positionné avant le premier enregistrement du nouveau résultat. Les classes dérivées doivent renvoyer true si la requête a abouti et que le résultat est prêt à être utilisé, 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 l'query fournie, en utilisant les fonctionnalités de la base de données sous-jacente dans la mesure du possible. Renvoie true si la requête a été préparée avec succès ; sinon, renvoie false.

Remarque : 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 interne (à partir de zéro) de la ligne sur index.

Voir également at().

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

Définit le mode « forward only » sur « forward ». Si « forward » est vrai, seule la fonction « fetchNext() » est autorisée pour parcourir les résultats. Le mode « forward only » nécessite beaucoup moins de mémoire, car les résultats n’ont pas besoin d’être mis en cache. Par défaut, cette fonctionnalité est désactivée.

Définir « forward only » sur « false » constitue une suggestion à l’intention du moteur de base de données, qui a le dernier mot quant à savoir si un jeu de résultats est en mode « forward only » ou défilable. La fonction isForwardOnly() renverra toujours l’état correct du jeu de résultats.

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

Remarque : pour s’assurer que la requête en mode « forward-only » s’est terminée avec succès, l’application doit vérifier si la fonction lastError() renvoie une erreur, non seulement après l’exécution de la requête, mais également après avoir parcouru les résultats de la requête.

Avertissement : 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 également 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 sur error.

Voir également lastError().

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

Définit la requête actuelle pour le résultat sur query. Vous devez appeler la fonction reset() pour exécuter la requête sur 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 courante est ou non une instruction SQL de type « SELECT ». Le paramètre « select » doit être défini sur « true » si l'instruction est une instruction de type « SELECT » ; dans le cas contraire, il doit être défini sur « false ».

Voir également isSelect().

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

Renvoie la taille du résultat de la fonction ` SELECT `, ou -1 si celle-ci ne peut être déterminée ou si la requête n'est pas une instruction ` SELECT `.

Voir également 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.