Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2011, 14h55   #1
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Par défaut Requête qui perd des enregistrements

Bonjour,
Voici un problème que je n'arrive pas à comprendre...
J'ai une requête qu'on appellera R1 et qui me retourne 9 enregistrements. Si je crée une requête R2 :
A ce moment-là R2 ne me retourne que 3 enregistrements ! Je ne comprends pas d'où ça peut venir...Aucun filtre n'est activé.
Quelqu'un aurait une idée ?
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 15h05   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Bonjour Paidge,

La première chose que l'on a envie de dire, c'est : "Impossible !". Vraiment bizarre.

Et si tu entres, en mode SQL :
Code sql :
SELECT * FROM (SELECT * FROM R1)
==> Cela donne quoi ?


Sinon, peux-tu poster ta requête R1 (l'image + le SQL) ?
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 15h14   #3
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Citation:
Envoyé par Richard_35 Voir le message
Et si tu entres, en mode SQL :
Code sql :
SELECT * FROM (SELECT * FROM R1)
==> Cela donne quoi ?
ça me fait pareil !

Alors je préviens, ce sont des grosses requêtes basées sur d'autres requêtes lol ! ça va pas être simple...J'avais remarqué qu'il me manquait des enregistrements alors j'ai commencé à chercher quelle erreur j'avais pu commettre...Et j'en suis arrivé à ce test ultime (SELECT * FROM R1) qui ne me retourne que 3 enregistrements sur les 9 de R1 !!!!


Voici le code même si vous pourrez pas faire grand chose avec :p
R1 :
Code :
1
2
3
4
5
 
SELECT R_totalMensuel.Annee, activite, NomProduit, TypeArticle, nomMois, T_mois.IDmois, NbreSemaine, Sum(budget) AS totalBudget, Sum(Previsionnel) AS Prev, Sum(reel) AS totalReel, Sum(Ecart) AS diff, Sum(Nz([Moyenne],0)) AS Moy, 'Hrs' AS unite, NomProduit AS categorie, IDservice, nomService
FROM T_produits RIGHT JOIN (T_taches INNER JOIN (T_mois INNER JOIN (T_services INNER JOIN (R_totalPeriode RIGHT JOIN R_totalMensuel ON (R_totalPeriode.IDservice=R_totalMensuel.budget_service) AND (R_totalPeriode.IDtache=R_totalMensuel.budget_tache) AND (R_totalPeriode.annee=R_totalMensuel.Annee)) ON T_services.IDservice=R_totalMensuel.budget_service) ON T_mois.IDmois=R_totalMensuel.IDmois) ON T_taches.IDtache=R_totalMensuel.budget_tache) ON T_produits.IDproduit=T_taches.tache_IDproduit
WHERE (T_mois.IDmois>=Formulaires!F_exploitation!md_debut And T_mois.IDmois<=Formulaires!F_exploitation!md_fin) And IDproduit=3 And IDservice=1
GROUP BY R_totalMensuel.Annee, activite, NomProduit, TypeArticle, nomMois, T_mois.IDmois, NbreSemaine, 'Hrs', IDservice, nomService;
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 15h34   #4
Membre Expert
 
Avatar de keita
 
Homme
Inscription : novembre 2002
Messages : 879
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Côte d'Ivoire

Informations forums :
Inscription : novembre 2002
Messages : 879
Points : 1 015
Points : 1 015
Envoyer un message via MSN à keita
Hello
Tu peux, juste une mn, supprimer la clause GROUP BY pour voir?

@+
keita est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 16h09   #5
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Alors j'ai pas tout compris à ce qu'il m'est arrivé (c'est ptet les restes de la fête d'hier lol j'ai sûrement mélangé des requêtes de test avec celle sur laquelle je travaillais :p)....Il me paraissait aussi impossible qu'un SELECT * sur une requête ne renvoit pas tout....Alors j'ai reconstruit ma requête R1 qui me renvoyait bien 3 enregistrements et pas 9 ! (désolé) Et j'ai bien mes 9 !
Alors comme j'ai mal à la tête avec tous ces SELECT FROM INNER JOIN ON WHERE GROUP BY HAVING.....Je n'ai pas le courage de chercher ce qui n'allait pas je mets les deux codes pour ceux qui ont envie de réfléchir à ma place :p :

