depuis quelque temps, j'essaye d'executer la requete suivante :
SELECT DISTINCTROW Personnes.NomPers, Personnes.PrénomPers, [Types
Interventions].NomTI, Actions.DbtAction, Interventions.NumInter
FROM ([Types Interventions] INNER JOIN (Actions INNER JOIN Interventions ON
Actions.CodeAction = Interventions.CodeAction) ON [Types
Interventions].NumTI = Interventions.NumTI) INNER JOIN Personnes ON
Actions.NumBf = Personnes.NumPers
WHERE (((Interventions.NumInter)=[Formulaires]![Devis]![numérointer]))
ORDER BY Personnes.NomPers, Personnes.PrénomPers;
et invariablement, meme en changeant le nom du formulaire ou du controle, il
me sort l'erreur :
Cette expression présente une syntaxe incorrecte, ou est trop complexe pour
être évaluée. Par exemple, une expression numérique peut contenir des
éléments trop compliqués. Essayez de simplifier l'expression en affectant
des parties de celle-ci à des variables. (Erreur 3071)
Si quelqu'un a une idee de la cause de ce truc, je serais super content...
Fred, plein les bottes
J'ai eu le même problème en ACCESS 2.0 sur une requête particulièrement
musclée, encore que la tienne ne me semble pas exagérée, mais je n'ai pas
vérifié la syntaxe :-)
La mienne était correcte, mais trop grosse en code SQL, et la seule solution
(pas très élégante) que j'ai trouvée a été de scinder la requête en deux
morceaux, le premier créant une table intermédiaire contenant uniquement les
champs nécessaires pour la seconde.
Je sais, c'est pas beau :-(
L'avantage, c'est que je me suis aperçu par la suite que je pouvais utiliser
cette table intermédiaire pour différents états, et qu'en fait l'utilisateur
gagnait globalement du temps.
L'autre inconvénient, c'est que la base gonfle à chaque exécution de la
requête de création, et que cela nécessite des réorgs encore plus fréquentes
:-(
A priori, il n'y a rien d'incorrect dans le texte de votre requete.
J'aimerais suggerer deux petites choses a essayer:
Si cette requete est creee en code, essayer de resoudre la valeur du
parametre a la creation, donc la lgne du WHERE devient:
WHERE (((Interventions.NumInter) = " & {Formulaires]!... etc
Essayez de changer l'ordre des INNER JOIN pour forcer l'etablissement d'un
join avant les autres.
A present, le joint de Actions et Interventions s'etablit en premier, puis
Types Interventions, et enfin Personnes est rajoute. Il m'est arrive que le
changement d'ordre des joints solve un probleme avec une requete de 18
tables...
Bonne chance.
Daniel :-)
msnews.microsoft.com <sv...@caramail.com> wrote in message
news:ubrvoDR9#GA.223@cppssbbsa03...
> Bonjour
>
> depuis quelque temps, j'essaye d'executer la requete suivante :
>
> SELECT DISTINCTROW Personnes.NomPers, Personnes.PrénomPers, [Types
> Interventions].NomTI, Actions.DbtAction, Interventions.NumInter
> FROM ([Types Interventions] INNER JOIN (Actions INNER JOIN Interventions
ON
> Actions.CodeAction = Interventions.CodeAction) ON [Types
> Interventions].NumTI = Interventions.NumTI) INNER JOIN Personnes ON
> Actions.NumBf = Personnes.NumPers
> WHERE (((Interventions.NumInter)=[Formulaires]![Devis]![numérointer]))
> ORDER BY Personnes.NomPers, Personnes.PrénomPers;
>
> et invariablement, meme en changeant le nom du formulaire ou du controle,
il
> me sort l'erreur :
>
> Cette expression présente une syntaxe incorrecte, ou est trop complexe
pour
> être évaluée. Par exemple, une expression numérique peut contenir des
> éléments trop compliqués. Essayez de simplifier l'expression en affectant
> des parties de celle-ci à des variables. (Erreur 3071)
>
>
>
>