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 :

Autorisation dans un intervalle


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Points : 21
    Points
    21
    Par défaut Autorisation dans un intervalle
    Bonjour,

    J'ai des autorisation sous la forme :
    DATE_DEBUT
    DATE_FIN
    etc

    j'ai un formulaire ou je rentre
    une date de début et une date de fin.

    Je souhaiterais que la requête m'affiche toute les autorisations qui sont dans l'intervalle et celle dont la date de fin est dans l'intervalle mais pas la date de début.
    Au début je voulais faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE (dbo_AUTORISATION_ACCES.DATE_DEBUT)<=Format([Formulaires]![Saisie 2 dates]![SecondeDateinvisible],"yyyy-mm-dd")) AND ((dbo_AUTORISATION_ACCES.DATE_FIN)<=Format([Formulaires]![Saisie 2 dates]![SecondeDateinvisible],"yyyy-mm-dd")
    Voici un schémas
    Nom : schémas.png
Affichages : 155
Taille : 11,3 Ko

  2. #2
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    bonsoir,
    cette fonction renvoie un booléen lorsque l'une et/ou l'autre des 2 premières dates passées en paramètre sont inclues dans l'intervalle de la 3ème et la 4ème date du paramètre:
    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
     
    Function DatesIntersect( _
        ByVal dtDate1 As Date, _
        ByVal dtDate2 As Date, _
        ByVal dtFenetreDebut As Date, _
        ByVal dtFenetreFin As Date) _
        As Boolean
     
    ' INTERSECTION DE CRENEAUX DE DATES
    ' ---
    ' Entrée : dtDate1        <- Première date
    '          dtDate2        <- Deuxième date (>= dtDate1)
    '          dtFenetreDebut <- Départ du créneau temps
    '          dtFenetreFin   <- Fin du créneau temps
    ' Sortie : True si les 2 créneaux se chevauchent.
    '
     
        DatesIntersect = (dtDate2 >= dtFenetreDebut) And (dtDate1 <= dtFenetreFin)
    End Function
    à priori avec tes champs, cela doit donner ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DatesIntersect(CVDate(dbo_AUTORISATION_ACCES.[DATE_DEBUT]),CVDate(dbo_AUTORISATION_ACCES.[DATE_FIN]),[Formulaires]![Saisie 2 dates]![PremiereDateinvisible],[Formulaires]![Saisie 2 dates]![SecondeDateinvisible])=True;
    si PremiereDateinvisible exite car je ne l'ai pas vu dans le bout de code que tu as donné
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Où est-ce que je dois mettre la fonction pour pouvoir l’appeler plus tard en SQL ?

  4. #4
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Ou est-ce que je dois mettre la fonction pour pouvoir l’appeler plus tard en SQL ?
    dans un Module standard depuis l'onglet Créer du ruban et ensuite le bouton Module ou Visual Basic (mais surtout pas Module de classe)
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    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
     
    Function DatesIntersect( _
        ByVal dtDate1 As Date, _
        ByVal dtDate2 As Date, _
        ByVal dtFenetreDebut As Date, _
        ByVal dtFenetreFin As Date) _
        As Boolean
     
    ' INTERSECTION DE CRENEAUX DE DATES
    ' ---
    ' Entrée : dtDate1        <- Première date
    '          dtDate2        <- Deuxième date (>= dtDate1)
    '          dtFenetreDebut <- Départ du créneau temps
    '          dtFenetreFin   <- Fin du créneau temps
    ' Sortie : True si les 2 créneaux se chevauchent.
    '
     
        DatesIntersect = (dtDate2 >= dtFenetreDebut) And (dtDate1 <= dtFenetreFin)
    End Function
    à priori avec tes champs, cela doit donner ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DatesIntersect(CVDate(dbo_AUTORISATION_ACCES.[DATE_DEBUT]),CVDate(dbo_AUTORISATION_ACCES.[DATE_FIN]),[Formulaires]![Saisie 2 dates]![PremiereDateinvisible],[Formulaires]![Saisie 2 dates]![SecondeDateinvisible])=True;
    si PremiereDateinvisible exite car je ne l'ai pas vu dans le bout de code que tu as donné[/QUOTE]

    Merci beaucoup je testerais ça en tout cas.
    Ps : à quoi sert le CVDate ?

  6. #6
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Citation Envoyé par L_layton Voir le message
    Ps : à quoi sert le CVDate ?
    d'après ton autre discussion, tu utilises une table liée avec des dates formatées (au format "yyyy-mm-dd") qu'Access voit comme des champs texte. CVDate() est une fonction qui convertit les dates formatées en un vrai champ de type date (uniquement pour l'affichage).
    Le type date est en réalité un numérique double qui, pour être lisible par les humains, est affiché avec un format "compréhensible" car c'est plus facile de lire
    "19/02/2020 22:02:00" plutôt que 43880,9180555556
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par tee_grandbois Voir le message
    d'après ton autre discussion, tu utilises une table liée avec des dates formatées (au format "yyyy-mm-dd") qu'Access voit comme des champs texte. CVDate() est une fonction qui convertit les dates formatées en un vrai champ de type date (uniquement pour l'affichage).
    Le type date est en réalité un numérique double qui, pour être lisible par les humains, est affiché avec un format "compréhensible" car c'est plus facile de lire
    "19/02/2020 22:02:00" plutôt que 43880,9180555556
    Quand j'exécute le code j'ai se message d'erreur
    Cette expression présente une syntaxe incorrecte, ou est trop complexe pour être évaluée.
    Ma requête dans sa globalité:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT Format(dbo_AUTORISATION_ACCES.DATE_DEBUT,"dd/mm/yyyy") AS DATE_DEBUT, Format(dbo_AUTORISATION_ACCES.DATE_FIN,"dd/mm/yyyy") AS DATE_FIN, dbo_PERSONNE.NOM_PERSONNE, dbo_PERSONNE.PRENOM_PERSONNE, dbo_SERVICE.LIBELLE_SERVICE, dbo_AUTORISATION_ACCES.CLE_AUTORISATION, dbo_AUTORISATION_ACCES.PARKING
    FROM dbo_PERSONNE INNER JOIN (dbo_SERVICE INNER JOIN dbo_AUTORISATION_ACCES ON dbo_SERVICE.ID_SERVICE = dbo_AUTORISATION_ACCES.ID_SERVICE) ON dbo_PERSONNE.ID_PERSONNE = dbo_AUTORISATION_ACCES.ID_PERSONNE
    WHERE DatesIntersect(CVDate(DATE_DEBUT),CVDate(DATE_FIN),CVDate([Formulaires]![Saisie 2 dates]![PremiereDateinvisible]),CVDate([Formulaires]![Saisie 2 dates]![SecondeDateinvisible]))=True;
    En modifiant les deux dernier paramètre la fonction peut s’exécuter avec 2 dates au pifs ( pourtant je n'ai toujours aucun résultats même en mettant 02/01/2000 02/01/2100
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DatesIntersect(CVDate(DATE_DEBUT),CVDate(DATE_FIN),CVDate(28/11/1995),CVDate(28/11/1995))=True;

  8. #8
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut
    Ne serait-ce pas plus tôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DatesIntersect(CVDate(DATE_DEBUT),CVDate(DATE_FIN),[Formulaires]![Saisie 2 dates]![PremiereDateinvisible],[Formulaires]![Saisie 2 dates]![SecondeDateinvisible])=True;
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  9. #9
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 648
    Points : 14 626
    Points
    14 626
    Par défaut
    Salut hyperion13,
    Citation Envoyé par hyperion13 Voir le message
    Salut
    Ne serait-ce pas plus tôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DatesIntersect(CVDate(DATE_DEBUT),CVDate(DATE_FIN),[Formulaires]![Saisie 2 dates]![PremiereDateinvisible],[Formulaires]![Saisie 2 dates]![SecondeDateinvisible])=True;
    pile poil le code que j'ai posté précédemment
    Citation Envoyé par L_layton
    Quand j'exécute le code j'ai se message d'erreur
    Cette expression présente une syntaxe incorrecte, ou est trop complexe pour être évaluée.
    à priori, le problème se situerait ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Format(dbo_AUTORISATION_ACCES.DATE_DEBUT,"dd/mm/yyyy") AS DATE_DEBUT
    cela crée une référence circulaire qu'Access ne peut pas évaluer.
    Pour qu'un alias soit valide il faut lui donner un autre nom que celui du champ que l'on utilise.

    Ici, à la place de CVDate, il faut mettre les fameux # (hash, croisillon ou dièse, je ne sais pas trop)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DatesIntersect(CVDate(DATE_DEBUT),CVDate(DATE_FIN),#28/11/1995#,#28/11/1995#)=True;
    ou alors les " (guillemets, double-quotes ...) car avec des séparateurs, cela devient du texte (sauf si comme dans l'exemple précédent, cela correspond au séparateur système):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE DatesIntersect(CVDate(DATE_DEBUT),CVDate(DATE_FIN),CVDate("28/11/1995"),CVDate("28/11/1995"))=True;
    Quand on est derrière l'écran on n'a aucun clavier sous les mains ...
    ah non ? donc devant l'écran c'est la connectique ?

  10. #10
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut tee_grandbois
    Nous sommes bien d'accord
    dbo_AUTORISATION_ACCES.DATE_DEBUT et dbo_AUTORISATION_ACCES.DATE_FIN sont au format yyyy-mm-dd.
    Donc normalement, la requête devrait être comme tu l'avais indiqué de ce style là, en supposant que les textbox du form soient ou non formatées en date, abrégé et que les dates saisies sont au format date, abrégé.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT dbo_AUTORISATION_ACCES.DATE_DEBUT, dbo_AUTORISATION_ACCES.DATE_FIN, dbo_PERSONNE.NOM_PERSONNE, dbo_PERSONNE.PRENOM_PERSONNE, dbo_SERVICE.LIBELLE_SERVICE, dbo_AUTORISATION_ACCES.CLE_AUTORISATION, dbo_AUTORISATION_ACCES.PARKING
    FROM dbo_PERSONNE INNER JOIN (dbo_SERVICE INNER JOIN dbo_AUTORISATION_ACCES ON dbo_SERVICE.ID_SERVICE = dbo_AUTORISATION_ACCES.ID_SERVICE) ON dbo_PERSONNE.ID_PERSONNE = dbo_AUTORISATION_ACCES.ID_PERSONNE
    WHERE DatesIntersect(CVDate(DATE_DEBUT),CVDate(DATE_FIN),[Formulaires]![Saisie 2 dates]![PremiereDateinvisible],[Formulaires]![Saisie 2 dates]![SecondeDateinvisible])=True;
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 32
    Points : 21
    Points
    21
    Par défaut
    Bah j'ai réussis à résoudre mon problème avec simplement des variables et en supprimant le formulaire ou je saisissais mes variable.

    En gros j’appuie sur le bouton pour exécuter la requête et les text box s'ouvrent.
    Merci beaucoup pour votre aide je me souviendrais des références circulaire.

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 03/03/2006, 20h15
  2. valeur contenue dans un intervalle
    Par javaSudOuest dans le forum Langage SQL
    Réponses: 10
    Dernier message: 02/12/2005, 15h12
  3. slection dans une intervalle d'enregistrement
    Par toome dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/08/2005, 15h17
  4. une requête imbriquée est-elle autorisée dans un INSERT ???
    Par Ekimasu dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/08/2005, 09h21
  5. Réponses: 7
    Dernier message: 02/06/2003, 08h38

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