OVH Cloud OVH Cloud

problème de requete SQL dans MS access 2000

1 réponse
Avatar
Sylo
Bonjour,

Dans une application que je développe, j'ai créer un générateur de requête
qui permet à un utilisateur de faire des sélections.

Pour créer une requete SQL à partir des demandes de l'utilisateur, je prend
ses critères et je fait des sous requètes qui s'encapsule.

Du cout, ca fait des requètes un peu compliqué mais sa fonctionne.

Mon problème est que j'ai fait une requête un peu balaise qui est la
suivante ou des selct s'encapsule. j'ai un message d'erreur qui est
Expression trop complexe. Quand j'enlève un critére, ca marche...

Ma question est: Y a t'il une limite dans l'interprétation de sous requètes
?

Je vous joint ma requète:
select strlie.str_strn,indn,str.* from (strlie INNER JOIN (str INNER JOIN
tsttst ON (str.tst1n=tsttst.tst1n) AND (str.tst2n=tsttst.tst2n)) ON
strlie.STR_strn=str.strn) where

(

(

(

(

(

(

(strlie.strn in (select strn from str where pay like "FRANCE"))

AND

(strlie.str_strn in (select strn from str where pay like "FRANCE"))

)

and

(str.strn in (select strn from str where pay like "FRANCE"))

)

)

AND

(

(

(

(

(

(strlie.strn in (select strn from str where cp >= "01000" AND cp <=
"01999"))

AND

(strlie.str_strn in (select strn from str where cp >= "01000" AND cp <=
"01999"))

)

and

(str.strn in (select strn from str where cp >= "01000" AND cp <= "01999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "07000" AND cp <=
"07999"))

AND

(strlie.str_strn in (select strn from str where cp >= "07000" AND cp <=
"07999"))

)

and

(str.strn in (select strn from str where cp >= "07000" AND cp <= "07999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "26000" AND cp <=
"26999"))

AND

(strlie.str_strn in (select strn from str where cp >= "26000" AND cp <=
"26999"))

)

and

(str.strn in (select strn from str where cp >= "26000" AND cp <= "26999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "38000" AND cp <=
"38999"))

AND

(strlie.str_strn in (select strn from str where cp >= "38000" AND cp <=
"38999"))

)

and

(str.strn in (select strn from str where cp >= "38000" AND cp <= "38999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "42000" AND cp <=
"42999"))

AND

(strlie.str_strn in (select strn from str where cp >= "42000" AND cp <=
"42999"))

)

and

(str.strn in (select strn from str where cp >= "42000" AND cp <= "42999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "69000" AND cp <=
"69999"))

AND

(strlie.str_strn in (select strn from str where cp >= "69000" AND cp <=
"69999"))

)

and

(str.strn in (select strn from str where cp >= "69000" AND cp <= "69999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "73000" AND cp <=
"73999"))

AND

(strlie.str_strn in (select strn from str where cp >= "73000" AND cp <=
"73999"))

)

and

(str.strn in (select strn from str where cp >= "73000" AND cp <= "73999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "74000" AND cp <=
"74999"))

AND

(strlie.str_strn in (select strn from str where cp >= "74000" AND cp <=
"74999"))

)

and

(str.strn in (select strn from str where cp >= "74000" AND cp <= "74999"))

)

)

)

)

)

)

and

(strlie.strn=1309 and strlie.str_strn<>-1 and strlie.typ=1)

)

order by str.nom



Merci pour les réponses que vous pourrez m'apporter (je sais que ma question
est un peu compliqué !)

Sylvain MALLEVAL

1 réponse

Avatar
Pierre CFI
bonjour
çà fait çà si dans une req tu as un critére qui fait référence à une source extérieure.(nom d'un controle d'un form par exemple) il
faut mettre des clauses where

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Sylo" a écrit dans le message de news: O$
Bonjour,

Dans une application que je développe, j'ai créer un générateur de requête
qui permet à un utilisateur de faire des sélections.

Pour créer une requete SQL à partir des demandes de l'utilisateur, je prend
ses critères et je fait des sous requètes qui s'encapsule.

Du cout, ca fait des requètes un peu compliqué mais sa fonctionne.

Mon problème est que j'ai fait une requête un peu balaise qui est la
suivante ou des selct s'encapsule. j'ai un message d'erreur qui est
Expression trop complexe. Quand j'enlève un critére, ca marche...

Ma question est: Y a t'il une limite dans l'interprétation de sous requètes
?

Je vous joint ma requète:
select strlie.str_strn,indn,str.* from (strlie INNER JOIN (str INNER JOIN
tsttst ON (str.tst1n=tsttst.tst1n) AND (str.tst2n=tsttst.tst2n)) ON
strlie.STR_strn=str.strn) where

(

(

(

(

(

(

(strlie.strn in (select strn from str where pay like "FRANCE"))

AND

(strlie.str_strn in (select strn from str where pay like "FRANCE"))

)

and

(str.strn in (select strn from str where pay like "FRANCE"))

)

)

AND

(

(

(

(

(

(strlie.strn in (select strn from str where cp >= "01000" AND cp < > "01999"))

AND

(strlie.str_strn in (select strn from str where cp >= "01000" AND cp < > "01999"))

)

and

(str.strn in (select strn from str where cp >= "01000" AND cp <= "01999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "07000" AND cp < > "07999"))

AND

(strlie.str_strn in (select strn from str where cp >= "07000" AND cp < > "07999"))

)

and

(str.strn in (select strn from str where cp >= "07000" AND cp <= "07999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "26000" AND cp < > "26999"))

AND

(strlie.str_strn in (select strn from str where cp >= "26000" AND cp < > "26999"))

)

and

(str.strn in (select strn from str where cp >= "26000" AND cp <= "26999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "38000" AND cp < > "38999"))

AND

(strlie.str_strn in (select strn from str where cp >= "38000" AND cp < > "38999"))

)

and

(str.strn in (select strn from str where cp >= "38000" AND cp <= "38999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "42000" AND cp < > "42999"))

AND

(strlie.str_strn in (select strn from str where cp >= "42000" AND cp < > "42999"))

)

and

(str.strn in (select strn from str where cp >= "42000" AND cp <= "42999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "69000" AND cp < > "69999"))

AND

(strlie.str_strn in (select strn from str where cp >= "69000" AND cp < > "69999"))

)

and

(str.strn in (select strn from str where cp >= "69000" AND cp <= "69999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "73000" AND cp < > "73999"))

AND

(strlie.str_strn in (select strn from str where cp >= "73000" AND cp < > "73999"))

)

and

(str.strn in (select strn from str where cp >= "73000" AND cp <= "73999"))

)

OR

(

(

(strlie.strn in (select strn from str where cp >= "74000" AND cp < > "74999"))

AND

(strlie.str_strn in (select strn from str where cp >= "74000" AND cp < > "74999"))

)

and

(str.strn in (select strn from str where cp >= "74000" AND cp <= "74999"))

)

)

)

)

)

)

and

(strlie.strn09 and strlie.str_strn<>-1 and strlie.typ=1)

)

order by str.nom



Merci pour les réponses que vous pourrez m'apporter (je sais que ma question
est un peu compliqué !)

Sylvain MALLEVAL