IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Discussion :

Résultat d'une requête SELECT COUNT


Sujet :

Bases de données

  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 486
    Points : 13 696
    Points
    13 696
    Billets dans le blog
    1
    Par défaut Résultat d'une requête SELECT COUNT
    Bonjour,

    J'utilise une BDD SQLite dans mon programme en Qt. J'arrive à faire les opérations basiques que je veux (INSERT INTO, SELECT x FROM...). En revanche, je bute sur pour récupérer le résultat d'une requête SELECT COUNT. Voici le code récalcitrant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        QString maRequete = "SELECT COUNT (*) FROM collection2";
        QSqlQuery query;
        // Execution de la requete
        if(!query.exec(maRequete))
        {
            // Generation d'une erreur
            QSqlError err = query.lastError();
            QMessageBox::critical(0, "Erreur sur albums", err.text());
        }
        int nbrDisques = query.value(0).toInt();
     
        qDebug() << "Nombre d'elements dans la base : " << QString::number(nbrDisques);
    La console de debug me rend ceci :
    QSqlQuery::value: not positioned on a valid record
    Nombre d'elements dans la base : "0"
    J'ai essayé d'appliquer les méthodes size() et isSelect() à ma requete query. size() rend -1, ce qui d'après la doc est toujours le cas pour une requete non SELECT ; par contre isSelect() me rend true... C'est contradictoire à mon avis...

    La requete SQL tester dans un autre logiciel (le truc de base fourni par SQLite pour faire des requetes SQL sur une base), elle fonctionne très bien. C'est cohérent avec le fait que le QMessageBox ne s'ouvre pas.

    Si quelqu'un a une idée sur la question.... Je le remercie d'avance de communiquer cette idée

  2. #2
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 486
    Points : 13 696
    Points
    13 696
    Billets dans le blog
    1
    Par défaut
    J'ai trouvé la solution grâce à un détail de la doc. Il faut faire un appel à la méthode QSqlQuery::next(). Je pensais que c'était pour connaître les résultats suivants, mais il faut l'appeler pour lire le premier résultat également.


    Pour ceux que ça intéresse, l'explication est ici :
    http://qt.developpez.com/doc/4.1/qts...the-result-set


    Voici le code modifié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
        QString maRequete = "SELECT COUNT (*) FROM collection2";
        QSqlQuery query;
        // Execution de la requete
        if(!query.exec(maRequete))
        {
            // Generation d'une erreur
            QSqlError err = query.lastError();
            QMessageBox::critical(0, "Erreur sur albums", err.text());
        }
     
        // Recuperation du resultat : il y en a un seul pour un seul next() suffit.
        int nbrDisques = 0;
        if(query.next() == true)
        {
            nbrDisques = query.value(0).toInt();
        }
        else
        {
            qDebug() << "On n'a pas reussi a compter le nombre de disques dans la base !!";
        }
     
        qDebug() << "Nombre d'elements dans la base : " << QString::number(nbrDisques);
    Ca ne résout pas mon histoire avec size et isSelect, mais au moins j'avance dans mon développement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 26/01/2015, 12h04
  2. Récupérer le résultat d'une requête SQL (count)
    Par niano dans le forum VBA Access
    Réponses: 6
    Dernier message: 07/09/2007, 12h41
  3. Réponses: 2
    Dernier message: 14/05/2007, 17h18
  4. [MySQL] comment exploiter le résultat d'une requête SELECT ?
    Par @min@ dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/04/2007, 21h52
  5. problème avec les résultats d'une requête select top1
    Par kariiim dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/03/2007, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo