OVH Cloud OVH Cloud

Argument de requête Sélection

9 réponses
Avatar
RaphK34
Bonjour,

Un Probleme de Recherche d'un Client par son adresse

En simplifiant avec des données partielles on obtient:

Soit une Table Client avec RUE et ETGE

Je recherche les clients via des arguments dans un formulaire F1 par RUER et
ETGER
j'ai donc une requête source de mon formulaire de résultat
le critère pour RUE est donc :

Like "*" & forms!F1!RUER & "*"

et pour ETGE:

Like "*" & forms!f1!ETGER & "*"

(j'ai besoin des "*" pour des recherches avec argument partiel)

Tout fonctionne a merveille sauf si par malheur un des deux champs de RUE ou
ETGE est vide!

Je m'explique:

Si je recherche tous les clients qui habitent dans la RUE AAA
je remplis mon champs RUER par AAA et je lance la requete
Du coup, j'ai tous les clients qui habitent dans RUE AAA quelque soit leur
ETGE excepté ceux sans ETGE !!!

Comment faire pour avoir tous les Clients même ceux dont l'ETGE est vide ???

le Code SQL de ma requete:

SELECT TClient.Rue, TClient.Etge
FROM TClient
WHERE (((TClient.Rue) Like "*" & [forms]![F1]![RUER] & "*")
AND ((TClient.Etge) Like "*" & [forms]![F1]![ETGER] & "*"));



--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
nospampizza.mpl@tiscali.fr en enlevant nospam.
--------------------------------------------

9 réponses

Avatar
Gafish
Bonjour,

Tu construis ton critère avec un VraiFaux. Dans ton cas par exemple tu
testes si etage est null, s'il est nul tu mets etage en critères sinon tu
mets le contenu de ton form.
En gros :
VraiFaux(IsNull([TonForm]![TonEtage]);[Etage];[TonForm]![TonEtage])
où [Etage] est ici le champ de ta table Client, et TonForm!TonEtage c'est la
zone de texte TonEtage du form TonForm

Arnaud

"RaphK34" a écrit dans le message news:
O$
Bonjour,

Un Probleme de Recherche d'un Client par son adresse

En simplifiant avec des données partielles on obtient:

Soit une Table Client avec RUE et ETGE

Je recherche les clients via des arguments dans un formulaire F1 par RUER
et

ETGER
j'ai donc une requête source de mon formulaire de résultat
le critère pour RUE est donc :

Like "*" & forms!F1!RUER & "*"

et pour ETGE:

Like "*" & forms!f1!ETGER & "*"

(j'ai besoin des "*" pour des recherches avec argument partiel)

Tout fonctionne a merveille sauf si par malheur un des deux champs de RUE
ou

ETGE est vide!

Je m'explique:

Si je recherche tous les clients qui habitent dans la RUE AAA
je remplis mon champs RUER par AAA et je lance la requete
Du coup, j'ai tous les clients qui habitent dans RUE AAA quelque soit leur
ETGE excepté ceux sans ETGE !!!

Comment faire pour avoir tous les Clients même ceux dont l'ETGE est vide
???


le Code SQL de ma requete:

SELECT TClient.Rue, TClient.Etge
FROM TClient
WHERE (((TClient.Rue) Like "*" & [forms]![F1]![RUER] & "*")
AND ((TClient.Etge) Like "*" & [forms]![F1]![ETGER] & "*"));



--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------






Avatar
Raymond [mvp]
Bonjour.

essaise ceci:
SELECT TClient.Rue AS Expr1, TClient.Etge AS Expr2
FROM TClient
WHERE (((([TClient].[Rue]) Like "*" & [forms]![F1]![RUER] & "*") Or
([TClient].[Rue]) Is Null) AND ((([TClient].[Etge]) Like "*" &
[forms]![F1]![ETGER] & "*") Or ([TClient].[Etge]) Is Null));


--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"RaphK34" a écrit dans le message de news:
O$
Bonjour,

Un Probleme de Recherche d'un Client par son adresse

En simplifiant avec des données partielles on obtient:

Soit une Table Client avec RUE et ETGE

Je recherche les clients via des arguments dans un formulaire F1 par RUER
et
ETGER
j'ai donc une requête source de mon formulaire de résultat
le critère pour RUE est donc :

Like "*" & forms!F1!RUER & "*"

et pour ETGE:

Like "*" & forms!f1!ETGER & "*"

(j'ai besoin des "*" pour des recherches avec argument partiel)

Tout fonctionne a merveille sauf si par malheur un des deux champs de RUE
ou
ETGE est vide!

Je m'explique:

Si je recherche tous les clients qui habitent dans la RUE AAA
je remplis mon champs RUER par AAA et je lance la requete
Du coup, j'ai tous les clients qui habitent dans RUE AAA quelque soit leur
ETGE excepté ceux sans ETGE !!!

Comment faire pour avoir tous les Clients même ceux dont l'ETGE est vide
???

le Code SQL de ma requete:

SELECT TClient.Rue, TClient.Etge
FROM TClient
WHERE (((TClient.Rue) Like "*" & [forms]![F1]![RUER] & "*")
AND ((TClient.Etge) Like "*" & [forms]![F1]![ETGER] & "*"));



--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------






Avatar
RaphK34
Bonsoir,

j'ai donc essayé et j'obtiens donc le code SQL:

SELECT TClient.NomRue, TClient.Etge
FROM TClient
WHERE (((TClient.NomRue) Like "*" & [forms]![F1]![RUER] & "*") AND
((TClient.Etge)=IIf(IsNull([forms]![F1]![EtgeR]),[Etge],(TClient.Etge) Like
"*" & [forms]![F1]![EtgeR] & "*")));

mais malheureusement ça ne fonctionne pas correctement :(
En effet lorsque ETGER est Null, la requête donne tout sauf là où
ETGE(Table) est null,
et si ETGER n'est pas Null en revanche ça donne 0 Result :((

Mais on va y arriver c'est sûr ;)

--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------



"Gafish" a écrit dans le message de news:

| Bonjour,
|
| Tu construis ton critère avec un VraiFaux. Dans ton cas par exemple tu
| testes si etage est null, s'il est nul tu mets etage en critères sinon tu
| mets le contenu de ton form.
| En gros :
| VraiFaux(IsNull([TonForm]![TonEtage]);[Etage];[TonForm]![TonEtage])
| où [Etage] est ici le champ de ta table Client, et TonForm!TonEtage c'est
la
| zone de texte TonEtage du form TonForm
|
| Arnaud
|
| "RaphK34" a écrit dans le message news:
| O$
| > Bonjour,
| >
| > Un Probleme de Recherche d'un Client par son adresse
| >
| > En simplifiant avec des données partielles on obtient:
| >
| > Soit une Table Client avec RUE et ETGE
| >
| > Je recherche les clients via des arguments dans un formulaire F1 par
RUER
| et
| > ETGER
| > j'ai donc une requête source de mon formulaire de résultat
| > le critère pour RUE est donc :
| >
| > Like "*" & forms!F1!RUER & "*"
| >
| > et pour ETGE:
| >
| > Like "*" & forms!f1!ETGER & "*"
| >
| > (j'ai besoin des "*" pour des recherches avec argument partiel)
| >
| > Tout fonctionne a merveille sauf si par malheur un des deux champs de
RUE
| ou
| > ETGE est vide!
| >
| > Je m'explique:
| >
| > Si je recherche tous les clients qui habitent dans la RUE AAA
| > je remplis mon champs RUER par AAA et je lance la requete
| > Du coup, j'ai tous les clients qui habitent dans RUE AAA quelque soit
leur
| > ETGE excepté ceux sans ETGE !!!
| >
| > Comment faire pour avoir tous les Clients même ceux dont l'ETGE est vide
| ???
| >
| > le Code SQL de ma requete:
| >
| > SELECT TClient.Rue, TClient.Etge
| > FROM TClient
| > WHERE (((TClient.Rue) Like "*" & [forms]![F1]![RUER] & "*")
| > AND ((TClient.Etge) Like "*" & [forms]![F1]![ETGER] & "*"));
| >
| >
| >
| > --
| > @+ Raph.
| >
| > --------------------------------------------
| > Merci de répondre sur le NG
| > Toutes remarques bienvenues !
| >
| > Pour un contact direct, utiliser:
| > en enlevant nospam.
| > --------------------------------------------
| >
| >
| >
| >
|
|
Avatar
RaphK34
Merci Raymond, mais ...

Ta requête fonctionne correctement, mais je désire lorsque j'ai un argument
de recherche non null ne pas avoir les Null!
exple: si je mets "1" dans EtgeR, je ne désire obtenir que les Etges avec un
"1" dedans (1;10;11; ... ) et pas un Etge Vide !


--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------



"Raymond [mvp]" a écrit dans le message de
news:
| Bonjour.
|
| essaise ceci:
| SELECT TClient.Rue AS Expr1, TClient.Etge AS Expr2
| FROM TClient
| WHERE (((([TClient].[Rue]) Like "*" & [forms]![F1]![RUER] & "*") Or
| ([TClient].[Rue]) Is Null) AND ((([TClient].[Etge]) Like "*" &
| [forms]![F1]![ETGER] & "*") Or ([TClient].[Etge]) Is Null));
|
|
| --
| @+
| Raymond Access MVP
| http://OfficeSystem.Access.free.fr/
| http://users.skynet.be/mpfa/ pour débuter sur le forum
|
|
| "RaphK34" a écrit dans le message de news:
| O$
| > Bonjour,
| >
| > Un Probleme de Recherche d'un Client par son adresse
| >
| > En simplifiant avec des données partielles on obtient:
| >
| > Soit une Table Client avec RUE et ETGE
| >
| > Je recherche les clients via des arguments dans un formulaire F1 par
RUER
| > et
| > ETGER
| > j'ai donc une requête source de mon formulaire de résultat
| > le critère pour RUE est donc :
| >
| > Like "*" & forms!F1!RUER & "*"
| >
| > et pour ETGE:
| >
| > Like "*" & forms!f1!ETGER & "*"
| >
| > (j'ai besoin des "*" pour des recherches avec argument partiel)
| >
| > Tout fonctionne a merveille sauf si par malheur un des deux champs de
RUE
| > ou
| > ETGE est vide!
| >
| > Je m'explique:
| >
| > Si je recherche tous les clients qui habitent dans la RUE AAA
| > je remplis mon champs RUER par AAA et je lance la requete
| > Du coup, j'ai tous les clients qui habitent dans RUE AAA quelque soit
leur
| > ETGE excepté ceux sans ETGE !!!
| >
| > Comment faire pour avoir tous les Clients même ceux dont l'ETGE est vide
| > ???
| >
| > le Code SQL de ma requete:
| >
| > SELECT TClient.Rue, TClient.Etge
| > FROM TClient
| > WHERE (((TClient.Rue) Like "*" & [forms]![F1]![RUER] & "*")
| > AND ((TClient.Etge) Like "*" & [forms]![F1]![ETGER] & "*"));
| >
| >
| >
| > --
| > @+ Raph.
| >
| > --------------------------------------------
| > Merci de répondre sur le NG
| > Toutes remarques bienvenues !
| >
| > Pour un contact direct, utiliser:
| > en enlevant nospam.
| > --------------------------------------------
| >
| >
| >
| >
|
|
Avatar
Raymond [mvp]
ta question était donc mal posée ?

Comment faire pour avoir tous les Clients même ceux dont l'ETGE est vide ???

on verra ça demain , n'est-ce pas ?

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"RaphK34" a écrit dans le message de news:

Merci Raymond, mais ...

Ta requête fonctionne correctement, mais je désire lorsque j'ai un
argument
de recherche non null ne pas avoir les Null!
exple: si je mets "1" dans EtgeR, je ne désire obtenir que les Etges avec
un
"1" dedans (1;10;11; ... ) et pas un Etge Vide !


--
@+ Raph.


Avatar
RaphK34
oui, merci demain à partir de 11h30 , car avant je serais absent ;)

Merci d'avance de ton aide

--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------



"Raymond [mvp]" a écrit dans le message de
news: Oc%
| ta question était donc mal posée ?
|
| Comment faire pour avoir tous les Clients même ceux dont l'ETGE est vide
???
|
| on verra ça demain , n'est-ce pas ?
|
| --
| @+
| Raymond Access MVP
| http://OfficeSystem.Access.free.fr/
| http://users.skynet.be/mpfa/ pour débuter sur le forum
|
|
| "RaphK34" a écrit dans le message de news:
|
| > Merci Raymond, mais ...
| >
| > Ta requête fonctionne correctement, mais je désire lorsque j'ai un
| > argument
| > de recherche non null ne pas avoir les Null!
| > exple: si je mets "1" dans EtgeR, je ne désire obtenir que les Etges
avec
| > un
| > "1" dedans (1;10;11; ... ) et pas un Etge Vide !
| >
| >
| > --
| > @+ Raph.
|
|
Avatar
Raymond [mvp]
Il faut reposer la question autrement car dans tous les cas les
enregistrements à champ null ne sont pas pris en compte et compte tenu du
double test tous les enregistrements null sont ignorés ou tous sont pris en
compte.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"RaphK34" a écrit dans le message de news:
utAy$
oui, merci demain à partir de 11h30 , car avant je serais absent ;)

Merci d'avance de ton aide

--
@+ Raph.



Avatar
RaphK34
En fait, pour simplifier:

si argument de recherche vide => aucune "restriction"
si argument non vide => Like *argument*

Au début je pensais y arriver avec:
iif(len(Argument)=0,,like"*" & Argument & "*")

mais j'avoue avoir plus que du mal ...
(ça fait 36 hrs que ça essaye de murrir, mais ...)

--
@+ Raph.

--------------------------------------------
Merci de répondre sur le NG
Toutes remarques bienvenues !

Pour un contact direct, utiliser:
en enlevant nospam.
--------------------------------------------



"Raymond [mvp]" a écrit dans le message de
news:
| Il faut reposer la question autrement car dans tous les cas les
| enregistrements à champ null ne sont pas pris en compte et compte tenu du
| double test tous les enregistrements null sont ignorés ou tous sont pris
en
| compte.
|
| --
| @+
| Raymond Access MVP
| http://OfficeSystem.Access.free.fr/
| http://users.skynet.be/mpfa/ pour débuter sur le forum
|
|
| "RaphK34" a écrit dans le message de news:
| utAy$
| > oui, merci demain à partir de 11h30 , car avant je serais absent ;)
| >
| > Merci d'avance de ton aide
| >
| > --
| > @+ Raph.
| >
|
|
Avatar
mouly
"Raymond [mvp]" écrivait
news::

Bonjour.

essaise ceci:
SELECT TClient.Rue AS Expr1, TClient.Etge AS Expr2
FROM TClient
WHERE (((([TClient].[Rue]) Like "*" & [forms]![F1]![RUER] & "*") Or
([TClient].[Rue]) Is Null) AND ((([TClient].[Etge]) Like "*" &
[forms]![F1]![ETGER] & "*") Or ([TClient].[Etge]) Is Null));


il faut rajouter aussi le test de la zone de texte du formulaire

on retourne ceux qui sont like la zone de texte quand elle n'est pas
vide:
(([TClient].[Rue]) Like "*" & [forms]![F1]![RUER] & "*")
on retourne aussi ceux qui sont null si la zone de texte est vide
(([TClient].[Rue]) is Null And len([forms]![F1]![RUER]) = 0 )

ce qui fait une clause Where pas belle du tout
( ([TClient].[Rue] Like "*" & [forms]![F1]![RUER] & "*")
OR
([TClient].[Rue] is Null And len([forms]![F1]![RUER]) = 0 )
)
AND
( ... pareil pour le test sur les rues...
)


Probablement que tu gagnerais en clareté si tu faisait trois requetes :
un select quand on ne cherche que sur les rues
un autre quand on ne cherche que sur les etages
et un dernier lorsque l'on cherche sur les deux
ton formulaire appelant la bonne requête en fonction des zones de texte

--
mouly
mouly2 at yahoo dot com