Problème avec une requette QSQlite

Mourad2009B Messages postés 145 Statut Membre -  
Mourad2009B Messages postés 145 Statut Membre -
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
A voir également:

2 réponses

sambia39 Messages postés 610 Date d'inscription   Statut Membre Dernière intervention   49
 
Bonsoir, franchement je n'ai pas toute lue ton code, essayer de les postés dans des balises correctes qui sont mises à ta disposition
0
Mourad2009B Messages postés 145 Statut Membre 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
0