IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête sur plusieurs plages de dates


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Requête sur plusieurs plages de dates
    Bonjour à tous
    j'aimerais savoir s'il est possible de paramétrer une requête qui recherche plusieurs plages de dates.
    J'ai une ListBox qui affiche les mois et l'année d'un champ date
    - Janvier 2012
    - Mars 2012
    - Octobre 2012
    La liste regroupe par mois tous les enregistrements datés de ce mois.
    Il peut y avoir une ou plusieurs dates pour un mois.
    Si je sélectionne le mois de janvier et le mois d'Octobre, j'aimerais avoir les dates entre 31/12/11 et 01/02/12, puis les dates entre 30/09/12 et 01/11/12.
    Je sais qu'il existe le paramètre BETWEEN. Dois-je les enchaîner avec des AND:
    "(Between DateDébut1 And DateFin1) And (Between DateDébut2 And DateFin2)"?
    Ou bien existe-t-il une autre méthode.
    Si quelqu'un peut me mettre sur la piste d'un tuto ou d'un exemple.
    Merci

  2. #2
    Membre régulier Avatar de Fluch
    Homme Profil pro
    Méthodiste flux
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Méthodiste flux
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Points : 81
    Points
    81
    Par défaut Critère date dans requête
    Oui c'est possible.

    Imagine deux contrôles format date.
    Dans le critère du champs date de ta requête, tu mets ceci :

    >= Formulaires![Nom_Formulaire]![Controle_Debut] and <= Formulaires![Nom_Formulaire]![Controle_Fin]

    Cela va filtrer les enregistrements dont les dates sont comprises entre les deux valeurs de contrôles Date de début et date de fin.
    Fluch

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Bonjour,
    Merci d'avoir répondu Flush.
    >= Formulaires![Nom_Formulaire]![Controle_Debut] and <= Formulaires![Nom_Formulaire]![Controle_Fin].

    J'ai compris cette formulation, mais si j'ai deux ou trois plages de dates, dois-je les aligner avec des Or dans la même formulation ? :

    >= Formulaires![Nom_Formulaire]![Controle_Debut1] and <= Formulaires![Nom_Formulaire]![Controle_Fin1] Or >= Formulaires![Nom_Formulaire]![Controle_Debut2] and <= Formulaires![Nom_Formulaire]![Controle_Fin2] Or etc....

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par Paninak Voir le message
    "(Between DateDébut1 And DateFin1) And (Between DateDébut2 And DateFin2)"
    si les 2 intervalles sont disjoints comme dans votre exemple cela sera toujours faux...
    il faut OR entre les BETWEEN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (Between DateDébut1 And DateFin1) Or (Between DateDébut2 And DateFin2)
    car avec un AND entre les BETWEEN c'est identique à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Between Max(Debut1, Debut2) And Min(Fin1, Fin2)
    intervalle qui est vide si Fin2 < Début1 ou Fin1 < Début2

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Bonjour JeitEmgie et merci
    j'ai suivi ton exemple:
    (Between DateDébut1 And DateFin1) Or (Between DateDébut2 And DateFin2)

    Voici mon code (pas trouvé le control pour faire une fenêtre code dans le message)?

    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    strField = "fldChampDate"       ' de maTable
     
    'items sélectionnés de maListBox au Format( fldChampDate, "mmm yy" 
    'Le jour est mis à 01
    strCriter= "01/02/12, 01/01/12, 01/11/12" 
     
    varDatesArray = Split(strCriter, ",")
    strCriteria = ""
     
    For i = 0 To UBound(varDatesArray)
        strDateDebut = "#" & DateAdd("d", -1, varDatesArray(i)) & "#"
        strDateFin = "#" & DateAdd("m", 1, varDatesArray(i)) & "#"
        strCriteria = strCriteria & strField & " BETWEEN " & strDateDebut & " AND " & strDateFin & " Or "
    Next i
     
    strCriteria = Left(strCriteria, Len(strCriteria) - 4) ' supprime le dernier OR
     
    ' construit la rq sql
    gv_strChamps = "fldChampNom, fldChampDate, fldEtc"
    strTable = "maTable"  'qui est en fait une requete qrvTable sur tblTable
     
    strSQL = "SELECT DISTINCTROW " & gv_strChamps
    strSQL = strSQL + " FROM " & strTable
    strSQL = strSQL + " WHERE ((" & strCriteria & "));"
    ce qui me renvoie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCTROW  fldChampNom, fldChampDate, fldEtc  FROM qrvTable WHERE ((fldChampDate,  BETWEEN #31/03/2012# AND #01/05/2012# Or fldChampDate, BETWEEN #31/05/2012# AND #01/07/2012#));
    Mais cela me revoie des plages de dates bizarres.
    Ainsi, si je sélectionne "Avril 2012" et "Juin 2012" (donc: "01/04/12, 01/06/12" dans strCriter), cela me revoie toutes les dates de 01/01/12 au 31/05/12, même pas celles de juin 2012

    Je ne comprends pas pourquoi.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2012
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Mille excuse à tous pour le dérangement.
    Je faisais une erreur en envoyant mes dates au format "jj mm yy" dans la requête, alors qu'avec le format américain "mm jj yy", ça passe nickel.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Requête sur une plage de date au format texte
    Par shakapouet dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/07/2012, 16h05
  2. Requête sur une plage de date
    Par altecad dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/05/2007, 15h11
  3. [requête sur plusieurs bases]
    Par viny dans le forum Requêtes
    Réponses: 3
    Dernier message: 21/02/2006, 14h18
  4. Requête sur plusieurs bases de données
    Par Oluha dans le forum ASP
    Réponses: 8
    Dernier message: 14/10/2005, 14h57
  5. Requête sur plusieurs tables
    Par drinkmilk dans le forum Langage SQL
    Réponses: 8
    Dernier message: 11/07/2005, 12h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo