OVH Cloud OVH Cloud

Sélection à travers requête

5 réponses
Avatar
Gaël
Bonjour,

Pour ouvrir un formulaire en continu en sélectionnant les clients par n°
postal depuis un formulaire j’ai deux champs dans lesquels je rentre les
numéros postaux.
[Postal1] et [Postal2] et en après mise à jour du champ [Postal1]
Me.Postal2=Me.Postal1


J’ai créé une requête intermédiaire avec sur le champ [NP] ce critère :
>=nz([Formulaires]![CLP]![Postal1]) Et <=nz([Formulaires]![CLP]![Postal2])

Ca donne cette requête :

SELECT CLIENTS.NCLIENT AS Expr1
FROM NUMEROSPOSTAUX INNER JOIN CLIENTS ON NUMEROSPOSTAUX.NCLIENT =
CLIENTS.NCLIENT
WHERE (((NUMEROSPOSTAUX.NP)>=nz([Formulaires]![CLP]![Postal11]) And
(NUMEROSPOSTAUX.NP)<=nz([Formulaires]![CLP]![Postal21])))
GROUP BY CLIENTS.NCLIENT;


Que je lie à la table Clients et ça donne :

SELECT DISTINCTROW CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE],
CLIENTS.ADRESSE, CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE,
CLIENTS.ACTIVITE
FROM CLIENTS INNER JOIN REQ_NP ON CLIENTS.NCLIENT = REQ_NP.Expr1
GROUP BY CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE], CLIENTS.ADRESSE,
CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE, CLIENTS.ACTIVITE
ORDER BY CLIENTS.[RAISON SOCIALE];

Lorsque je sélectionne des N° postaux dans les champs le formulaire s’ouvre
avec la sélection mais si je veux ouvrir le formulaire sans faire de
sélection (pour avoir tous les clients) le formulaire en continu s’ouvre
vide, malgré les nz de la requête intermédiaire.

Que dois-je changer dans le requête intermédiaire pour que le formulaire en
continu s'ouvre avec les données justes.
Merci pour votre aide
Gaël

5 réponses

Avatar
CAIRIS
Essaie une formule du type

WHERE (((Nom du champ de la requête) Between "*" & [forms]![Nom du
formulaire]![Nom du 1er code postal] & "*" And "*" & [Nom du formulaire]![Nom
du 2e$me code postal] & "*"))

--
Catherine



Bonjour,

Pour ouvrir un formulaire en continu en sélectionnant les clients par n°
postal depuis un formulaire j’ai deux champs dans lesquels je rentre les
numéros postaux.
[Postal1] et [Postal2] et en après mise à jour du champ [Postal1]
Me.Postal2=Me.Postal1


J’ai créé une requête intermédiaire avec sur le champ [NP] ce critère :
=nz([Formulaires]![CLP]![Postal1]) Et <=nz([Formulaires]![CLP]![Postal2])


Ca donne cette requête :

SELECT CLIENTS.NCLIENT AS Expr1
FROM NUMEROSPOSTAUX INNER JOIN CLIENTS ON NUMEROSPOSTAUX.NCLIENT =
CLIENTS.NCLIENT
WHERE (((NUMEROSPOSTAUX.NP)>=nz([Formulaires]![CLP]![Postal11]) And
(NUMEROSPOSTAUX.NP)<=nz([Formulaires]![CLP]![Postal21])))
GROUP BY CLIENTS.NCLIENT;


Que je lie à la table Clients et ça donne :

SELECT DISTINCTROW CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE],
CLIENTS.ADRESSE, CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE,
CLIENTS.ACTIVITE
FROM CLIENTS INNER JOIN REQ_NP ON CLIENTS.NCLIENT = REQ_NP.Expr1
GROUP BY CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE], CLIENTS.ADRESSE,
CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE, CLIENTS.ACTIVITE
ORDER BY CLIENTS.[RAISON SOCIALE];

Lorsque je sélectionne des N° postaux dans les champs le formulaire s’ouvre
avec la sélection mais si je veux ouvrir le formulaire sans faire de
sélection (pour avoir tous les clients) le formulaire en continu s’ouvre
vide, malgré les nz de la requête intermédiaire.

