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 :

Concaténer plusieurs champs d'une table dans une requête avec format date [AC-2007]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut Concaténer plusieurs champs d'une table dans une requête avec format date
    Bonjour,

    J'ai un (gros !) souci dans ma base...
    Pour poser le problème, j'ai créé une table dans laquelle j'ai (entre autres) 2 champs, "moisqualif" et "annéequalif", qui se réfèrent à des tables de référence "mois" et "année" (donc j'ai des liste déroulantes dans mon formulaire, qui me permettent de sélectionner le mois et l'année que je souhaite enregistrer).
    Mes tables de référence ont la structure suivante : 1 clé primaire (n° auto) + un champ mois (janvier, février, mars...) ou un champ année (2008, 2009, 2010, 2011...)

    A présent, je souhaite créer une requête qui me permette d'obtenir toutes les qualifs qui ont expirées, c'est à dire toutes les qualifs pour lesquelles "annéequalif" <= année actuelle et "moisqualif" <= mois actuel. Dans ma requête, j'ai donc mis comme critères sur mon champ année et sur mon champ mois.

    Le problème est que, si j'ai une qualif qui a expiré en Décembre 2010, je ne la voit pas, puisque nous ne sommes pas encore en décembre...
    J'ai donc cherché un moyen de recréer la date d'expiration directement dans la requête, par concaténation du mois et de l'année de qualif, mais quand je fais cela, access ne reconnait pas le champ créé ainsi comme étant une date, et donc je ne peux pas lui appliquer le critère qui me permettrait de voir uniquement les qualifs qui ont expiré à ce jour...

    Je souhaiterais donc avoir l'aide de quelqu'un qui saurait comment faire pour définir comme date un champ créé dans une requête sur la base de 2 autres champs ?

    J'espère avoir été assez claire, vu la complexité du problème, et surtout, j'espère que quelqu'un aura la gentillesse de m'aider !

    D'avance merci.

    MelaAllIn

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour MelaAllIn,

    Il faut concaténer :
    • "annéequalif" & "moisqualif", dans cet ordre ==> donnera 201107 (par exemple) ;
    • Année(Maintenant()) & Format(Mois(Maintenant());"0#"), dans cet ordre ==> donnera 201108 (pour aujourd'hui).

    La comparaison entre ces deux champs (considérés comme texte) devient possible.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    Merci Richard_35 pour ta réponse, je l'ai appliquée à mon cas.

    J'arrive bien à reconstruire les dates sous le format que tu proposes
    Par contre, comment dois-je m'y prendre, ensuite, pour faire la comparaison entre les 2 valeurs ? J'ai bien essayé de mettre comme critère "<= Aujourdhui()" (c'est le nom que j'ai donné à la concaténation pour la date du jour) sur ma date d'expiration de qualif, mais ça ne fonctionne pas (il me met: Fonction "Aujourdhui" non définie dans l'expression)...

  4. #4
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    J'ai bien essayé de mettre comme critère "<= Aujourdhui()"
    ==> il faut enlever "()" car, sinon, Aujourd'hui() est pris pour une fonction (message de Access) contrairement à Aujourd'hui qui sera pris pour un champ calculé.

    Pour éviter les confusions, appelles ton champ calculé DateAujourd'hui (par exemple).
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 690
    Points : 57 226
    Points
    57 226
    Billets dans le blog
    40
    Par défaut
    Bonjour,

    et pourquoi ne pas reconstruire une date à partir des champs mois et année avec la fonction DateSerial (SérieDate en français dans le QBE)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaDate : SérieDate([champAnnée] ; [ChampMois] ; 1)
    Pour reconstruire la date correspondant au 1er jour du mois et de l’année.

    Plus facile après pour faire les comparaisons je pense, non ?

  6. #6
    Membre du Club
    Femme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 88
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    Effectivement, la solution de f-leb est plus simple, au niveau de la comparaison par rapport à la date du jour (il suffit de mettre comme critère sur LaDate :
    J'ai donc plutôt retenu cette solution.

    Par contre, Richard_35, par curiosité, j'ai essayé de finaliser ta solution, et je n'arrive pas à faire la comparaison : j'ai renommé mon champ calculé DateAujourdhui au lieu de Aujourdhui, afin d'éviter toute confusion avec les fonctions Access, mais il n'est pas reconnu comme champ calculé dans mon critère... Est-ce que je dois mettre DateAujourdhui, ou DateAujourdhui() ?

    Sinon, merci à tous les 2 pour votre aide !!!

  7. #7
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour MelaAllIn et Fabien,

    Effectivement, la solution de Fabien est plus propre, car elle reste dans le domaine des dates.

    Citation Envoyé par MelaAllIn
    .../... je n'arrive pas à faire la comparaison .../...
    ==>
    Annee_Mois_A_Tester = Année(Date_a_tester) & Format(Mois(Date_a_tester);"0#") ==> "201107" ;
    Date_Aujourdhui = Année(Maintenant()) & Mois(Maintenant()) ==> "201108".

    En chaîne de caractères, "201107" sera toujours inférieur à "201108" et, en nombre, 201107 (deux cent un mille cent sept) sera toujours inférieur à (deux cent un mille cent huit)

    Citation Envoyé par MelaAllIn
    Est-ce que je dois mettre DateAujourdhui, ou DateAujourdhui()
    ==> les parenthèses "()" après un nom implique l'appel à une fonction (f(x)) qui retourne une valeur. Cette fonction peut être une fonction intégrée Access, comme Date(), ou une fonction écrite en VBA. Donc, si c'est une variable, il ne faut pas ajouter "()".
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

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

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. Concaténer plusieurs champs en un seul dans une row
    Par _skip dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 12/03/2010, 12h40
  4. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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