OVH Cloud OVH Cloud

Requête stockée appelée marche pas

5 réponses
Avatar
N
Bonjour,

Voici le problème, j'ai une requête (appelée Anniversaire) stockée sous
Access. Celle-ci comprend une fonction écrite dans un module de la BD où se
trouve la requête stockée. En gros cela donne ça :

UPDATE Renseignement LEFT JOIN Enfant ON Renseignement.ID = Enfant.IDR SET
Renseignement.Age = CalculDtAnniversaire([dtNaissance],[Age]),
Enfant.AgeEnfant = [AgeEnfant]+1
WHERE (((bdtAnniversaire([DtNaissance],[Age]))=True));

* La fonction bdtAnniversaire est là pour délimiter le terrain.

Donc en exécution dans Access, aucun problème. Par contre, lorsque je la
lance de VB avec cette ligne de code

Set AdoC = New adodb.Connection
Set AdoRe = New adodb.Recordset
'Connexion avec la base de données et appel de la requête stockée
AdoC.Open Scon
AdoRe.Open "[Anniversaire]", AdoC, adOpenForwardOnly, , adCmdStoredProc

Il me dit que cela ne marche pas en raison de cette fonction
calculDtAnniversaire, plus précisément, "fonction non définie dans
l'expression.

Comment faire pour que cette fonction puisse être reconnue. Sinon je pense à
faire une macro qui lancerait cette requête de l'intérieur. Mais je ne vois
pas comment lancer cette macro à partir de vb.

Christian.

5 réponses

Avatar
driss hanib
pour ma part j'ai eu le même problème. pas réslu . il faut contourner.. ?
essaie de faire une sous requête qui contient la fonction que tu as créée
dans Access et appelle la dans ta requête principale. a voir si cela ne
ralentit pas trop ta requête..

Driss
"N" a écrit dans le message de news:
4429c946$0$9650$
Bonjour,

Voici le problème, j'ai une requête (appelée Anniversaire) stockée sous
Access. Celle-ci comprend une fonction écrite dans un module de la BD où
se trouve la requête stockée. En gros cela donne ça :

UPDATE Renseignement LEFT JOIN Enfant ON Renseignement.ID = Enfant.IDR SET
Renseignement.Age = CalculDtAnniversaire([dtNaissance],[Age]),
Enfant.AgeEnfant = [AgeEnfant]+1
WHERE (((bdtAnniversaire([DtNaissance],[Age]))=True));

* La fonction bdtAnniversaire est là pour délimiter le terrain.

Donc en exécution dans Access, aucun problème. Par contre, lorsque je la
lance de VB avec cette ligne de code

Set AdoC = New adodb.Connection
Set AdoRe = New adodb.Recordset
'Connexion avec la base de données et appel de la requête stockée
AdoC.Open Scon
AdoRe.Open "[Anniversaire]", AdoC, adOpenForwardOnly, , adCmdStoredProc

Il me dit que cela ne marche pas en raison de cette fonction
calculDtAnniversaire, plus précisément, "fonction non définie dans
l'expression.

Comment faire pour que cette fonction puisse être reconnue. Sinon je pense
à faire une macro qui lancerait cette requête de l'intérieur. Mais je ne
vois pas comment lancer cette macro à partir de vb.

Christian.



Avatar
Clive Lumb
"N" a écrit dans le message de
news:4429c946$0$9650$
Bonjour,

Voici le problème, j'ai une requête (appelée Anniversaire) stockée sous
Access. Celle-ci comprend une fonction écrite dans un module de la BD où


se
trouve la requête stockée. En gros cela donne ça :

UPDATE Renseignement LEFT JOIN Enfant ON Renseignement.ID = Enfant.IDR SET
Renseignement.Age = CalculDtAnniversaire([dtNaissance],[Age]),
Enfant.AgeEnfant = [AgeEnfant]+1
WHERE (((bdtAnniversaire([DtNaissance],[Age]))=True));

* La fonction bdtAnniversaire est là pour délimiter le terrain.

Donc en exécution dans Access, aucun problème. Par contre, lorsque je la
lance de VB avec cette ligne de code

Set AdoC = New adodb.Connection
Set AdoRe = New adodb.Recordset
'Connexion avec la base de données et appel de la requête stockée
AdoC.Open Scon
AdoRe.Open "[Anniversaire]", AdoC, adOpenForwardOnly, , adCmdStoredProc

