SQL Access - Calcul de l'age

Résolu
marius59360 Messages postés 8 Date d'inscription jeudi 6 mai 2010 Statut Membre Dernière intervention 12 février 2011 - 5 mars 2009 à 23:41
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 7 mars 2009 à 14:56
Bonjour,

J'ai créé avec MS ACCESS 1.1 (hé oui: Access 1.1) un programe de gestion des électeurs.
A partir de la date de naissance je n'arrive pas à déterminer l'age d'un électeur dans un formulaire.
DateDiff a une dent contre moi..

Merci d'avance

A on dot solèy

8 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 mars 2009 à 13:54
Re Marius

Ce que je voudrais savoir, c'est le format de ton champ "date de naissance" dans ta DB
Est-il en type "Texte" ou en type "Date général" ?
S'il est bien en type Date, tu peux essayer ceci directement dans ta requète SQL (as-tu une requète ? on ne le sais pas non plus)

   Select mesAutresChamps, DateDiff("y", [date de naissance], Now) As [Age]

[date de naissance] est sensé être le champ dans lequel est stocké ta date
Now    est la date d'aujourd'hui
As [Age]   donnera un nom à cette nouvelle colonne

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
6 mars 2009 à 00:05
Nonsoir,

tu n'as manifestement pas lu le règlement, toi non plus ...
peut-être auras-tu alors le temps de lire attentivement cette discussion :
http://www.vbfrance.com/forum/sujet-FINIR-AVEC-FORUM-POLLUE_1278668.aspx
puis de t'interroger sur le titre donné à ta question et sur le thème choisi pour la poser, hein ...
(si tu as "créé avec MS ACCESS 1.1 (hé oui: Access 1.1) un programe de gestion des électeurs", ton problèm n'(est pas un problème VB.NET).
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 mars 2009 à 00:35
Salut
Catégorie de la question .Net --> VBA

DateDiff te fournira un nombre de "quelque chose" entre deux dates, il pourra pas te donner directement des années + des mois + des jours
Tout dépend de ce que tu veux faire.
A part compatire à ton problème, on ne peut guère te dire quoi faire si tu ne dis pas ce que tu cherches à faire.
On ne sait pas si tu parles de dates dans le code VBA ou de dates dans une table SQL, et si tu veux faire ce calcul sous SQL (dans une requète) ou dans le code.
DateDiff n'est pas une instruction SQL pure.
Access sait la gérer mais il y a des règles de syntaxe à respecter sous SQL, notament quand les champs sont définis dans la table comme de type Date --> Utiliser un # comme encadrement des valeurs testées
Exemple : ... Where maDate > #12/31/2000#
+ Rappel : les dates sont toujours au format américain dans les bases, donc Mois/Jour/Année

Alors, comme le dis jmf0, soigne  le titre de ta question afin que d'autres puissent facilement trouver une réponse à un cas similaire (merci pour nos claviers)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
marius59360 Messages postés 8 Date d'inscription jeudi 6 mai 2010 Statut Membre Dernière intervention 12 février 2011
6 mars 2009 à 08:47
Bonjour "JMFO",Bonjour "JACK"


Merci pour vos réponses, sachez cependant qu'il n'était pas dans mes intentions de "polluer" vos pages d'échanges, je cherche tout simplement à comprendre...
Sur mon formulaire "Electeur" en remplissant la zone de texte "date de naissance" je désire accéder à une fonction du genre :Après MAJ = UT_Calcul_Age() qui me permettra de remplir automatiquement la zone de texte "Age" en nombre d'années c'est à dire la différence entre la date de naissance et celle de ce jour.
C'est la rédaction de ce code qui me pose problème.
Je vous remercie pour votre amabilité et votre compréhension.
Marius SZYMCZAK

A on dot solèy
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmf0 Messages postés 1566 Date d'inscription mardi 26 décembre 2000 Statut Membre Dernière intervention 5 avril 2013 8
6 mars 2009 à 12:00
Nous sommes sensibles au fait que ton intention n'est pas de polluer mais celle de comprendre...
Commence par comprendre ce qui est simple :
- "Au secours" est un tître qui ne révêle en rien la nature du problème à traiter ===>> toute solution sera alors perdu pour tous les autres forumeurs cherchant à solutionner le même problème !
- il ne leur viendra de surcroît pas à l'idée de chercher dans le thème VB.Net des solutions à des problème VBA/ACCESS
Bonne journée, donc.
0
marius59360 Messages postés 8 Date d'inscription jeudi 6 mai 2010 Statut Membre Dernière intervention 12 février 2011
7 mars 2009 à 12:52
Bonjour Beau Bébé,
Comme la requète m'a donné satisfaction, j'ai créé une fonction qui me met à jour l'age à partir de l'inscription de la date de naissance dans le formulaire "Electeur".Ce qui me donne cela.

Function UT_Calcul_Age ()   '07/03/09


    Dim Bd As Database, f As Form
    Dim SQL As String
    Dim FRS As Snapshot
    Dim d As Double
    Dim Age As String
    Dim DateNaissance As String




    Set f = Forms(Screen.ActiveForm.FormName)
    Set Bd = CurrentDB()
      
   
    SQL = "SELECT  DISTINCTROW Electeur.Nom, Electeur.[N°Electeur]"
    SQL = SQL & " FROM Electeur"    SQL SQL & " WHERE ((Electeur.[N°Electeur] " & f![N°Electeur] & "));"
    Set FRS = Bd.CreateSnapshot(SQL)
       
          'DateDiff("y",[DateNaissance],Now())/365.25 AS Age
   
   
   
    If Forms!Electeur.DateNaissance > 0 Then


  Forms!Electeur.Age = DateDiff("y", Forms!Electeur.DateNaissance, Now) / 365.25 ' me trouve 66 et des poussières


   Forms!Electeur.Date1 = Now  'la date1 est la date de modification


    End If


 '------------forms!Electeur.Age = DateDiff("y", forms!Electeur.DateNaissance, Now / 365.25) trouve -15761


 End Function

Merci encore et bon vent
Marius SZYMCZAK

A on dot solèy
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 mars 2009 à 14:54
Re
Une chose bizarre : Normalement, le "y" dans DateDiff représente Year = Année
Pourquoi le redivises-tu par 365.25 ? (nombre de jour annuel moyen sur une période entière de 4 ans)

Oups, je viens de vérifier dans l'aide, ce n'est pas "y" qu'il faut utiliser, mais "yyyy"
Récap de l'aide :
   yyyy  Année
   q       Trimestre
   m      Mois
   y       Jour de l'année
   d       Jour
   w      jour de la semaine
   ww   Semaine
   h       Heure
   n       Minute
   s       Seconde

D'après les derniers tests que je viens de faire, l'age calculé par DateDiff avec "yyyy" comme argument ne fait qu'un calcul arythmétique entre les années des deux dates et ne tient pas compte du jour ni du mois.
Donc, on ne peut pas dire si la date est révolue ou pas.

Si tu dois faire des tests précis sur l'age, mieux vaudrait utiliser son copain DateAdd (mêmes aruguments temporels) :
   ... Where DateAdd("yyyy", 18, [date de naissance]) >= Now
pour déterminer si la personne a 18 ans ou plus

PS : Je me suis permis de modifier le titre de ta question afin que d'autres, confrontés à la même interrogation, trouve cette réponse.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
7 mars 2009 à 14:56
Re-Oups
C'est   <= Now  , et pas   >=
0
Rejoignez-nous