Que dois-je changer dans le requête intermédiaire pour que le formulaire en
continu s'ouvre avec les données justes.
Merci pour votre aide
Gaël



Avatar
Gaël
Bonjour,
J'ai déjà essayé cette solution, mais une erreur à l'exécution:

Cette expression comporte une syntaxe incorrecte, ou est trop complexe pour
être évaluée etc...
Pour renseignement les champs de la table sont numériques.
Merci pour votre aide.
Gaël



Essaie une formule du type

WHERE (((Nom du champ de la requête) Between "*" & [forms]![Nom du
formulaire]![Nom du 1er code postal] & "*" And "*" & [Nom du formulaire]![Nom
du 2e$me code postal] & "*"))

--
Catherine



Bonjour,

Pour ouvrir un formulaire en continu en sélectionnant les clients par n°
postal depuis un formulaire j’ai deux champs dans lesquels je rentre les
numéros postaux.
[Postal1] et [Postal2] et en après mise à jour du champ [Postal1]
Me.Postal2=Me.Postal1


J’ai créé une requête intermédiaire avec sur le champ [NP] ce critère :
=nz([Formulaires]![CLP]![Postal1]) Et <=nz([Formulaires]![CLP]![Postal2])


Ca donne cette requête :

SELECT CLIENTS.NCLIENT AS Expr1
FROM NUMEROSPOSTAUX INNER JOIN CLIENTS ON NUMEROSPOSTAUX.NCLIENT =
CLIENTS.NCLIENT
WHERE (((NUMEROSPOSTAUX.NP)>=nz([Formulaires]![CLP]![Postal11]) And
(NUMEROSPOSTAUX.NP)<=nz([Formulaires]![CLP]![Postal21])))
GROUP BY CLIENTS.NCLIENT;


Que je lie à la table Clients et ça donne :

SELECT DISTINCTROW CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE],
CLIENTS.ADRESSE, CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE,
CLIENTS.ACTIVITE
FROM CLIENTS INNER JOIN REQ_NP ON CLIENTS.NCLIENT = REQ_NP.Expr1
GROUP BY CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE], CLIENTS.ADRESSE,
CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE, CLIENTS.ACTIVITE
ORDER BY CLIENTS.[RAISON SOCIALE];

Lorsque je sélectionne des N° postaux dans les champs le formulaire s’ouvre
avec la sélection mais si je veux ouvrir le formulaire sans faire de
sélection (pour avoir tous les clients) le formulaire en continu s’ouvre
vide, malgré les nz de la requête intermédiaire.

Que dois-je changer dans le requête intermédiaire pour que le formulaire en
continu s'ouvre avec les données justes.
Merci pour votre aide
Gaël





Avatar
J-Pierre
Bonsoir Gaël

Je suppose que tu as un bouton pour ouvrir ton formulaire en continu. Avant de l'ouvrir, tu contrôles tes champs:
if not is numeric(me.Postal11) then me.Postal11 = 0
if not is numeric(me.Postal21) then me.Postal21 = 99999999
if me.Postal21 <= me.Postal11 then ...........

Si tu n'aimes pas que ces valeurs s'affichent dans ton formulaire, tu crées 2 champs supplémentaires non visibles
if not is numeric(me.Postal11) then me.limBas = 0
else me.limBas = me.Postal11 endif
if not is numeric(me.Postal21) then me.limHaut = 999999999
else me.limHaut = me.Postal21 endif
que tu utilises dans ta requête et tu n'auras plus besoin des nz.

Et puis, dans la 2ème requête, il me semble que tu n'as pas besoin du GROUP BY, le DISTINCTROW est suffisant pour éliminer les
doublons. Et aussi que tu pouvais faire ça avec une seule requête. Pourquoi 2 ? L'exécution est plus lente.

J-Pierre

"Gaël" a écrit dans le message de news:
Bonjour,
J'ai déjà essayé cette solution, mais une erreur à l'exécution:

Cette expression comporte une syntaxe incorrecte, ou est trop complexe pour
être évaluée etc...
Pour renseignement les champs de la table sont numériques.
Merci pour votre aide.
Gaël



Essaie une formule du type

