Concours : Trouvez l'erreur! [Résolu]

Signaler
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011
-
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011
-
Bonjour à vous!

J'ai une requête SQL que je n'arrive pas à trouver l'erreur ...

La voici

L'erreur que je reçois est :

Error 5000 : Error in processing report.
 [ Extended Info:Erreur de syntaxe dans l'opération JOIN.]

dcScen.RecordSource = "SELECT tblScenario.noScenario, descScenario, " & _
                     " tblScenariosProjets.NoScenario , tblScenarioProjet.noProjet, " & _
                     " tblScenariosProjets.noTypeSol , tblProjet.nomProjet," & _
                     " tblProjetSols.debitEntrant, tblProjetSols.debitSortant" & _
                    " FROM tblScenarios" & _
                    " LEFT JOIN ( tblScenariosProjets" & _
                    " LEFT JOIN (tblProjets LEFT JOIN ( tblProjetSols" & _
                    " LEFT JOIN tblTypeUtilisationSol" & _
                    " ON tblProjetSol.noTypeSol = tblTypeUtilisationSol.noTypeSol)" & _
                    " ON tblProjets.noProjet = tblProjetSols.noProjet) " & _
                    " ON tblScenariosProjets.noProjet = tblProjets.noProjet)" & _
                    " ON tblScenario.noScenario = tblScenariosProjets.noScenario" & _
                    " WHERE Utilise = 0"

Merci à l'avace

15 réponses

Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

Bon, j'ai finalement résolue mon erreur. Elle se trouvait dans l'ordre de mes INNER JOINS!

Alors voilà la requète corrigée. Merci pour ceux qui ont tenté une solution!

SELECT tblScenarios.noScenario, tblScenarios.descScenario, tblProjets.nomProjet, tblProjetSols.debitEntrant, tblProjetSols.debitSortant, tblTypeUtilisationSol.descTypeSolFROM tblTypeUtilisationSol INNER JOIN (tblScenarios INNER JOIN ((tblProjets INNER JOIN tblProjetSols ON tblProjets.noProjet tblProjetSols.noProjet) INNER JOIN tblScenariosProjets ON tblProjets.noProjet tblScenariosProjets.noProjet) ON tblScenarios.noScenario = tblScenariosProjets.noScenario) ON (tblTypeUtilisationSol.noTypeSol = tblScenariosProjets.noTypeSol) AND (tblTypeUtilisationSol.noTypeSol = tblProjetSols.noTypeSol);
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
salut,

manque au moins "tblProjet" dans ton FROM, même si tu fais un JOIN

ps : sinon pose plutôt ta question sur SQLFR si c'est un problème de requête (et non de code VB)
++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

Je viens de faire un petit test J'ai remplacé quelquechose :

dcScen.RecordSource = "SELECT OMGOMGOMG-ERREURDEFRAPPE, descScenario, " & _
                     " tblScenariosProjets.NoScenario , tblScenarioProjet.noProjet, " & _
                     " tblScenariosProjets.noTypeSol , tblProjet.nomProjet," & _
                     " tblProjetSols.debitEntrant, tblProjetSols.debitSortant" & _
                    " FROM tblScenarios" & _
                    " LEFT JOIN ( tblScenariosProjets" & _
                    " LEFT JOIN (tblProjets LEFT JOIN ( tblProjetSols" & _
                    " LEFT JOIN tblTypeUtilisationSol" & _
                    " ON tblProjetSol.noTypeSol = tblTypeUtilisationSol.noTypeSol)" & _
                    " ON tblProjets.noProjet = tblProjetSols.noProjet) " & _
                    " ON tblScenariosProjets.noProjet = tblProjets.noProjet)" & _
                    " ON tblScenario.noScenario = tblScenariosProjets.noScenario" & _
                    " WHERE Utilise = 0"

Et toujours la même erreur d'exécution...
Je vérifie si j'ai des fautes de frappes et je repost la requete =)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
et un debug.print sur la chaine, pas top....
SELECT tblScenario.noScenario, descScenario,  tblScenariosProjets.NoScenario , tblScenarioProjet.noProjet,  tblScenariosProjets.noTypeSol , tblProjet.nomProjet, tblProjetSols.debitEntrant, tblProjetSols.debitSortant FROM tblScenarios LEFT JOIN ( tblScenariosProjets LEFT JOIN (tblProjets LEFT JOIN ( tblProjetSols LEFT JOIN tblTypeUtilisationSol ON tblProjetSol.noTypeSol tblTypeUtilisationSol.noTypeSol) ON tblProjets.noProjet tblProjetSols.noProjet)  ON tblScenariosProjets.noProjet = tblProjets.noProjet) ON tblScenario.noScenario = tblScenariosProjets.noScenario WHERE Utilise = 0

sans compter que tout n'est pas préfixer, faut faire un choix
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

Merci PCPT.
SQLFR c'est une section du forum ou un autre site?

"manque au moins "tblProjet" dans ton FROM, même si tu fais un JOIN"

donc FROM tblScenarios, tblProjets LEFT JOIN etc?
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
SQLFR, comme VbFrance, est UN des nombreux sites de CodeS-SourceS
avec ton login/pass, tu as accès à tous ces sites ;)

listé tout en haut dans la barre, ou ici :
http://www.vbfrance.com/doc/reseaucs.aspx

FROM machin truc à première vue oui, mais j'suis pas expert et en plus tous ces JOIN ne sentent pas bon... ^^
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

Je hais les joins autre que inner... J'aime bien lister mes tables avec des ','

