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

Access 2000 - VraiFaux et valeur nulle

4 réponses
Avatar
mission
Bonsoir,
Petit problème du week-end :
cette requête me renvoit ce qu'elle veut, pas ce que je veux :-(
SELECT tblTravaux.Client, tblTravaux.Terminé FROM tblTravaux WHERE
(((tblTravaux.Terminé)=IIf([Test]="0",[Terminé] Is
Null,IIf([Test]="1",[Terminé] Is Not Null,[Terminé]))));
Ce que je souhaite, c'est la liste des Clients dont les travaux ne sont pas
terminés si Test est à 0 dans mon formulaire, ceux dont les travaux sont
terminés si Test est à 1 et tous les clients sinon, sachant que le champ
Terminé est une date.
Je crois avoir tout essayé, sans succès. Je n'obtiens que la liste des
clients dont les travaux sont terminés en donnant une valeur différente de 0
à Test et ... rien si je lui donne la valeur 0 :-(
Bien sûr, la requête réelle contient [Forms]![mon_formulaire]![mon_champ].
Cette même formule fonctionne déjà pour limiter les dates des travaux.
J'ai fouillé 'Groupes Google microsoft.public.fr.access' sans trouver
chaussure à mon pied.
Quelqu'un aurait-il(elle) la gentillesse de me montrer où je me trompe ?
Cordialement
PG

4 réponses

Avatar
3stone
Salut,

"mission"
| Petit problème du week-end :
| cette requête me renvoit ce qu'elle veut, pas ce que je veux :-(
| SELECT tblTravaux.Client, tblTravaux.Terminé FROM tblTravaux WHERE
| (((tblTravaux.Terminé)=IIf([Test]="0",[Terminé] Is
| Null,IIf([Test]="1",[Terminé] Is Not Null,[Terminé]))));
| Ce que je souhaite, c'est la liste des Clients dont les travaux ne sont pas
| terminés si Test est à 0 dans mon formulaire, ceux dont les travaux sont
| terminés si Test est à 1 et tous les clients sinon, sachant que le champ
| Terminé est une date.


Ton test avec iif() est plus que bizarre...

IIf([Test]="0",[Terminé] Is Null,IIf([Test]="1",[Terminé] Is Not Null,[Terminé]))));

=>> [Test]="0"
[Test] ne fait pas partie des champs de la requête

=>> = "0"
"0" est une chaîne de caractères... c'est ce que doit contenir [Test] ??

=>> iif([Test]="0", réponse si vrai , réponse si faux)
[Terminé] Is Null n'est pas une réponse valide !

Même problème pour la seconde partie :
iif([Test]="1", ??? , [Terminé])

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
Eric
Bonsoir,

Dès lors que le champ Termine est une date, soit elle est renseignée
donc le job est terminé, soit elle ne l'est pas et le job est en cours.
Donc, je ne vois pas comment tu peux faire ça (tes 3 cas de figure) avec
un critère assimilable à un booléen (Null ou Pas Null) dans ta requete.

Reste la solution de construire le SQL de la requête en VBA suivant la
valeur de ton contrôle de formulaire puis de l'ouvrir.

