Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Appel d'une fonction "perso" dans une requête

4 réponses
Avatar
TEV
Bonjour,

Je me connecte via VB6 sur base Access. Je souhaite ajouter un an aux dates
anniversaires des fiches figurantes dans la base de données.

Pour ce faire j'ai pensé à une fonction qui vérifie s'il faut ou non ajouter
l'âge et une requête UPDATE.

Seulement, comment faire pour que VB fasse le calcul grâce à la fonction.
Voici cette idée par la requête (qui fonctionne sous Access, mais pas sous
VB puisque la fonction n'est reconnue que sous forme de texte. Et Access ne
la reconnaît pas (lorsque la requête est exécutée à partir de VB) la
fonction qui figure pourtant dans la base de données.

RQAjoutAn = "UPDATE renseignement LEFT JOIN enfant ON Renseignement.ID =
Enfant.IDR " & _
"SET Renseignement.age=[Renseignement.age]+1,
Enfant.AgeEnfant=[Enfant.AgeEnfant]+1 " & _
"WHERE (((CalculDtAnniversaire([dtNaissance],[age]))=-1)) ;"

Christian.

4 réponses

Avatar
Michel Walsh
Salut,


En effet, Access + Jet ont un lien privilégié qui n'existe pas avec VB6
+ Jet, en ce sens qu'une fonction publique personnelle définie dans un
module standard de Access peut être réutilisée dans une requête SQL, mais
pas une fonction VB dans un module VB (ou Delphi, ou C++).


Espérant être utile,
Vanderghast, Access MVP

"TEV" wrote in message
news:40cdb4a6$0$8743$
Bonjour,

Je me connecte via VB6 sur base Access. Je souhaite ajouter un an aux
dates

anniversaires des fiches figurantes dans la base de données.

Pour ce faire j'ai pensé à une fonction qui vérifie s'il faut ou non
ajouter

l'âge et une requête UPDATE.

Seulement, comment faire pour que VB fasse le calcul grâce à la fonction.
Voici cette idée par la requête (qui fonctionne sous Access, mais pas sous
VB puisque la fonction n'est reconnue que sous forme de texte. Et Access
ne

la reconnaît pas (lorsque la requête est exécutée à partir de VB) la
fonction qui figure pourtant dans la base de données.

RQAjoutAn = "UPDATE renseignement LEFT JOIN enfant ON Renseignement.ID > Enfant.IDR " & _
"SET Renseignement.age=[Renseignement.age]+1,
Enfant.AgeEnfant=[Enfant.AgeEnfant]+1 " & _
"WHERE (((CalculDtAnniversaire([dtNaissance],[age]))=-1)) ;"

Christian.




Avatar
TEV
Merci beaucoup pour la réponse.

Espérant être utile
Oui. Cela m'évite de m'acharner sur cette voie. 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 ?

Christian.


"Michel Walsh" a écrit dans le message
de news:
Salut,


En effet, Access + Jet ont un lien privilégié qui n'existe pas avec
VB6

+ Jet, en ce sens qu'une fonction publique personnelle définie dans un
module standard de Access peut être réutilisée dans une requête SQL, mais
pas une fonction VB dans un module VB (ou Delphi, ou C++).


Espérant être utile,
Vanderghast, Access MVP

"TEV" wrote in message
news:40cdb4a6$0$8743$
Bonjour,

Je me connecte via VB6 sur base Access. Je souhaite ajouter un an aux
dates

anniversaires des fiches figurantes dans la base de données.

Pour ce faire j'ai pensé à une fonction qui vérifie s'il faut ou non
ajouter

l'âge et une requête UPDATE.

Seulement, comment faire pour que VB fasse le calcul grâce à la
fonction.


Voici cette idée par la requête (qui fonctionne sous Access, mais pas
sous


VB puisque la fonction n'est reconnue que sous forme de texte. Et Access
ne

la reconnaît pas (lorsque la requête est exécutée à partir de VB) la
fonction qui figure pourtant dans la base de données.

RQAjoutAn = "UPDATE renseignement LEFT JOIN enfant ON Renseignement.ID > > Enfant.IDR " & _
"SET Renseignement.age=[Renseignement.age]+1,
Enfant.AgeEnfant=[Enfant.AgeEnfant]+1 " & _
"WHERE (((CalculDtAnniversaire([dtNaissance],[age]))=-1)) ;"

Christian.








Avatar
Rv
Bonjour,

Il reste peut-être la possibilité de "piloter" par programmation VB la
base Access contenant la requête déjà enregistrée. Cela dépend sans doute de
l'architecture de l'application!
Il faut rajouter les références DAO et Access.

Dim objDb As DAO.Database
Dim objQuery As DAO.QueryDef
Dim objAccess As Access.Application

Set objAccess = New Access.Application
objAccess.OpenCurrentDatabase ("cheminDeLabasenomBase.mdb")
Set objDb = objAccess.CurrentDb
Set objQuery = objDb.QueryDefs("procTest")
objQuery.Execute
Set objQuery = nothing
set objDb = nothing
objAccess.Quit
Set objAccess = Nothing


A+

Rv

"TEV" a écrit dans le message de
news:40cef563$0$7948$
Merci beaucoup pour la réponse.

Espérant être utile
Oui. Cela m'évite de m'acharner sur cette voie. 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 ?

Christian.





Avatar
TEV
Merci, beaucoup, c'est une solution que j'ai envisagé en guise de désespoir.
Mais comme tu me mâche le boulot...
Encore merci.

Christian.
"Rv" a écrit dans le message de news:

Bonjour,

Il reste peut-être la possibilité de "piloter" par programmation VB la
base Access contenant la requête déjà enregistrée. Cela dépend sans doute
de

l'architecture de l'application!
Il faut rajouter les références DAO et Access.

Dim objDb As DAO.Database
Dim objQuery As DAO.QueryDef
Dim objAccess As Access.Application

Set objAccess = New Access.Application
objAccess.OpenCurrentDatabase ("cheminDeLabasenomBase.mdb")
Set objDb = objAccess.CurrentDb
Set objQuery = objDb.QueryDefs("procTest")
objQuery.Execute
Set objQuery = nothing
set objDb = nothing
objAccess.Quit
Set objAccess = Nothing


A+

Rv

"TEV" a écrit dans le message de
news:40cef563$0$7948$
Merci beaucoup pour la réponse.

Espérant être utile
Oui. Cela m'évite de m'acharner sur cette voie. 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 ?

Christian.