WHERE (((Nom du champ de la requête) Between "*" & [forms]![Nom du
formulaire]![Nom du 1er code postal] & "*" And "*" & [Nom du formulaire]![Nom
du 2e$me code postal] & "*"))

--
Catherine



Bonjour,

Pour ouvrir un formulaire en continu en sélectionnant les clients par n°
postal depuis un formulaire j'ai deux champs dans lesquels je rentre les
numéros postaux.
[Postal1] et [Postal2] et en après mise à jour du champ [Postal1]
Me.Postal2=Me.Postal1


J'ai créé une requête intermédiaire avec sur le champ [NP] ce critère :
=nz([Formulaires]![CLP]![Postal1]) Et <=nz([Formulaires]![CLP]![Postal2])


Ca donne cette requête :

SELECT CLIENTS.NCLIENT AS Expr1
FROM NUMEROSPOSTAUX INNER JOIN CLIENTS ON NUMEROSPOSTAUX.NCLIENT >> > CLIENTS.NCLIENT
WHERE (((NUMEROSPOSTAUX.NP)>=nz([Formulaires]![CLP]![Postal11]) And
(NUMEROSPOSTAUX.NP)<=nz([Formulaires]![CLP]![Postal21])))
GROUP BY CLIENTS.NCLIENT;


Que je lie à la table Clients et ça donne :

SELECT DISTINCTROW CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE],
CLIENTS.ADRESSE, CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE,
CLIENTS.ACTIVITE
FROM CLIENTS INNER JOIN REQ_NP ON CLIENTS.NCLIENT = REQ_NP.Expr1
GROUP BY CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE], CLIENTS.ADRESSE,
CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE, CLIENTS.ACTIVITE
ORDER BY CLIENTS.[RAISON SOCIALE];

Lorsque je sélectionne des N° postaux dans les champs le formulaire s'ouvre
avec la sélection mais si je veux ouvrir le formulaire sans faire de
sélection (pour avoir tous les clients) le formulaire en continu s'ouvre
vide, malgré les nz de la requête intermédiaire.

Que dois-je changer dans le requête intermédiaire pour que le formulaire en
continu s'ouvre avec les données justes.
Merci pour votre aide
Gaël







Avatar
Akenaton
--
Développeur Office



Bonjour,

Pour ouvrir un formulaire en continu en sélectionnant les clients par n°
postal depuis un formulaire j’ai deux champs dans lesquels je rentre les
numéros postaux.
[Postal1] et [Postal2] et en après mise à jour du champ [Postal1]
Me.Postal2=Me.Postal1


J’ai créé une requête intermédiaire avec sur le champ [NP] ce critère :
=nz([Formulaires]![CLP]![Postal1]) Et <=nz([Formulaires]![CLP]![Postal2])


Ca donne cette requête :

SELECT CLIENTS.NCLIENT AS Expr1
FROM NUMEROSPOSTAUX INNER JOIN CLIENTS ON NUMEROSPOSTAUX.NCLIENT =
CLIENTS.NCLIENT
WHERE (((NUMEROSPOSTAUX.NP)>=nz([Formulaires]![CLP]![Postal11]) And
(NUMEROSPOSTAUX.NP)<=nz([Formulaires]![CLP]![Postal21])))
GROUP BY CLIENTS.NCLIENT;


Que je lie à la table Clients et ça donne :

SELECT DISTINCTROW CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE],
CLIENTS.ADRESSE, CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE,
CLIENTS.ACTIVITE
FROM CLIENTS INNER JOIN REQ_NP ON CLIENTS.NCLIENT = REQ_NP.Expr1
GROUP BY CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE], CLIENTS.ADRESSE,
CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE, CLIENTS.ACTIVITE
ORDER BY CLIENTS.[RAISON SOCIALE];

Lorsque je sélectionne des N° postaux dans les champs le formulaire s’ouvre
avec la sélection mais si je veux ouvrir le formulaire sans faire de
sélection (pour avoir tous les clients) le formulaire en continu s’ouvre
vide, malgré les nz de la requête intermédiaire.

Que dois-je changer dans le requête intermédiaire pour que le formulaire en
continu s'ouvre avec les données justes.
Merci pour votre aide
Gaël



