Problème avec une requette QSQlite

Bonjour à tous,
Voila j'ai un gros problème au quel je ne trouve pas de solution, depuis 2 jours, et je peux vous garantir que j'ai tout essayé.
Je travaille Avec Qt et C++, sous l'IDE QTCreator.
j'utilise QSQLite comme moteur de base de données,
j'ai une table Client qui contient les champs suivants
id	nom	prenom		adresse
1 nom1 prenom1 adresse1
2 nom2 prenom2 adresse2
3 nom3 prenom3 adresse3
4 nom4 prenom4 adresse4


une table Facture qui contient les champs suivants
id	id_client		date			numero_facture
1 1 11/12/2013 1000001
2 2 12/12/2013 1000002
3 3 13/12/2013 1000003
4 4 14/12/2013 1000004

une table composant qui contient les champs suivants
id	             designation_composant      prix		           numero_facture
1 composant 1 154 1000001
2 composant 2 254 1000001
3 composant 3 541 1000001
4 composant 4 658 1000004

une table produit_avec_reference qui contient les champs suivants
id	designation_produit		prix		numero_facture
1 produit 1 154 1000001
2 produit 2 254 1000001
3 produit 3 541 1000001
4 produit 4 658 1000004

et quand je fait une requette de ce genre
QString requetteDeSelection = QString("SELECT * FROM Facture LEFT JOIN Client ON Facture.numero_facture =  Client.numero_facture LEFT JOIN composant ON Facture.numero_facture = composant.numero_facture LEFT JOIN produit_avec_reference  ON Facture.numero_facture = produit_avec_reference.numero_facture")
QSqlQuery query (db) ; //Ma base de données est déclarée avant, et il n' y a aucun problème avec ça.
On se qui concerne la table client et la table facture il n' y a aucun problème vu que un seul client correspond à une seule facture, par contre comme il y a 3 composants de la table composant qui appartiennent à la facture 1 (1000001) et comme il y a 3 produits de la table produit_avec_reference qui appartiennent à la facture 1 (1000001) aussi.
Alors quand je lance ma requette
if(!query.exec(requetteDeSelectionTotal))
{
QMessageBox::warning(this, stringAttention,QString(tr("La requette de seléction n'a pas été éxécutée") + query.lastError().text()));
return;
}

Pour récupérer que les composant pour les mettre dans une liste
QList malisteDesComposants ;
While(query.next())
{
malisteDesComposants.append(query.value(9).toString())
}
Et là je me retrouve avec 9 valeurs au lieu de 3 comme j'en ai que trois composants
et de même pour :
QList malisteDesproduits ;
Pour recupérer que les produit avec référence pour les mettre dans une liste
While(query.next())
{
malisteDesComposants.append(query.value(13).toString())
}

Je n'arrive pas à comprendre pourquoi
Merci d'avance pour votre aide

2 réponses

  1. Bonjour à tous, merci pour vos réponse. voila mon problème. et désolé pour le retard j'ai pas internet à la maison.
    Voila j'ai un gros problème au quel je ne trouve pas de solution, depuis 2 jours, et je peux vous garantir que j'ai tout essayé.
    Je travaille Avec Qt et C++, sous l'IDE QTCreator.
    j'utilise QSQLite comme moteur de base de données,
    j'ai une table Client qui contient les champs suivants
    id	nom	        prenom		adresse
    1	nom1	prenom1		adresse1
    2	nom2	prenom2		adresse2
    3	nom3	prenom3		adresse3
    4	nom4	prenom4		adresse4
    


    une table Facture qui contient les champs suivants
    id	id_client		date			numero_facture
    1	1		11/12/2013		1000001
    2	2		12/12/2013		1000002
    3	3		13/12/2013		1000003
    4	4		14/12/2013		1000004


    une table composant qui contient les champs suivants
    id	designation_composant		prix		numero_facture
    1	composant 1			       154		1000001
    2	composant 2			        254		1000001
    3	composant 3			        541		1000001
    4	composant 4			        658		1000004


    une table produit_avec_reference qui contient les champs suivants
    id	designation_produit		prix		numero_facture
    1	produit 1				154		1000001
    2	produit 2				254		1000001
    3	produit 3				541		1000001
    4	produit 4				658		1000004


    et quand je fait une requette de ce genre
    QString requetteDeSelection = QString("SELECT * FROM Facture LEFT JOIN Client ON Facture.numero_facture =  Client.numero_facture LEFT JOIN composant ON Facture.numero_facture = composant.numero_facture LEFT JOIN produit_avec_reference  ON Facture.numero_facture = produit_avec_reference.numero_facture")

    QSqlQuery query (db) ; //Ma base de données est déclarée avant, et il n' y a aucun problème avec ça.
    On se qui concerne la table client et la table facture il n' y a aucun problème vu que un seul client corespond à une seule facture, par contre comme il y a 3 composants de la table composant qui appartiennent à la facture 1 (1000001) et comme il y a 3 produits de la table produit_avec_reference qui appartiennent à la facture 1 (1000001) aussi.
    Alors quand je lance ma requette
    if(!query.exec(requetteDeSelectionTotal))
    {
        QMessageBox::warning(this, stringAttention,QString(tr("La requette de seléction n'a pas été éxécutée") + query.lastError().text()));
        return;
    }
    
    QList malisteDesComposants ;
    Pour recupérer que les composant pour les mettre dans une liste 
    While(query.next())
    {
    	malisteDesComposants.append(query.value(9).toString())
    }

    Et là je me retrouve avec 9 valeurs au lieu de 3 comme j'en ai que trois composants
    et de même pour :
    QList malisteDesproduits ;
    Pour recupérer que les produit avec référence pour les mettre dans une liste
    While(query.next())
    {
    	malisteDesComposants.append(query.value(13).toString())
    }
    

    Je n'arrive pas à comprendre pourquoi
    Merci d'avance pour votre aide
    1. Bonsoir, franchement je n'ai pas toute lue ton code, essayer de les postés dans des balises correctes qui sont mises à ta disposition