OVH Cloud OVH Cloud

requete sql avec parametres

3 réponses
Avatar
celine
Bonjour,

Je travaille sur une base de données avec Access 2000. J'ai une requête (sur
une seule table) qui me pose problème et qui est du style :

SELECT CODE_SALLE
FROM salles
WHERE LIBELLÉ_TYPE_SALLE=[saisir_type_salle]
AND LIBELLÉ_ÉQUIPEMENT=[saisir_eqpmt];

En gros je gère des salles qui ont un type de salle (par ex : labo,
sport...) et qui peuvent avoir 1 équipement (par ex : vidéo...) mais
l'équipement n'est pas obligatoire (saisie facultative).

Ma reqûete marche très bien si je cherche les salles du type que je saisis
et avec l'équipement que je saisis aussi...
Maintenant, imaginons que je cherche les salles de n'importe quel type qui
n'ont pas d'équipement : est-ce possible avec ma requête telle qu'elle est ?
car lorsque Access me demande de saisir le type de la salle : je mets rien
(je fais ENTREE) et idem pour le libellé de l'équipement...

Comment lui dire que la valeur à prendre est "NULL" si je ne saisis rien
lorsqu'il me demande de saisir un équipement ? Et comment lui dire que si je
ne saisis aucun type de salle c'est que je veux toutes les salles ?

Est-ce possible avec Access ? Si non est-ce possible avec Oracle (par ex en
utilisant NVL ou DECODE...) ?

Je vous remercie,
Céline.

3 réponses

Avatar
Raymond [mvp]
Bonjour.

si tu fais :
WHERE LIBELLÉ_TYPE_SALLE like "*" & [saisir_type_salle] & "*" AND
LIBELLÉ_ÉQUIPEMENT Like "*" & [saisir_eqpmt] & "*";
access ressortira tous les enregistrements dont le type est inclus dans la
saisie et si la saisie est nulle access ressortira tout. tu peux aussi
n'indiquer l'* que devant ou derrière selon tes besoisn.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour une meilleure
efficacité de tes interventions sur MPFA


"celine" a écrit dans le message de
news:
Bonjour,

Je travaille sur une base de données avec Access 2000. J'ai une requête
(sur

une seule table) qui me pose problème et qui est du style :

SELECT CODE_SALLE
FROM salles
WHERE LIBELLÉ_TYPE_SALLE=[saisir_type_salle]
AND LIBELLÉ_ÉQUIPEMENT=[saisir_eqpmt];

En gros je gère des salles qui ont un type de salle (par ex : labo,
sport...) et qui peuvent avoir 1 équipement (par ex : vidéo...) mais
l'équipement n'est pas obligatoire (saisie facultative).

Ma reqûete marche très bien si je cherche les salles du type que je saisis
et avec l'équipement que je saisis aussi...
Maintenant, imaginons que je cherche les salles de n'importe quel type qui
n'ont pas d'équipement : est-ce possible avec ma requête telle qu'elle est
?

car lorsque Access me demande de saisir le type de la salle : je mets rien
(je fais ENTREE) et idem pour le libellé de l'équipement...

Comment lui dire que la valeur à prendre est "NULL" si je ne saisis rien
lorsqu'il me demande de saisir un équipement ? Et comment lui dire que si
je

ne saisis aucun type de salle c'est que je veux toutes les salles ?

Est-ce possible avec Access ? Si non est-ce possible avec Oracle (par ex
en

utilisant NVL ou DECODE...) ?

Je vous remercie,
Céline.





Avatar
Xavier HUE
Bonjour Céline,

Pour répondre directement à ta question:

SELECT Table1.*
FROM Table1
WHERE (((IIf([txt1] Is Null,"",[txt1])) Like IIf([Saisir
type salle] Is Null,"*",[Saisir type salle])) AND ((IIf
([txt2] Is Null,"",[txt2])) Like IIf([Saisir type Equip]
Is Null,"*",[Saisir type Equip])));


Txt1 => LIBELLÉ_TYPE_SALLE
Txt2 => LIBELLÉ_ÉQUIPEMENT

Si par exemple ta table contient:
ID Txt1 Txt2
1 labo video
2 labo
3 sport
4 sport but foot
5 sport but basket

Répondre à la premire boite: sport
et valider directement la seconde boite, le résultat:
3 sport
4 sport but foot
5 sport but basket

Répondre à la premire boite: sport
et à la seconde boite: but*, le résultat:
4 sport but foot
5 sport but basket

C'est l'opérateur Like qui fait le travail.

Remarque au passage:

Je verrais plutôt:
TabSalle(IdSalle, DescriptionSAlle, IdTypeSalle)
TabTypeSalle(IdTypeSalle, DescriptionTypeSalle)
TabEquipement(IdEquipement, DescriptionEquipement)
TabEquipementSalle(IDSalle, IdEquipement)

Non?

Si tu dois enregistrer 2 équipements pour une salles??
Comment fais-tu?

Cordialement.
Avatar
celine
Merci Beaucoup à Raymond et Xavier car grace à vos réponses j'ai pu faire
des combinaisons avec les 2 solutions proposées et j'ai enfin trouvé ce que
je cherchais !!!!

Pour répondre rapidement à la remarque de Xavier :
ma requête était simplifiée pour en ressortir que l'essentiel concernant la
question. Je voulais juste un résultat proche de ce que je cherchais sans
compliquer la tâche...

Encore merci !!!
Céline.



"celine" a écrit dans le message de
news:
Bonjour,

Je travaille sur une base de données avec Access 2000. J'ai une requête
(sur

une seule table) qui me pose problème et qui est du style :

SELECT CODE_SALLE
FROM salles
WHERE LIBELLÉ_TYPE_SALLE=[saisir_type_salle]
AND LIBELLÉ_ÉQUIPEMENT=[saisir_eqpmt];

En gros je gère des salles qui ont un type de salle (par ex : labo,
sport...) et qui peuvent avoir 1 équipement (par ex : vidéo...) mais
l'équipement n'est pas obligatoire (saisie facultative).

Ma reqûete marche très bien si je cherche les salles du type que je saisis
et avec l'équipement que je saisis aussi...
Maintenant, imaginons que je cherche les salles de n'importe quel type qui
n'ont pas d'équipement : est-ce possible avec ma requête telle qu'elle est
?

car lorsque Access me demande de saisir le type de la salle : je mets rien
(je fais ENTREE) et idem pour le libellé de l'équipement...

Comment lui dire que la valeur à prendre est "NULL" si je ne saisis rien
lorsqu'il me demande de saisir un équipement ? Et comment lui dire que si
je

ne saisis aucun type de salle c'est que je veux toutes les salles ?

Est-ce possible avec Access ? Si non est-ce possible avec Oracle (par ex
en

utilisant NVL ou DECODE...) ?

Je vous remercie,
Céline.