Bon je vais poser ma question sur SQLFR, Merci beaucoup de ton temps  PCPT =)
(PCPT comme dans pcp pété??)
Mais quand meme je laisse la version sans faute de frappe ;)
SELECT tblScenarios.noScenario, tblScenarios.descScenario,  tblScenariosProjets.noTypeSol , tblProjets.nomProjet, tblProjetSols.debitEntrant, tblProjetSols.debitSortant FROM tblScenarios LEFT JOIN ( tblScenariosProjets LEFT JOIN ( tblProjets LEFT JOIN ( tblProjetSols LEFT JOIN (tblTypeUtilisationSol ON tblProjetSols.noTypeSol tblTypeUtilisationSol.noTypeSol) ON tblProjets.noProjet tblProjetSols.noProjet)  ON tblScenariosProjets.noProjet = tblProjets.noProjet) ON tblScenarios.noScenario = tblScenariosProjets.noScenario) WHERE Utilise = 0
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
43
et oui ^^

pourquoi 'Utilise' n'est pas préfixé?

à la limite link tes 2 topics, sait-on jamais....
(je peux aussi simplement déplacer celui-ci )
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Essaye de remplacer tes LEFT JOIN par des LEFT OUTER JOIN

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

Pour ce que est du Utilise, c'est qu'il est unique dans la bd. Je ne crois pas qu'il nécessite d'avoir le nom de la table.

Et c'est toujours la même erreur avec les LEFT OUTER JOIN =(
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
37
Je me suis permis de réécrire la requette telle que je les écrit moi et je ne vois pas de problème particulier.

SELECT tblScenario.noScenario, descScenario,
    tblScenariosProjets.NoScenario , tblScenarioProjet.noProjet,
    tblScenariosProjets.noTypeSol , tblProjet.nomProjet,
    tblProjetSols.debitEntrant, tblProjetSols.debitSortant
FROM tblScenarios
    LEFT OUTER JOIN tblScenariosProjets ON tblScenario.noScenario = tblScenariosProjets.noScenario
    LEFT OUTER JOIN tblProjets ON tblScenariosProjets.noProjet = tblProjets.noProjet
    LEFT OUTER JOIN tblProjetSols ON tblProjets.noProjet = tblProjetSols.noProjet
    LEFT OUTER JOIN tblTypeUtilisationSol ON tblProjetSol.noTypeSol = tblTypeUtilisationSol.noTypeSol
WHERE Utilise = 0

2 points :
- Utilise ne doit exister que dans une seule table, sinon il faut préciser la table
- Si tu es sous SQLServer, il est CaseSensitive. Vérifie bien que tes champs et tables sont écrits correctement, majuscule/minuscule compris.

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

Bon, voici mes développements ^^
SELECT tblScenarios.noScenario, tblScenarios.descScenario,  tblProjets.nomProjet, tblProjetSols.debitEntrant, tblProjetSols.debitSortant, tblTypeUtilisationSol.noTypeSol FROM tblScenarios,tblScenariosProjets,tblProjets,tblProjetSols,tblTypeUtilisationSol WHERE tblProjetSols.noTypeSol tblTypeUtilisationSol.noTypeSol AND tblProjets.noProjet tblProjetSols.noProjet  AND tblScenariosProjets.noProjet = tblProjets.noProjet AND tblScenarios.noScenario = tblScenariosProjets.noScenario

Voila ma requete simplifier avec des inner Join. Donc pas vraiment de joins OHWII
Plus d'erreur de syntaxe, mais il ne trouve aucune enregistrement

1. L'ordre dans lequel je met mes And maTable.monChamps = maTable2.monchamps2 est-il important?

2. C'est tout pour l'instant <.<

Merci pour tout!
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

Bon je viens de voir la réponse de casy, je m'en vais l'essayer toute suite !!

Merci casy!
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

Bon, l'erreur a changé maintenant.

Error 5000 : Error in processing report.
 [ Extended Info:Erreur de syntaxe (opérateur absent) dans l'expression 'tblScenarios.noScenario =  tblScenariosProjets.noScenario LEFT OUTER JOIN tblProjets ON tblScenariosProjets.noProjet = tblProjets.noProjet LEFT OUTER JOIN tblProjetSols ON tblProjets.noProjet = tblProjetSols.noProjet LEFT OUTER JOIN tblTypeUtilisationSol ON tblProjetSol.noTypeSol = tblTypeUtilisationSol.noTypeSol'.]

Je vais vous donner un peu d'info sur ma BD ....Voici les liens entre mes tables

Pour les besoins de la cause, 8 = infini !

tblScenarios 1 ------ 8 tblScenariosProjets
tblProjets 1 -------- 8 tblScenariosProjets
tblProjets 1 -------- 8 tblProjetSols
TblTypeUtilisationSol --- 8 tblProjetSols

Alors voilà!

Je crois que j'ai mal écrit l'ordre des mes joins... Mes notions d'access remontent un peu à la surface!
Et aussi, pour ce que ça intéresse, je suis en VB6, avec le plugin Active Report 2.0

Merci !
Messages postés
228
Date d'inscription
mercredi 13 décembre 2000
Statut
Membre
Dernière intervention
8 août 2011

Petit changement! J'oublie les Left Joins!

Voici ce que ça donne
SELECT tblScenarios.noScenario, tblProjets.nomProjet,tblProjetSols.debitEntrant,tblProjetSols.debitSortant FROM tblScenarios INNER JOIN tblScenariosProjets INNER JOIN (tblProjets INNER JOIN (tblProjetSols INNER JOIN tblTypeUtilisationSol ON tblTypeUtilisationSol.noTypeSoltblProjetSols.noTypeSol) ON tblProjets.noProjet tblProjetSols.noProjet) ON tblProjets.noProjet = tblScenariosProjets.noProjet) ON tblScenarios.noScenario = tblScenariosProjets.noProjet

Mais j'ai toujours une erreur de syntaxe dans ma clause FROM

Alors voilà