Comment utiliser une fonction "perso" dans une requête
4 réponses
TEV
Bonjour,
Je cherche à ajouter à chaque anniversaire +1 à l'âge de la personne
enregistrée dans la base de données. Pour ce faire je pensais fire une
requête mise à jour avec une fonction de mon cru pour trouver les fiches
candidates. J'ai testé la fonction proprement dite dans Access (en créant la
requête en mode graphique). Tout fonctionne.
Par contre en la refaisant dans VB, je m'aperçois que la fonction est
comprise comme étant du texte. Comment puis je faire pour que la fonction
soit reconnue au même titre que toutes les autres fonctions d'Access ou VB ?
Pourquoi tu veux stocker la valeur "Age", c'est une donnée calculé, ce n'est pas utile de stocker cette valeur, tu dois déjà avoir un champ contenant la date d'anniversaire ???
Perso j'utiliserais une fonction perso pour déterminer l'age de la personne et ensuite je passerais par une requête pour afficher l'age
Exemple pour la fonction de calcul de l'age :
Function Age(dtBirthDay As Date) As Integer Age = DateDiff("yyyy", dtBirthDay, Date) Select Case Month(dtBirthDay) Case Is > Month(Date) Age = Age - 1 Case Month(Date) If Day(dtBirthDay) > Day(Date) Then Age = Age - 1 End Select End Function
Ensuite tu fais une requête du style : Select Personne, Age([ChampDateAnniversaire]) From TaTable;
Mais ce n'est qu'une façon de faire parmi tant d'autres... ;-)
@+ Jessy Sempere - Access MVP
------------------------------------ Site @ccess : http://access.jessy.free.fr/ Pour l'efficacité de tous : http://users.skynet.be/mpfa/ ------------------------------------ "TEV" a écrit dans le message news: 40ce247d$0$1827$
Bonjour,
Je cherche à ajouter à chaque anniversaire +1 à l'âge de la personne enregistrée dans la base de données. Pour ce faire je pensais fire une requête mise à jour avec une fonction de mon cru pour trouver les fiches candidates. J'ai testé la fonction proprement dite dans Access (en créant
la
requête en mode graphique). Tout fonctionne.
Par contre en la refaisant dans VB, je m'aperçois que la fonction est comprise comme étant du texte. Comment puis je faire pour que la fonction soit reconnue au même titre que toutes les autres fonctions d'Access ou VB
?
Christian.
Bonjour
Pourquoi tu veux stocker la valeur "Age", c'est une donnée calculé, ce
n'est pas utile de stocker cette valeur, tu dois déjà avoir un champ
contenant la date d'anniversaire ???
Perso j'utiliserais une fonction perso pour déterminer l'age de la personne
et ensuite je passerais par une requête pour afficher l'age
Exemple pour la fonction de calcul de l'age :
Function Age(dtBirthDay As Date) As Integer
Age = DateDiff("yyyy", dtBirthDay, Date)
Select Case Month(dtBirthDay)
Case Is > Month(Date)
Age = Age - 1
Case Month(Date)
If Day(dtBirthDay) > Day(Date) Then Age = Age - 1
End Select
End Function
Ensuite tu fais une requête du style :
Select Personne, Age([ChampDateAnniversaire])
From TaTable;
Mais ce n'est qu'une façon de faire parmi tant d'autres... ;-)
@+
Jessy Sempere - Access MVP
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"TEV" <toto@caramail.com> a écrit dans le message news:
40ce247d$0$1827$79c14f64@nan-newsreader-07.noos.net...
Bonjour,
Je cherche à ajouter à chaque anniversaire +1 à l'âge de la personne
enregistrée dans la base de données. Pour ce faire je pensais fire une
requête mise à jour avec une fonction de mon cru pour trouver les fiches
candidates. J'ai testé la fonction proprement dite dans Access (en créant
la
requête en mode graphique). Tout fonctionne.
Par contre en la refaisant dans VB, je m'aperçois que la fonction est
comprise comme étant du texte. Comment puis je faire pour que la fonction
soit reconnue au même titre que toutes les autres fonctions d'Access ou VB
Pourquoi tu veux stocker la valeur "Age", c'est une donnée calculé, ce n'est pas utile de stocker cette valeur, tu dois déjà avoir un champ contenant la date d'anniversaire ???
Perso j'utiliserais une fonction perso pour déterminer l'age de la personne et ensuite je passerais par une requête pour afficher l'age
Exemple pour la fonction de calcul de l'age :
Function Age(dtBirthDay As Date) As Integer Age = DateDiff("yyyy", dtBirthDay, Date) Select Case Month(dtBirthDay) Case Is > Month(Date) Age = Age - 1 Case Month(Date) If Day(dtBirthDay) > Day(Date) Then Age = Age - 1 End Select End Function
Ensuite tu fais une requête du style : Select Personne, Age([ChampDateAnniversaire]) From TaTable;
Mais ce n'est qu'une façon de faire parmi tant d'autres... ;-)
@+ Jessy Sempere - Access MVP
------------------------------------ Site @ccess : http://access.jessy.free.fr/ Pour l'efficacité de tous : http://users.skynet.be/mpfa/ ------------------------------------ "TEV" a écrit dans le message news: 40ce247d$0$1827$
Bonjour,
Je cherche à ajouter à chaque anniversaire +1 à l'âge de la personne enregistrée dans la base de données. Pour ce faire je pensais fire une requête mise à jour avec une fonction de mon cru pour trouver les fiches candidates. J'ai testé la fonction proprement dite dans Access (en créant
la
requête en mode graphique). Tout fonctionne.
Par contre en la refaisant dans VB, je m'aperçois que la fonction est comprise comme étant du texte. Comment puis je faire pour que la fonction soit reconnue au même titre que toutes les autres fonctions d'Access ou VB
?
Christian.
TEV
Merci beaucoup pour la réponse.
> Je cherche à ajouter à chaque anniversaire +1 à l'âge de la personne > enregistrée dans la base de données.
> Je n'ai pas très bien compris.. peux-tu nous expliquer un peu plus? Lorsque les personnes s'inscrivent dans la base de données, on prend sa date de naissance et à partir de ça le programme d'inscription calcul et enregistre son âge. Comme, ce critère est important, il faut que cet âge ne reste pas figé à celui inscrit lors de son inscription. D'où la raison qu' a chaque date anniversaire (basée sur sa date de naissance) on doit lui ajouter un an (à elle et à ses enfants).
> Comment puis je faire pour que la fonction > soit reconnue au même titre que toutes les autres fonctions d'Access ou
VB > ? Je voulais seulement dire que lorsque l'on fait une requête que ce soit dans Access ou dans VB en utilisant les fonctions (comme dateDiff, Asc etc.) types de ces programmes celle-ci sont reconnues. Comment faire lorsque la fonction est créée par soi même, afin que VB puisse l'exécuter dans une requête.
J'ai obtenu une réponse me disant que cela ne pouvait se faire, puisque VB + Jet n'ont pas les mêmes affinités de fonctionnement que Access + Jet.
Par contre je ne vois pas trop comment faire pour contourner ce problème. Cela m'oblige à ouvrir un recordset, de le parcourir en fournissant les valeurs [dtNaissance] et [Age] permettant d'appeler la fonction, de vérifier la réponse de la fonction pour le cas échéant ou stocker l'id dans un tableau puis de faire en boucle une requête UPDATE avec pour critères les ID contenus dans le tableau ou exécuter cette requête UPDATE mais uniquement avec l'ID remplissant la condition.
Seulement je crains que cela prenne énormément de temps d'exécution. Y aurait - il d'autres façon de faire ?
Le code en fait ne se résume pour le moment quà la déclaration de la requête. La fonction CalculDtAnniversaire(DtAnniversaire, AgeFiche) as boolean, me renvoi Vrai si il faut ajouter 1 an à l'âge qui est lu et Faux dans le cas contraire.
> Je cherche à ajouter à chaque anniversaire +1 à l'âge de la personne
> enregistrée dans la base de données.
> Je n'ai pas très bien compris.. peux-tu nous expliquer un peu plus?
Lorsque les personnes s'inscrivent dans la base de données, on prend sa date
de naissance et à partir de ça le programme d'inscription calcul et
enregistre son âge.
Comme, ce critère est important, il faut que cet âge ne reste pas figé à
celui inscrit lors de son inscription. D'où la raison qu' a chaque date
anniversaire (basée sur sa date de naissance) on doit lui ajouter un an (à
elle et à ses enfants).
> Comment puis je faire pour que la fonction
> soit reconnue au même titre que toutes les autres fonctions d'Access ou
VB
> ?
Je voulais seulement dire que lorsque l'on fait une requête que ce soit dans
Access ou dans VB en utilisant les fonctions (comme dateDiff, Asc etc.)
types de ces programmes celle-ci sont reconnues. Comment faire lorsque la
fonction est créée par soi même, afin que VB puisse l'exécuter dans une
requête.
J'ai obtenu une réponse me disant que cela ne pouvait se faire, puisque VB +
Jet n'ont pas les mêmes affinités de fonctionnement que Access + Jet.
Par contre je ne vois pas trop comment faire pour contourner ce problème.
Cela m'oblige à ouvrir un
recordset, de le parcourir en fournissant les valeurs [dtNaissance] et [Age]
permettant d'appeler la fonction, de vérifier la réponse de la fonction pour
le cas échéant ou stocker l'id dans un tableau puis de faire en boucle une
requête UPDATE avec pour critères les ID contenus dans le tableau ou
exécuter cette requête UPDATE mais uniquement avec l'ID remplissant la
condition.
Seulement je crains que cela prenne énormément de temps d'exécution. Y
aurait - il d'autres façon de faire ?
Le code en fait ne se résume pour le moment quà la déclaration de la
requête. La fonction CalculDtAnniversaire(DtAnniversaire, AgeFiche) as
boolean, me renvoi Vrai si il faut ajouter 1 an à l'âge qui est lu et Faux
dans le cas contraire.
> Je cherche à ajouter à chaque anniversaire +1 à l'âge de la personne > enregistrée dans la base de données.
> Je n'ai pas très bien compris.. peux-tu nous expliquer un peu plus? Lorsque les personnes s'inscrivent dans la base de données, on prend sa date de naissance et à partir de ça le programme d'inscription calcul et enregistre son âge. Comme, ce critère est important, il faut que cet âge ne reste pas figé à celui inscrit lors de son inscription. D'où la raison qu' a chaque date anniversaire (basée sur sa date de naissance) on doit lui ajouter un an (à elle et à ses enfants).
> Comment puis je faire pour que la fonction > soit reconnue au même titre que toutes les autres fonctions d'Access ou
VB > ? Je voulais seulement dire que lorsque l'on fait une requête que ce soit dans Access ou dans VB en utilisant les fonctions (comme dateDiff, Asc etc.) types de ces programmes celle-ci sont reconnues. Comment faire lorsque la fonction est créée par soi même, afin que VB puisse l'exécuter dans une requête.
J'ai obtenu une réponse me disant que cela ne pouvait se faire, puisque VB + Jet n'ont pas les mêmes affinités de fonctionnement que Access + Jet.
Par contre je ne vois pas trop comment faire pour contourner ce problème. Cela m'oblige à ouvrir un recordset, de le parcourir en fournissant les valeurs [dtNaissance] et [Age] permettant d'appeler la fonction, de vérifier la réponse de la fonction pour le cas échéant ou stocker l'id dans un tableau puis de faire en boucle une requête UPDATE avec pour critères les ID contenus dans le tableau ou exécuter cette requête UPDATE mais uniquement avec l'ID remplissant la condition.
Seulement je crains que cela prenne énormément de temps d'exécution. Y aurait - il d'autres façon de faire ?
Le code en fait ne se résume pour le moment quà la déclaration de la requête. La fonction CalculDtAnniversaire(DtAnniversaire, AgeFiche) as boolean, me renvoi Vrai si il faut ajouter 1 an à l'âge qui est lu et Faux dans le cas contraire.
Je ne me suis pas encore fait comprendre. Bien sûr, l'âge de la personne figure dans le champ approprié dès son inscription. Ma fonction ressemble à la tienne mais pour déterminer si il faut ou non ajouter 1 an à l'âge figurant déjà dans la base je compare l'age trouvé par le recalcule de l'âge et celui qui se trouve dans la base. Car il me faut, dans le cas d'un ajout à l'âge de la personne, il me faut également dans ce cas ajouter un an à ses enfants éventuels.
soit : Function CalculDtAnniversaire(DtNaissance As Variant, AgeFiche As Integer) As Boolean ' Calcul l'âge de la personne à partir de sa date de naissance, puis vérifie si le nombre calculé est ' différent de celui qui a été trouvé. ' La fonction retourne Vrai si cela a changé faux dans le contraire ' Dim TAge, Resultat As Integer ' ' Calcul l'âge de la fiche à partir de sa date de naissance If Month(Date) < Month(DtNaissance) Or (Month(Date) Month(DtNaissance) And Day(Date) < Day(DtNaissance)) Then TAge = Year(Date) - Year(DtNaissance) - 1 Else TAge = Year(Date) - Year(DtNaissance) End If ' Comparre le résultat avec l'âge figurant dans la base de données If TAge > AgeFiche Then CalculDtAnniversaire = True Else CalculDtAnniversaire = False End Function
Comme ça je ne garde que ceux qui intéresse.
Christian.
"Jessy Sempere [MVP]" a écrit dans le message de news: camut2$t12$
Bonjour
Pourquoi tu veux stocker la valeur "Age", c'est une donnée calculé, ce n'est pas utile de stocker cette valeur, tu dois déjà avoir un champ contenant la date d'anniversaire ???
Perso j'utiliserais une fonction perso pour déterminer l'age de la
personne
et ensuite je passerais par une requête pour afficher l'age
Exemple pour la fonction de calcul de l'age :
Function Age(dtBirthDay As Date) As Integer Age = DateDiff("yyyy", dtBirthDay, Date) Select Case Month(dtBirthDay) Case Is > Month(Date) Age = Age - 1 Case Month(Date) If Day(dtBirthDay) > Day(Date) Then Age = Age - 1 End Select End Function
Ensuite tu fais une requête du style : Select Personne, Age([ChampDateAnniversaire]) From TaTable;
Mais ce n'est qu'une façon de faire parmi tant d'autres... ;-)
@+ Jessy Sempere - Access MVP
------------------------------------ Site @ccess : http://access.jessy.free.fr/ Pour l'efficacité de tous : http://users.skynet.be/mpfa/ ------------------------------------ "TEV" a écrit dans le message news: 40ce247d$0$1827$ > Bonjour, > > Je cherche à ajouter à chaque anniversaire +1 à l'âge de la personne > enregistrée dans la base de données. Pour ce faire je pensais fire une > requête mise à jour avec une fonction de mon cru pour trouver les fiches > candidates. J'ai testé la fonction proprement dite dans Access (en
créant
la > requête en mode graphique). Tout fonctionne. > > Par contre en la refaisant dans VB, je m'aperçois que la fonction est > comprise comme étant du texte. Comment puis je faire pour que la
fonction
> soit reconnue au même titre que toutes les autres fonctions d'Access ou
VB
? > > Christian. > >
Je ne me suis pas encore fait comprendre.
Bien sûr, l'âge de la personne figure dans le champ approprié dès son
inscription.
Ma fonction ressemble à la tienne mais pour déterminer si il faut ou non
ajouter 1 an à l'âge figurant déjà dans la base je compare l'age trouvé par
le recalcule de l'âge et celui qui se trouve dans la base. Car il me faut,
dans le cas d'un ajout à l'âge de la personne, il me faut également dans ce
cas ajouter un an à ses enfants éventuels.
soit :
Function CalculDtAnniversaire(DtNaissance As Variant, AgeFiche As Integer)
As Boolean
' Calcul l'âge de la personne à partir de sa date de naissance, puis vérifie
si le nombre calculé est
' différent de celui qui a été trouvé.
' La fonction retourne Vrai si cela a changé faux dans le contraire
'
Dim TAge, Resultat As Integer
'
' Calcul l'âge de la fiche à partir de sa date de naissance
If Month(Date) < Month(DtNaissance) Or (Month(Date) Month(DtNaissance) And Day(Date) < Day(DtNaissance)) Then
TAge = Year(Date) - Year(DtNaissance) - 1
Else
TAge = Year(Date) - Year(DtNaissance)
End If
' Comparre le résultat avec l'âge figurant dans la base de données
If TAge > AgeFiche Then CalculDtAnniversaire = True Else
CalculDtAnniversaire = False
End Function
Comme ça je ne garde que ceux qui intéresse.
Christian.
"Jessy Sempere [MVP]" <jessy.sempere@prg.sncf.fr> a écrit dans le message de
news: camut2$t12$1@muguet.sncf.fr...
Bonjour
Pourquoi tu veux stocker la valeur "Age", c'est une donnée calculé, ce
n'est pas utile de stocker cette valeur, tu dois déjà avoir un champ
contenant la date d'anniversaire ???
Perso j'utiliserais une fonction perso pour déterminer l'age de la
personne
et ensuite je passerais par une requête pour afficher l'age
Exemple pour la fonction de calcul de l'age :
Function Age(dtBirthDay As Date) As Integer
Age = DateDiff("yyyy", dtBirthDay, Date)
Select Case Month(dtBirthDay)
Case Is > Month(Date)
Age = Age - 1
Case Month(Date)
If Day(dtBirthDay) > Day(Date) Then Age = Age - 1
End Select
End Function
Ensuite tu fais une requête du style :
Select Personne, Age([ChampDateAnniversaire])
From TaTable;
Mais ce n'est qu'une façon de faire parmi tant d'autres... ;-)
@+
Jessy Sempere - Access MVP
news@access.fr.vu
------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"TEV" <toto@caramail.com> a écrit dans le message news:
40ce247d$0$1827$79c14f64@nan-newsreader-07.noos.net...
> Bonjour,
>
> Je cherche à ajouter à chaque anniversaire +1 à l'âge de la personne
> enregistrée dans la base de données. Pour ce faire je pensais fire une
> requête mise à jour avec une fonction de mon cru pour trouver les fiches
> candidates. J'ai testé la fonction proprement dite dans Access (en
créant
la
> requête en mode graphique). Tout fonctionne.
>
> Par contre en la refaisant dans VB, je m'aperçois que la fonction est
> comprise comme étant du texte. Comment puis je faire pour que la
fonction
> soit reconnue au même titre que toutes les autres fonctions d'Access ou
Je ne me suis pas encore fait comprendre. Bien sûr, l'âge de la personne figure dans le champ approprié dès son inscription. Ma fonction ressemble à la tienne mais pour déterminer si il faut ou non ajouter 1 an à l'âge figurant déjà dans la base je compare l'age trouvé par le recalcule de l'âge et celui qui se trouve dans la base. Car il me faut, dans le cas d'un ajout à l'âge de la personne, il me faut également dans ce cas ajouter un an à ses enfants éventuels.
soit : Function CalculDtAnniversaire(DtNaissance As Variant, AgeFiche As Integer) As Boolean ' Calcul l'âge de la personne à partir de sa date de naissance, puis vérifie si le nombre calculé est ' différent de celui qui a été trouvé. ' La fonction retourne Vrai si cela a changé faux dans le contraire ' Dim TAge, Resultat As Integer ' ' Calcul l'âge de la fiche à partir de sa date de naissance If Month(Date) < Month(DtNaissance) Or (Month(Date) Month(DtNaissance) And Day(Date) < Day(DtNaissance)) Then TAge = Year(Date) - Year(DtNaissance) - 1 Else TAge = Year(Date) - Year(DtNaissance) End If ' Comparre le résultat avec l'âge figurant dans la base de données If TAge > AgeFiche Then CalculDtAnniversaire = True Else CalculDtAnniversaire = False End Function
Comme ça je ne garde que ceux qui intéresse.
Christian.
"Jessy Sempere [MVP]" a écrit dans le message de news: camut2$t12$
Bonjour
Pourquoi tu veux stocker la valeur "Age", c'est une donnée calculé, ce n'est pas utile de stocker cette valeur, tu dois déjà avoir un champ contenant la date d'anniversaire ???
Perso j'utiliserais une fonction perso pour déterminer l'age de la
personne
et ensuite je passerais par une requête pour afficher l'age
Exemple pour la fonction de calcul de l'age :
Function Age(dtBirthDay As Date) As Integer Age = DateDiff("yyyy", dtBirthDay, Date) Select Case Month(dtBirthDay) Case Is > Month(Date) Age = Age - 1 Case Month(Date) If Day(dtBirthDay) > Day(Date) Then Age = Age - 1 End Select End Function
Ensuite tu fais une requête du style : Select Personne, Age([ChampDateAnniversaire]) From TaTable;
Mais ce n'est qu'une façon de faire parmi tant d'autres... ;-)
@+ Jessy Sempere - Access MVP
------------------------------------ Site @ccess : http://access.jessy.free.fr/ Pour l'efficacité de tous : http://users.skynet.be/mpfa/ ------------------------------------ "TEV" a écrit dans le message news: 40ce247d$0$1827$ > Bonjour, > > Je cherche à ajouter à chaque anniversaire +1 à l'âge de la personne > enregistrée dans la base de données. Pour ce faire je pensais fire une > requête mise à jour avec une fonction de mon cru pour trouver les fiches > candidates. J'ai testé la fonction proprement dite dans Access (en
créant
la > requête en mode graphique). Tout fonctionne. > > Par contre en la refaisant dans VB, je m'aperçois que la fonction est > comprise comme étant du texte. Comment puis je faire pour que la
fonction
> soit reconnue au même titre que toutes les autres fonctions d'Access ou