Avatar
Gaël
Bonjour,
Ca, j'ai déjà essayé et ça marche, le problème vient lorsque l'on n'a pas
saisi de N° postal chez un client, ce qui peut arriver, et bien il n'ai
jamais montré, même lorsque l'on ne met rien dans les champs Postal11 et
Postal21.
C'est pour cette raison que je cherche autre chose.
Merci pour toutes les idées.
Gaël


Bonsoir Gaël

Je suppose que tu as un bouton pour ouvrir ton formulaire en continu. Avant de l'ouvrir, tu contrôles tes champs:
if not is numeric(me.Postal11) then me.Postal11 = 0
if not is numeric(me.Postal21) then me.Postal21 = 99999999
if me.Postal21 <= me.Postal11 then ...........

Si tu n'aimes pas que ces valeurs s'affichent dans ton formulaire, tu crées 2 champs supplémentaires non visibles
if not is numeric(me.Postal11) then me.limBas = 0
else me.limBas = me.Postal11 endif
if not is numeric(me.Postal21) then me.limHaut = 999999999
else me.limHaut = me.Postal21 endif
que tu utilises dans ta requête et tu n'auras plus besoin des nz.

Et puis, dans la 2ème requête, il me semble que tu n'as pas besoin du GROUP BY, le DISTINCTROW est suffisant pour éliminer les
doublons. Et aussi que tu pouvais faire ça avec une seule requête. Pourquoi 2 ? L'exécution est plus lente.

J-Pierre

"Gaël" a écrit dans le message de news:
Bonjour,
J'ai déjà essayé cette solution, mais une erreur à l'exécution:

Cette expression comporte une syntaxe incorrecte, ou est trop complexe pour
être évaluée etc...
Pour renseignement les champs de la table sont numériques.
Merci pour votre aide.
Gaël



Essaie une formule du type

WHERE (((Nom du champ de la requête) Between "*" & [forms]![Nom du
formulaire]![Nom du 1er code postal] & "*" And "*" & [Nom du formulaire]![Nom
du 2e$me code postal] & "*"))

--
Catherine



Bonjour,

Pour ouvrir un formulaire en continu en sélectionnant les clients par n°
postal depuis un formulaire j'ai deux champs dans lesquels je rentre les
numéros postaux.
[Postal1] et [Postal2] et en après mise à jour du champ [Postal1]
Me.Postal2=Me.Postal1


J'ai créé une requête intermédiaire avec sur le champ [NP] ce critère :
=nz([Formulaires]![CLP]![Postal1]) Et <=nz([Formulaires]![CLP]![Postal2])


Ca donne cette requête :

SELECT CLIENTS.NCLIENT AS Expr1
FROM NUMEROSPOSTAUX INNER JOIN CLIENTS ON NUMEROSPOSTAUX.NCLIENT > >> > CLIENTS.NCLIENT
WHERE (((NUMEROSPOSTAUX.NP)>=nz([Formulaires]![CLP]![Postal11]) And
(NUMEROSPOSTAUX.NP)<=nz([Formulaires]![CLP]![Postal21])))
GROUP BY CLIENTS.NCLIENT;


Que je lie à la table Clients et ça donne :

SELECT DISTINCTROW CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE],
CLIENTS.ADRESSE, CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE,
CLIENTS.ACTIVITE
FROM CLIENTS INNER JOIN REQ_NP ON CLIENTS.NCLIENT = REQ_NP.Expr1
GROUP BY CLIENTS.NCLIENT, CLIENTS.[RAISON SOCIALE], CLIENTS.ADRESSE,
CLIENTS.NP, CLIENTS.VILLE, CLIENTS.TELEPHONE, CLIENTS.ACTIVITE
ORDER BY CLIENTS.[RAISON SOCIALE];

Lorsque je sélectionne des N° postaux dans les champs le formulaire s'ouvre
avec la sélection mais si je veux ouvrir le formulaire sans faire de
sélection (pour avoir tous les clients) le formulaire en continu s'ouvre
vide, malgré les nz de la requête intermédiaire.

Que dois-je changer dans le requête intermédiaire pour que le formulaire en
continu s'ouvre avec les données justes.
Merci pour votre aide
Gaël