1ere version de R1 (qui ne renvoit que 3 enregistrements) :
Code :
1
2
3
4
SELECT R_totalMensuel.Annee, activite, NomProduit, TypeArticle, nomMois, T_mois.IDmois, NbreSemaine, Sum(budget) AS totalBudget, Sum(Previsionnel) AS Prev, Sum(reel) AS totalReel, Sum(Ecart) AS diff, Sum(Nz([Moyenne],0)) AS Moy, 'Hrs' AS unite, NomProduit AS categorie, IDservice, nomService
FROM T_produits RIGHT JOIN (T_taches INNER JOIN (T_mois INNER JOIN (T_services INNER JOIN (R_totalPeriode RIGHT JOIN R_totalMensuel ON (R_totalPeriode.IDservice=R_totalMensuel.budget_service) AND (R_totalPeriode.IDtache=R_totalMensuel.budget_tache) AND (R_totalPeriode.annee=R_totalMensuel.Annee)) ON T_services.IDservice=R_totalMensuel.budget_service) ON T_mois.IDmois=R_totalMensuel.IDmois) ON T_taches.IDtache=R_totalMensuel.budget_tache) ON T_produits.IDproduit=T_taches.tache_IDproduit
WHERE (T_mois.IDmois>=Formulaires!F_exploitation!md_debut And T_mois.IDmois<=Formulaires!F_exploitation!md_fin) And IDproduit=3 And IDservice=1
GROUP BY R_totalMensuel.Annee, activite, NomProduit, TypeArticle, nomMois, T_mois.IDmois, NbreSemaine, 'Hrs', IDservice, nomService;
2e version de R1 qui me renvoit bien les 9 :
Code :
1
2
3
4
SELECT R_totalMensuel.Annee, T_taches.activite, T_produits.NomProduit, T_taches.TypeArticle, T_mois.nomMois, R_totalMensuel.IDmois, R_totalMensuel.NbreSemaine, Sum(R_totalMensuel.budget) AS totalBudget, Sum(R_totalMensuel.Previsionnel) AS Prev, Sum(R_totalMensuel.reel) AS totalReel, Sum(R_totalMensuel.Ecart) AS diff, Sum(Nz([Moyenne],0)) AS Moy, 'Hrs' AS unite, T_produits.NomProduit AS categorie, R_totalMensuel.budget_service, T_services.nomService, T_taches.tache_IDproduit
FROM T_services INNER JOIN (T_mois INNER JOIN (T_produits RIGHT JOIN (T_taches INNER JOIN (R_totalMensuel LEFT JOIN R_totalPeriode ON (R_totalMensuel.Annee = R_totalPeriode.annee) AND (R_totalMensuel.budget_tache = R_totalPeriode.IDtache) AND (R_totalMensuel.budget_service = R_totalPeriode.IDservice)) ON T_taches.IDtache = R_totalMensuel.budget_tache) ON T_produits.IDproduit = T_taches.tache_IDproduit) ON T_mois.IDmois = R_totalMensuel.IDmois) ON T_services.IDservice = R_totalMensuel.budget_service
WHERE (((R_totalMensuel.budget_service)=1) AND ((T_taches.tache_IDproduit)=3) AND ((R_totalMensuel.IDmois)>=[Formulaires]![F_exploitation]![md_debut] And (R_totalMensuel.IDmois)<=[Formulaires]![F_exploitation]![md_fin]))
GROUP BY R_totalMensuel.Annee, T_taches.activite, T_produits.NomProduit, T_taches.TypeArticle, T_mois.nomMois, R_totalMensuel.IDmois, R_totalMensuel.NbreSemaine, 'Hrs', R_totalMensuel.budget_service, T_services.nomService, T_taches.tache_IDproduit;
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 16h22   #6
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Ce serait plus pratique avec l'image graphique de la requête... mais bon, si ça marche...

N'oublies pas le flag "Résolu" !
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2011, 16h24   #7
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
J'aurais bien voulu vous faire un screenshot mais vu le nombre de champs à sélectionner, on les aurait pas tous vus Toujours délicat ce genre de problème.
Merci pour vos réponses.
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h58.


 
 
 
 
Partenaires

Hébergement Web