Il me dit que cela ne marche pas en raison de cette fonction
calculDtAnniversaire, plus précisément, "fonction non définie dans
l'expression.

Comment faire pour que cette fonction puisse être reconnue. Sinon je pense


à
faire une macro qui lancerait cette requête de l'intérieur. Mais je ne


vois
pas comment lancer cette macro à partir de vb.

Christian.



Cela ne marche pas car "procédure stockée" ne veut pas dire "fonction
stockée"
Ton appel à calculDtAnniversaire demande une action par VBA dans Access, pas
une simple requête SQL.
Il existe plusieurs solutions, dont (AMHA) le plus simple est de faire le
calcul de la date anniversaire sous VB6 et de la passer comme paramètre -
idem pour le WHERE.
Avatar
Christian
Merci beaucoup pour vos réponses.
Le problème de faire le calcul sous VB est que le temps de traitement est
très long, c'est pourquoi je m'orientais vers cette solution. Sinon que
signifie AMHA ?

Je vais tenter la solution de Driss et vous tient au courant.

Christian.


"Clive Lumb" a écrit dans le message
de news: #

"N" a écrit dans le message de
news:4429c946$0$9650$
> Bonjour,
>
> Voici le problème, j'ai une requête (appelée Anniversaire) stockée sous
> Access. Celle-ci comprend une fonction écrite dans un module de la BD où
se
> trouve la requête stockée. En gros cela donne ça :
>
> UPDATE Renseignement LEFT JOIN Enfant ON Renseignement.ID = Enfant.IDR


SET
> Renseignement.Age = CalculDtAnniversaire([dtNaissance],[Age]),
> Enfant.AgeEnfant = [AgeEnfant]+1
> WHERE (((bdtAnniversaire([DtNaissance],[Age]))=True));
>
> * La fonction bdtAnniversaire est là pour délimiter le terrain.
>
> Donc en exécution dans Access, aucun problème. Par contre, lorsque je la
> lance de VB avec cette ligne de code
>
> Set AdoC = New adodb.Connection
> Set AdoRe = New adodb.Recordset
> 'Connexion avec la base de données et appel de la requête stockée
> AdoC.Open Scon
> AdoRe.Open "[Anniversaire]", AdoC, adOpenForwardOnly, , adCmdStoredProc
>
> Il me dit que cela ne marche pas en raison de cette fonction
> calculDtAnniversaire, plus précisément, "fonction non définie dans
> l'expression.
>
> Comment faire pour que cette fonction puisse être reconnue. Sinon je


pense
à
> faire une macro qui lancerait cette requête de l'intérieur. Mais je ne
vois
> pas comment lancer cette macro à partir de vb.
>
> Christian.

Cela ne marche pas car "procédure stockée" ne veut pas dire "fonction
stockée"
Ton appel à calculDtAnniversaire demande une action par VBA dans Access,


pas
une simple requête SQL.
Il existe plusieurs solutions, dont (AMHA) le plus simple est de faire le
calcul de la date anniversaire sous VB6 et de la passer comme paramètre -
idem pour le WHERE.






Avatar
Clive Lumb
Christian wrote:
Merci beaucoup pour vos réponses.
Le problème de faire le calcul sous VB est que le temps de traitement
est très long, c'est pourquoi je m'orientais vers cette solution.
Sinon que signifie AMHA ?

Je vais tenter la solution de Driss et vous tient au courant.

Christian.



AMHA = A mon humble avis
Avatar
N
> AMHA = A mon humble avis


J'étais partit sur un process Access dont je n'avais jamais entendu parlé,
ouf ! :-)

Entre temps, j'ai testé la proposition de Driss qui n'a pas fonctionné pour
les mêmes raisons. Du coup, à partir de VB j'appelle une macro contenue dans
Access qui elle même exécute la fameuse requête. Ce n'est pas élégant mais
cela fonctionne.

Christian.

"Clive Lumb" a écrit dans le message
de news:
Christian wrote:
Merci beaucoup pour vos réponses.
Le problème de faire le calcul sous VB est que le temps de traitement
est très long, c'est pourquoi je m'orientais vers cette solution.
Sinon que signifie AMHA ?

Je vais tenter la solution de Driss et vous tient au courant.

Christian.