Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Petite requête SQL

7 réponses
Avatar
Damien Dutreil
bonjour,
une petit conseil pour une requête sur laquelle, je bute depuis trop
longtemps:

Dans une table, j'ai un champ DADH
Dans un formulaire, j'ai deux champs AN1 et AN2. Ces deux champs sont
saisissables mais peuvent être vide ce qui veut dire toutes les valeurs.
L'extrait de ma requête SQL doit être quelque chose comme:

(((INDIVIDU.DADH)=[FORMS]![TRI]![AN1] Or
(INDIVIDU.DADH)=[FORMS]![TRI]![AN2)]) And (INDIVIDU.DADH) Like
([FORMS]![TRI]![AN1] & "*") And (INDIVIDU.DADH) Like
([FORMS]![TRI]![AN2] & "*"))

Bon, hélas, ça ne marche pas. Il me faut donc quelque chose pour lui
dire de prendre le contenu de AN1 ou de AN2 s'ils sont non vides ou bien
* si les deux champs sont vides.
Merci de votre aide,

7 réponses

Avatar
Sylvain Lafontaine
L'utilisation du « Like ... & "*" » est-elle votre interprétation pour
tester si les deux champs sont nuls ou si elle a une autre fonction?

Si vous voulez tester pour la présence de deux champs vides, utilisez plutôt
quelque chose comme:

(FORMS]![TRI]![AN1] is Null and FORMS]![TRI]![AN2)] is Null) or ...

Il y a également la fonction isNull() en VBA ainsi que la fonction Nz().
Par exemple:

(Nz (FORMS]![TRI]![AN1], 0) = 0 And Nz (FORMS]![TRI]![AN2], 0) = 0) or
...

Il y a également que votre champ ait la valeur Chaîne vide ("", empty
string) à la place de la valeur Nulle. Facile à vérifier/tester.

En passant, je suis plus familier avec le T-SQL de SQL-Server qu'avec le
SQL d'Access; j'ai donc pu faire une erreur ci-haut.

S. L.

"Damien Dutreil" wrote in message
news:
bonjour,
une petit conseil pour une requête sur laquelle, je bute depuis trop
longtemps:

Dans une table, j'ai un champ DADH
Dans un formulaire, j'ai deux champs AN1 et AN2. Ces deux champs sont
saisissables mais peuvent être vide ce qui veut dire toutes les valeurs.
L'extrait de ma requête SQL doit être quelque chose comme:

(((INDIVIDU.DADH)=[FORMS]![TRI]![AN1] Or
(INDIVIDU.DADH)=[FORMS]![TRI]![AN2)]) And (INDIVIDU.DADH) Like
([FORMS]![TRI]![AN1] & "*") And (INDIVIDU.DADH) Like ([FORMS]![TRI]![AN2]
& "*"))

Bon, hélas, ça ne marche pas. Il me faut donc quelque chose pour lui dire
de prendre le contenu de AN1 ou de AN2 s'ils sont non vides ou bien * si
les deux champs sont vides.
Merci de votre aide,


Avatar
Damien Dutreil
Sylvain Lafontaine wrote:

L'utilisation du « Like ... & "*" » est-elle votre interprétation pour
tester si les deux champs sont nuls ou si elle a une autre fonction?


je n'ai pas assez simplifié ma requête: c'est pour ajouter
systématiquement une * au champ saisi.

Si vous voulez tester pour la présence de deux champs vides, utilisez plutôt
quelque chose comme:

(FORMS]![TRI]![AN1] is Null and FORMS]![TRI]![AN2)] is Null) or ...

Il y a également la fonction isNull() en VBA ainsi que la fonction Nz().
Par exemple:

(Nz (FORMS]![TRI]![AN1], 0) = 0 And Nz (FORMS]![TRI]![AN2], 0) = 0) or
...

Il y a également que votre champ ait la valeur Chaîne vide ("", empty
string) à la place de la valeur Nulle. Facile à vérifier/tester.

En passant, je suis plus familier avec le T-SQL de SQL-Server qu'avec le
SQL d'Access; j'ai donc pu faire une erreur ci-haut.



Intervention très pertinente qui m'a permis de mieux comprendre ce que
je cherchais:
c'est donc,
[FORMS]![TRI]![AN1] Ou [FORMS]![TRI]![AN2] Ou
Si ( FORMS]![TRI]![AN1] is Null and FORMS]![TRI]![AN2)] is Null) alors "%"

je ne sais pas comment écrire cette 2e partie de ma requête.
j'ai tenté IIF(estNull(FORMS]![TRI]![AN1]),"%","") mais ça ne marche pas :-(
des idées ?

Avatar
Sylvain Lafontaine
Si vous voulez rajouter systématiquement le caractère "%", vous devez
utiliser quelque chose comme:

IIF(estNull(FORMS]![TRI]![AN1]), "", FORMS]![TRI]![AN1]) & "%"

ceci afin de remplacer la chaîne nulle par la chaîne vide, sinon le résultat
final de la concaténation sera toujours la valeur nulle. La fonction Nz
peut également être utilisée, je crois, et va donner une meilleure
performance que IIF dans ce cas-ci:

Nz (FORMS]![TRI]![AN1], "") & "%"

Faites également attention aux caractères * et %, je ne sais plus lequel
des deux qu'il faut utiliser en Access; quoiqu'il soit possible que les
dernières versions de JET puissent accepter les deux.

S. L.

"Damien Dutreil" wrote in message
news:
Sylvain Lafontaine wrote:

