« Programmation Qt/Sauvegarder des données avec SQL » : différence entre les versions

Un livre de Wikilivres.
Contenu supprimé Contenu ajouté
Athozus (discussion | contributions)
→‎Exécuter une requête : création de la section → + exemples, principe
Athozus (discussion | contributions)
m Passage du sommaire en <noinclude>
Balise : Éditeur de wikicode 2017
 
Ligne 1 : Ligne 1 :
{{Programmation Qt}}
<noinclude>{{Programmation Qt}}</noinclude>


Dans ce nouveau chapitre sur la programmation Qt, nous allons voir comment sauvegarder des données avec SQL. Pour que cela marche, il faut absolument insérer au début de votre code la ligne <code>#include <QSql></code>, car nous allons utiliser le module ... QSql.
Dans ce nouveau chapitre sur la programmation Qt, nous allons voir comment sauvegarder des données avec SQL. Pour que cela marche, il faut absolument insérer au début de votre code la ligne <code>#include <QSql></code>, car nous allons utiliser le module ... QSql.

Version actuelle du 28 novembre 2018 à 15:06

Dans ce nouveau chapitre sur la programmation Qt, nous allons voir comment sauvegarder des données avec SQL. Pour que cela marche, il faut absolument insérer au début de votre code la ligne #include <QSql>, car nous allons utiliser le module ... QSql.

Se connecter à la base de données[modifier | modifier le wikicode]

Avant toute chose, vérifiez que vous avez un SQL.

Pour plus de détails voir : Programmation SQL.

Ensuite, en fonction de votre langage SQL, vous aurez différents drivers. Pour MySQL, ce sera QMYSQL, pour PostgreSQL, ce sera QPSQL. Pour voir la liste complète, voir la documentation. Exemple avec MySQL.

QSqlDatabase sqlDb = QSqlDatabase::addDatabase("QMYSQL", "test-wikilivres");
sqlDb.setHostName("localhost");
sqlDb.setUser("wikilivres");
sqlDb.setPassword("mot-de-passe-secret");
sqlDb.setDatabase("wikilivres");
if (sql.open)
{
    statusBar()->showMessage(tr("La base de données a bien été chargée !"), 5000)
}

else
{
    QMessageBox::critical(this, tr("Échec de connexion"), QString(tr("Impossible de se connecter à la base de données : ") + sqlDb.lastError().text() + tr(".")));
}

Exécuter une requête[modifier | modifier le wikicode]

Pour exécuter une requête SQL, nous allons utiliser la classe QSqlQuery. Elle s'utilise de cette manière, et affecte la dernière base de données ouverte (avec la méthode open) :

QSqlQuery query;
query.exec("SELECT * FROM wikilivres ORDER BY page");

Pour récupérer les données, vous faites ensuite :

while (query.next()) {
    QString pageName = query.value(0).toString();
    int page = query.value(1).toInt();
}

Si les valeurs avec lesquelles vous voulez trier les données changent dans votre programme, vous pouvez utiliser les méthodes prepare(), addBindValue() et bindValue().

query.prepare("SELECT * FROM wikilivres WHERE id < :max & id > :min");
query.bindValue(":max", 100);
query.bindValue(":min", 0);
query.exec();

Ou encore :

query.prepare("SELECT * FROM wikilivres WHERE id < ? & id > ?");
query.addBindValue(100);
query.addBindValue(0);
query.exec();

Quand il y a une ou deux valeurs, on peut utiliser les points d'interrogation, mais quand c'est plus, on peut attribuer des noms aux valeurs de la requête.