Bonsoir,
Petit problème du week-end :
cette requête me renvoit ce qu'elle veut, pas ce que je veux :-(
SELECT tblTravaux.Client, tblTravaux.Terminé FROM tblTravaux WHERE
(((tblTravaux.Terminé)=IIf([Test]="0",[Terminé] Is
Null,IIf([Test]="1",[Terminé] Is Not Null,[Terminé]))));
Ce que je souhaite, c'est la liste des Clients dont les travaux ne sont pas
terminés si Test est à 0 dans mon formulaire, ceux dont les travaux sont
terminés si Test est à 1 et tous les clients sinon, sachant que le champ
Terminé est une date.
Je crois avoir tout essayé, sans succès. Je n'obtiens que la liste des
clients dont les travaux sont terminés en donnant une valeur différente de 0
à Test et ... rien si je lui donne la valeur 0 :-(
Bien sûr, la requête réelle contient [Forms]![mon_formulaire]![mon_champ].
Cette même formule fonctionne déjà pour limiter les dates des travaux.
J'ai fouillé 'Groupes Google microsoft.public.fr.access' sans trouver
chaussure à mon pied.
Quelqu'un aurait-il(elle) la gentillesse de me montrer où je me trompe ?
Cordialement
PG




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
mission
Bonjour 3stone, bonjour Eric,

Je vais essayer d'être plus précis.

Dans un formulaire, j'ai un groupe d'options à 3 positions : Travaux en
cours (0), Travaux terminés (1), Tous (2) (les 2 ensemble).
Comme ma requête sur laquelle s'appuie le sf affichant le résultat ne me
renvoit pas le résultat escompter, j'en ai fait une autre avec juste 2
champs, et un 'bidon' pour simuler le groupe d'options. Qui ne marche pas
non plus.
Tout ce que j'ai trouvé sur le groupe concerne des valeurs 'null' à
l'entrée. Moi je la recherche à la sortie.
Je souhaite donc, si la valeur est 0 n'obtenir que la liste des travaux en
cours, si c'est 1, ceux qui sont terminés et si c'est 2 l'ensemble de ma
table.
Je n'aurai peut-être pas dû donner le sql, mais plutôt la formule intégrée
dans la requête :
VraiFaux([Test]="0";[Terminé] Est Null;VraiFaux([Test]="1";[Terminé] Est Pas
Null;[Terminé]))
J'ai donc bien toutes mes conditions, la réponse 'si non' à la première
entraînant la résolution d'un second test.
Le comble est que j'utilise la même chose pour filtrer mes clients (1 ou
tous), et que ça ne marche pas non plus avec un test booléen simple. Je
précise tout de même que le champ 'Terminé' de ma table est bien vide par
défaut, et que le test direct (est null dans la requête) passe.
Je suppose donc soit que je n'ai rien compris, soit qu'il y a une astuce
lorsque je dois tester un champ date.
Merci encore pour vos suggestions.
PG

Dans son message ,
l'honorable 3stone écrivait
Salut,

"mission"
Petit problème du week-end :
cette requête me renvoit ce qu'elle veut, pas ce que je veux :-(
SELECT tblTravaux.Client, tblTravaux.Terminé FROM tblTravaux WHERE
(((tblTravaux.Terminé)=IIf([Test]="0",[Terminé] Is
Null,IIf([Test]="1",[Terminé] Is Not Null,[Terminé]))));
Ce que je souhaite, c'est la liste des Clients dont les travaux ne
sont pas terminés si Test est à 0 dans mon formulaire, ceux dont les
travaux sont terminés si Test est à 1 et tous les clients sinon,
sachant que le champ Terminé est une date.



Ton test avec iif() est plus que bizarre...

IIf([Test]="0",[Terminé] Is Null,IIf([Test]="1",[Terminé] Is Not
Null,[Terminé]))));

=>> [Test]="0"
[Test] ne fait pas partie des champs de la requête

=>> = "0"
"0" est une chaîne de caractères... c'est ce que doit contenir [Test]
??

=>> iif([Test]="0", réponse si vrai , réponse si faux)
[Terminé] Is Null n'est pas une réponse valide !

Même problème pour la seconde partie :
iif([Test]="1", ??? , [Terminé])



Avatar
mission
Bonsoir,
Je me réponds à moi-même, au risque de me faire rabrouer par 3stone qui se
fâche quand on poste un code pourri ;-)
A force de tests, j'en suis arrivé à la conclusion que les requêtes dans
Access 2000 n'aiment pas être imbriquées.
J'ai donc créé dans ma table un champ complémentaire (Pt) valeur par défaut
0 mis à 1 par l'évènement kivabien dans mon formulaire. J'ai intégré ce
champ dans la requête principale et teste dessus le contenu de ma boîte
d'options [Test] comprenant 3 boutons (en cours=0, terminé=1, tous=2) :
VraiFaux([ma_boîte_d'options]=2;[Pt];[ma_boîte_d'options] .
Maintenant, j'ai ce que je veux.
J'accepte toutefois les coups de règle sur les doigts de la part de qui me
démontre qu'il y a plus ... conventionnel :-)
Merci d'avoir bien voulu me lire, voire me répondre pour 3stone et Eric.
PG

Dans son message ,
l'honorable 3stone écrivait
Salut,

"mission"
Petit problème du week-end :
cette requête me renvoit ce qu'elle veut, pas ce que je veux :-(
SELECT tblTravaux.Client, tblTravaux.Terminé FROM tblTravaux WHERE
(((tblTravaux.Terminé)=IIf([Test]="0",[Terminé] Is
Null,IIf([Test]="1",[Terminé] Is Not Null,[Terminé]))));
Ce que je souhaite, c'est la liste des Clients dont les travaux ne
sont pas terminés si Test est à 0 dans mon formulaire, ceux dont les
travaux sont terminés si Test est à 1 et tous les clients sinon,
sachant que le champ Terminé est une date.