L'envoi de requête Sql
QSqlQuery fournit un moyen d'exécuter et de manipuler les requêtes SQL. Cette classe
encapsule les fonctionnalités impliquées dans la création, la navigation et la récupération
de données à partir de requêtes SQL qui sont exécutées sur un QSqlDatabase. Elle peut
être utilisé pour exécuter le langage de manipulation de données (DML) telles que
SELECT, INSERT, UPDATE et DELETE ainsi que le langage de définition de données
(DDL) telles que CREATE TABLE.
Par exemple voici une requête récupérant le montant des TVA possible dans la table tva :
1. QSqlQuery query("SELECT montant_tva FROM tva;");
2. if(query.exec())
3. qDebug() << "Ouverture de la base de données avec succès";
4. else qDebug() << "Echec d'ouverture de la base de données";
L'envoi d'une requête Sql préparée
La fonction QsqlQuerry ::prepare() prédispose la requête SQL à l'exécution, elle permet
de construire des requêtes contenant des éléments variables. Cette fonction renvoie un
booléen pour confirmer ou non la préparation de la requête. Une seconde fonction,
bindValue(), associe une valeur à un nom correspondant dans la requête SQL préparée.
Ensuite, la fonction exec() qui exécute la requête Sql qui l'appelle. Un booléen est
retourné pour confirmer ou non l'exécution de la requête.
Voici un exemple pour récupérer l'id du type d'un produit, selon son propre id :
1. QSqlQuery query;
2. int idDuProduitDontOnVeutIdType = 22;
3. query.prepare("SELECT id_type FROMproduit WHERE id_produit=:idProduit;");
4. query.bindValue(":idProduit",idDuProduitDontOnVeutIdType);
5. bool retour = query.exec();
Ligne 1: Déclaration de la requête.
Ligne 2: Déclaration et initialisation d'un id.
Ligne 3: Préparation à l'envoi de la requête, la valeur à mettre à jour est celle précédée
de « : »
Ligne 4: Association de l'id et de la valeur dans la requête.
Ligne 5: Envoi de la requête.
D'autre fonctions comme addBindValue() utilise des marqueurs avec des « ? » Pour
préparer la requête. L'ordre des « ? » doit être respecté.
1. QSqlQuery query;
2. //Marqueurs ?
3. query.prepare("UPDATE matable SET monchamp1=?, monchamp2=?;");
4. query.addBindValue("Coucou");
5. query.addBindValue(42);