Developpez.com - Rubrique Office

Le Club des Développeurs et IT Pro

Requêtes Access: L'opérateur IN ou comment utiliser une liste d'éléments dans vos requêtes

Par Fabrice Constans (Loufab)

Le 2011-08-07 09:22:21, par loufab, Rédacteur/Modérateur
Bonjour,

Dans ce tutoriel, vous apprendrez à utiliser l'opérateur SQL In() avec une zone de liste pour effectuer vos filtres à l'ouverture de formulaires/états.

Vos commentaires sont les bienvenues.

http://loufab.developpez.com/tutorie...s/operateur-in

Cordialement,
  Discussion forum
12 commentaires
  • f-leb
    Responsable Arduino et Systèmes Embarqués
    re moi,
    Code :
    1
    2
    3
    4
    5
    Personne
    id	Nom	DateNaissance	DateDeces
    1	riri	05/09/1923	04/12/1968
    2	fifi	04/12/1968	23/02/2010
    3	loulou	15/03/1912
    Quelles sont les personnes dont la date de naissance ou la date de décès est 04/12/1968 ?

    Code :
    1
    2
    SELECT * FROM Personne
    WHERE #12/4/1968# In (DateNaissance,DateDeces);
    Résultat : id=1 et id=2

    Bizarre comme utilisation du IN, hein ?
  • f-leb
    Responsable Arduino et Systèmes Embarqués
    bonjour loufab,

    c'est toujours un plaisir de découvrir tes tutoriels et également très utile pour les membres.

    ...Il évite de longs et complexes algorithmes de construction de clause WHERE...

    on peut l'employer également dans la clause HAVING:
    Code sql :
    1
    2
    3
    4
    SELECT ... 
    FROM... 
    GROUP BY... 
    HAVING Count(*) IN (1,3,9,15)

    Je vais essayer de trouver un exemple concret
  • philben
    Membre chevronné
    bonjour,

    Dans le chapitre <Variante avec des dates>, il est nécessaire, je pense, que les dates soient converties au format m/d/yy avant de les placer dans la clause Where.

    Bon tut,

    a+

    philippe
  • Pierre Fauconnier
    Responsable Office & Excel
    Salut.

    Ne peut-on pas convertir les dates en long pour éviter les méprises?

    Sinon, excellent tuto
  • loufab
    Rédacteur/Modérateur
    Tout à fait Where et Having n'ont comme différence que le type de requete (avec regroupement ou pas)
  • User
    Rédacteur/Modérateur
    Excellente idée maintes fois évoquée sur le forum
  • loufab
    Rédacteur/Modérateur
    En effet !
    J'ai intégré vos remarques. Merci à vous 2.
  • loufab
    Rédacteur/Modérateur
    Absolument ! ça mérite un ajout dans le tuto.
  • Je pense qu'il faudrait aussi mettre un passage par rapport aux injection sql : les clause IN sont pas facilement convertible en requêtes paramétrées, du coup on fait souvent de la concaténation de chaine => risque d'injection SQL. (sur les exemples de l’article dans un environnement ou l'utilisateur peut modifier les valeur envoyées par le formulaire,web par ex, il est possible de faire une injection SQL)
  • guidav
    Membre éprouvé
    Autre petit ajout nécessaire à mon avis : on ne peut pas faire
    Code :
    in (element1, element2, ..., Null), il faut faire in (element1, ...) or is null
    D'autre part, il n'est pas possible de mettre de comparaison LIKE :
    Code :
    in ("toto*", "titi*")
    ne renverra pas toto1 ou titi2.