Problème avec une requette QSQlite

Fermé
Mourad2009B Messages postés 104 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 2 juillet 2024 - 4 févr. 2014 à 12:22
Mourad2009B Messages postés 104 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 2 juillet 2024 - 7 févr. 2014 à 14:57
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 vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
6 févr. 2014 à 00:23
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 104 Date d'inscription lundi 23 août 2010 Statut Membre Dernière intervention 2 juillet 2024
7 févr. 2014 à 14:57
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