L'utilisation du « Like ... & "*" » est-elle votre interprétation pour
tester si les deux champs sont nuls ou si elle a une autre fonction?


je n'ai pas assez simplifié ma requête: c'est pour ajouter
systématiquement une * au champ saisi.

Si vous voulez tester pour la présence de deux champs vides, utilisez
plutôt quelque chose comme:

(FORMS]![TRI]![AN1] is Null and FORMS]![TRI]![AN2)] is Null) or ...

Il y a également la fonction isNull() en VBA ainsi que la fonction
Nz(). Par exemple:

(Nz (FORMS]![TRI]![AN1], 0) = 0 And Nz (FORMS]![TRI]![AN2], 0) = 0)
or ...

Il y a également que votre champ ait la valeur Chaîne vide ("", empty
string) à la place de la valeur Nulle. Facile à vérifier/tester.

En passant, je suis plus familier avec le T-SQL de SQL-Server qu'avec
le SQL d'Access; j'ai donc pu faire une erreur ci-haut.



Intervention très pertinente qui m'a permis de mieux comprendre ce que je
cherchais:
c'est donc,
[FORMS]![TRI]![AN1] Ou [FORMS]![TRI]![AN2] Ou
Si ( FORMS]![TRI]![AN1] is Null and FORMS]![TRI]![AN2)] is Null) alors "%"

je ne sais pas comment écrire cette 2e partie de ma requête.
j'ai tenté IIF(estNull(FORMS]![TRI]![AN1]),"%","") mais ça ne marche pas
:-(
des idées ?





Avatar
Damien Dutreil
Sylvain Lafontaine wrote:

Si vous voulez rajouter systématiquement le caractère "%", vous devez
utiliser quelque chose comme:

IIF(estNull(FORMS]![TRI]![AN1]), "", FORMS]![TRI]![AN1]) & "%"

ceci afin de remplacer la chaîne nulle par la chaîne vide, sinon le résultat
final de la concaténation sera toujours la valeur nulle. La fonction Nz
peut également être utilisée, je crois, et va donner une meilleure
performance que IIF dans ce cas-ci:

Nz (FORMS]![TRI]![AN1], "") & "%"

Faites également attention aux caractères * et %, je ne sais plus lequel
des deux qu'il faut utiliser en Access; quoiqu'il soit possible que les
dernières versions de JET puissent accepter les deux.

S. L.


merci beaucoup,
après avoir simplifié le modèle, il m esemble que j'ai besoin de:
FORMS]![TRI]![AN1] ou FORMS]![TRI]![AN2] ou
IIf(Nz(FORMS]![TRI]![AN1])+Nz(FORMS]![TRI]![AN2])=0,"*","")

mais l'evaluateur de requete refuse sur le "*"
alors, j'ai simplifié pour arriver à une requête:
IIf(5>0,"*","")

et toujours "la syntaxe de l'expression entrée n'est pas correcte"
Pourtant en regardant l'aide sur la fonction IIf, tout semble OK. Je ne
comprends pas sauf si l'expression conditionnelle n'est pas acceptée
comme critères mais comment faire alors ?

Avatar
Ilan
Bonsoir,
Essaie en remplacant les , par des ;


Sylvain Lafontaine wrote:

Si vous voulez rajouter systématiquement le caractère "%", vous devez
utiliser quelque chose comme:

IIF(estNull(FORMS]![TRI]![AN1]), "", FORMS]![TRI]![AN1]) & "%"

ceci afin de remplacer la chaîne nulle par la chaîne vide, sinon le résultat
final de la concaténation sera toujours la valeur nulle. La fonction Nz
peut également être utilisée, je crois, et va donner une meilleure
performance que IIF dans ce cas-ci:

Nz (FORMS]![TRI]![AN1], "") & "%"

Faites également attention aux caractères * et %, je ne sais plus lequel
des deux qu'il faut utiliser en Access; quoiqu'il soit possible que les
dernières versions de JET puissent accepter les deux.

S. L.


merci beaucoup,
après avoir simplifié le modèle, il m esemble que j'ai besoin de:
FORMS]![TRI]![AN1] ou FORMS]![TRI]![AN2] ou
IIf(Nz(FORMS]![TRI]![AN1])+Nz(FORMS]![TRI]![AN2])=0,"*","")

mais l'evaluateur de requete refuse sur le "*"
alors, j'ai simplifié pour arriver à une requête:
IIf(5>0,"*","")

et toujours "la syntaxe de l'expression entrée n'est pas correcte"
Pourtant en regardant l'aide sur la fonction IIf, tout semble OK. Je ne
comprends pas sauf si l'expression conditionnelle n'est pas acceptée
comme critères mais comment faire alors ?




Avatar
Damien Dutreil
Ilan wrote:

Bonsoir,
Essaie en remplacant les , par des ;


bonsoir,
super: plus d'erreur de syntaxe en mettant des ;
très étonnant car j'avais lu partout que c'était des , mais on ne va pas
bouder son plaisir :-)
merci beaucoup,

Avatar
Sylvain Lafontaine
Cela fait partie de la configuration des paramètres régionaux, « List
Separator », de votre machine.

S. L.

"Damien Dutreil" wrote in message
news:
Ilan wrote:

Bonsoir,
Essaie en remplacant les , par des ;


bonsoir,
super: plus d'erreur de syntaxe en mettant des ;
très étonnant car j'avais lu partout que c'était des , mais on ne va pas
bouder son plaisir :-)
merci beaucoup,