Developpez.com - Rubrique Access

Le Club des Développeurs et IT Pro

Comment rechercher une valeur dans une table qui contient des paliers

Par Claude Leloup

Le 2012-07-02 21:10:21, par ClaudeLELOUP, Rédacteur/Modérateur
Bonjour,

Je vous propose un petit tutoriel qui s'adresse aux débutants.
Il s'agit de rechercher dans une table, une valeur qui ne s'y trouve pas nécessairement et de choisir selon les circonstances : la valeur immédiatement supérieure (ou éventuellement égale) ou la valeur immédiatement inférieure.
Par exemple :



Access offre plusieurs voies pour atteindre ce but.
Dans ce tutoriel, nous utiliserons uniquement des fonctions intégrées sans recourir à du code VBA.
Nous aborderons l'utilisation des fonctions intégrées au moyen de quelques exemples pour illustrer la recherche d'une date, d'une heure, d'un texte ou d'une valeur numérique dans une table.
Si vous souhaitez donner votre avis sur ce tutoriel, profitez de cette discussion.
Merci déjà.
  Discussion forum
16 commentaires
  • f-leb
    Responsable Arduino et Systèmes Embarqués
    re moi,

    je n'ai pas résisté il fallait que je tente avec une requête, une requête à construire avec les assistants, pour obtenir ce tableau:


    Je m'étais dit qu'il ne reste plus qu'à chercher avec RechDom le taux dont la date saisie est située entre DateDebut et Datefin et le tour est joué (finger in ze nose).

    La requête s'écrit:
    Code sql :
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT TauxBCE.DateChangement AS DateDebut, 
           TauxBCE.Taux, 
           Nz(Min([TauxBCE_1].[DateChangement]) - 1, #12/31/2999#) AS DateFin 
    FROM   TauxBCE 
           LEFT JOIN TauxBCE AS TauxBCE_1 
                  ON TauxBCE_1.DateChangement > TauxBCE.DateChangement 
    GROUP  BY TauxBCE.DateChangement, 
              TauxBCE.Taux;

    Seulement à cause de l'inégalité dans la jointure, la requête n'est pas interprétable dans le QBE d'Access

    Bien essayé Fabien
  • fsmrel
    Expert éminent sénior
    Bonjour,

    L’effort réalisé par Fabien montre que la construction du tableau R_tauxBCE n’est pas un exercice trivial ; combien de développeurs ont-ils dû transpirer dans l’exercice fastidieux consistant à simuler des intervalles de dates ? (Un peu comme du temps des premières versions des SGBD/R, quand on ne disposait pas du type DATE et qu'on simulait tant bien que mal ce type et ses fonctions...)

    L’utilisation des périodes (et plus généralement des intervalles de toutes natures) n’est quand même pas rare.

    Est-ce que MS Access (que je ne connais pas très bien) propose un quelconque type INTERVALLE ? Dans la négative, permet-il aux laborieux utilisateurs que nous sommes de définir récursivement leurs propres types (avec les opérateurs qui vont bien) ? Par exemple avec MS SQL Server, c’est niet !

    Si cela était possible, en SQL natif, on pourrait coder :

    Code SQL :
    1
    2
    3
    4
    5
    6
    CREATE TABLE R_tauxBCE 
    ( 
            Periode    INTERVAL_DATE    NOT NULL 
          , Taux       DECIMAL(5,3)     NOT NULL 
        , PRIMARY KEY (Periode) 
    ) ;

    Où Periode est du type INTERVAL_DATE (type d’intervalle dont j’ai touché un mot ici).

    Connaître le taux au 1er avril 2010 devient évidemment quelque chose de simple, but manifestement recherché par Fabien :

    Code SQL :
    1
    2
    3
    SELECT Taux 
    FROM   R_tauxBCE 
    WHERE  '2010-04-01' BETWEEN BEGIN(Periode) AND END(Periode) ;


    Tiens les Anglais n’y mettent qu’un doigt !


    Vu l'utilisation de la lettre "z", ne s'agirait-il pas plutôt des Américains, friands de cette lettre ?
  • f-leb
    Responsable Arduino et Systèmes Embarqués


    yé nez pas changééé
    touiours lé même SGBéDéééé

    mé toua non plou, tou n'a pas changéééé
    ...

    refrain:...

  • f-leb
    Responsable Arduino et Systèmes Embarqués
    Claude,

    très bien illustré, mais surtout très pédagogique
  • Richard_35
    Expert confirmé
    Bonjour Claude et Fabien,

    Content de te "revoir", Claude (Fabien aussi, bien entendu ).

    Bravo pour ce tuto à la portée des non-VBA-istes.
  • ClaudeLELOUP
    Rédacteur/Modérateur
    Richard et Fabien,

    Content de vous saluer.

    Moins souvent ici que là-bas.

    Si le cœur vous en dit, il y a du boulot !
  • Salut Claude

    Excellent, avec de nombreux exemples d'utilisation des fonctions de domaines

    Philippe
  • ClaudeLELOUP
    Rédacteur/Modérateur
    Bonjour Philippe,

    Les tutoriels, c'est toi qui m'a donné l'envie d'en rédiger... et pour les fonctions de domaine, le tien fait référence.

    Bien à toi.
  • Domi2
    Expert éminent sénior
    Bonjour Claude,

    Moi qui ai toujours de la peine avec ces fonctions intégrées, je n'ai désormais plus beaucoup d'excuses.

    Les exemples sont très bien choisis et surtout fort bien expliqués.

    Bravo

    Domi2
  • ClaudeLELOUP
    Rédacteur/Modérateur
    Salut Fabien,

    finger in ze nose
    Tiens les Anglais n’y mettent qu’un doigt ! (À vérifier.)

    Peut-être que tu n’arrives pas à la fin, mais nom d’une pipe quelle performance dans la première partie !