Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Requêtes et SQL.
Requêtes et SQL. Tout ce qui concerne vos questions sur les requêtes et le SQL sous Access se trouve ici.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/08/2011, 16h45   #1
Membre à l'essai
 
Femme Mélanie
Inscription : janvier 2007
Messages : 80
Détails du profil
Informations personnelles :
Nom : Femme Mélanie
Localisation : France

Informations forums :
Inscription : janvier 2007
Messages : 80
Points : 24
Points : 24
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
MelaAllIn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 17h04   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 17h25   #3
Membre à l'essai
 
Femme Mélanie
Inscription : janvier 2007
Messages : 80
Détails du profil
Informations personnelles :
Nom : Femme Mélanie
Localisation : France

Informations forums :
Inscription : janvier 2007
Messages : 80
Points : 24
Points : 24
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)...
MelaAllIn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 17h32   #4
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
Citation:
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/08/2011, 18h03   #5
Expert Confirmé Sénior
 
Avatar de f-leb
 
Homme Fabien
Enseignant
Inscription : janvier 2009
Messages : 2 415
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 41
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Enseignant

Informations forums :
Inscription : janvier 2009
Messages : 2 415
Points : 4 446
Points : 4 446
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 :
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 ?
f-leb est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/08/2011, 09h02   #6
Membre à l'essai
 
Femme Mélanie
Inscription : janvier 2007
Messages : 80
Détails du profil
Informations personnelles :
Nom : Femme Mélanie
Localisation : France

Informations forums :
Inscription : janvier 2007
Messages : 80
Points : 24
Points : 24
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 !!!
MelaAllIn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 10h05   #7
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 176
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 176
Points : 2 805
Points : 2 805
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h27.


 
 
 
 
Partenaires

Hébergement Web