OVH Cloud OVH Cloud

"Fonction ... non définie dans l'expression" à partir de VB

8 réponses
Avatar
stephane.letreis
Bonjour

J'ai créé une fonction public dans un module dans ma base access.
Lorsque je lance cette fonction à partir d'Access, elle s'exécute
correctement.
Quand, je la lance à partir de VB par contre, j'obtiens un message
d'erreur : "Fonction ... non définie dans l'expression."
Lorsque j'appelle de la même manière ( recordset.open "select * from
fonction() par exemple ) une fonction access intégrée, pas de problème
à partir de VB.

Comment puis-je faire pour utiliser ma fonction perso à partir de VB ?

Merci pour vos éclaicissements :-)

8 réponses

Avatar
Stéphane Le Tréis
Hmm, pour la requête, il fallait lire : "Select fonction(paramètres,...)
from table", toutes mes excuses.
En fait, c'est lorsque j'appelle la fonction au sein d'une requête à partir
de Visual Basic que j'ai mon erreur.
J'ai également essayé d'appeler cette fonction à partir d'une vue dans
Access, puis de n'appeler que la vue à partir de VB. J'ai toujours le même
message.

J'ai également essayé de copier le code dans VB, sans succès.

Merci de vos réponses.

Stéphane

"Stephane Le Tr?is" a écrit dans le message de
news:
Bonjour

J'ai créé une fonction public dans un module dans ma base access.
Lorsque je lance cette fonction à partir d'Access, elle s'exécute
correctement.
Quand, je la lance à partir de VB par contre, j'obtiens un message
d'erreur : "Fonction ... non définie dans l'expression."
Lorsque j'appelle de la même manière ( recordset.open "select * from
fonction() par exemple ) une fonction access intégrée, pas de problème
à partir de VB.

Comment puis-je faire pour utiliser ma fonction perso à partir de VB ?

Merci pour vos éclaicissements :-)


Avatar
Xavier HUE
Bonjour Stéphane,

Une piste: Ta fonction est-elle créée dans un module de
formulaire ou d'état?
Si oui, déplace là dans un module standard.

Cordialement.
Avatar
Pierre CFI [mvp]
bonjour
tu peux donner le code ou il y a cette req avec ta fonction ?

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Stéphane Le Tréis" a écrit dans le message de news:c787e2$1i2$
Hmm, pour la requête, il fallait lire : "Select fonction(paramètres,...)
from table", toutes mes excuses.
En fait, c'est lorsque j'appelle la fonction au sein d'une requête à partir
de Visual Basic que j'ai mon erreur.
J'ai également essayé d'appeler cette fonction à partir d'une vue dans
Access, puis de n'appeler que la vue à partir de VB. J'ai toujours le même
message.

J'ai également essayé de copier le code dans VB, sans succès.

Merci de vos réponses.

Stéphane

"Stephane Le Tr?is" a écrit dans le message de
news:
Bonjour

J'ai créé une fonction public dans un module dans ma base access.
Lorsque je lance cette fonction à partir d'Access, elle s'exécute
correctement.
Quand, je la lance à partir de VB par contre, j'obtiens un message
d'erreur : "Fonction ... non définie dans l'expression."
Lorsque j'appelle de la même manière ( recordset.open "select * from
fonction() par exemple ) une fonction access intégrée, pas de problème
à partir de VB.

Comment puis-je faire pour utiliser ma fonction perso à partir de VB ?

Merci pour vos éclaicissements :-)






Avatar
Stéphane Le Tréis
Hélas, j'ai bien placé ma fonction dans un module standard.

Merci quand même pour la piste.

Cordialement

"Xavier HUE" a écrit dans le message de
news:824b01c431e1$d0061a40$
Bonjour Stéphane,

Une piste: Ta fonction est-elle créée dans un module de
formulaire ou d'état?
Si oui, déplace là dans un module standard.

Cordialement.
Avatar
Stéphane Le Tréis
J'ai simplifié la requête à l'extrême (normalement la fonction doit me
renvoyer un montant pour un cours de devise et à une date précis)

coté Access j'ai ça :

Option Compare Database

Public Function montant_comptable(v_montant As Integer, v_devise As Integer)
As Integer

montant_comptable = v_montant * v_devise

End Function

coté vb :

Private Sub Command1_Click()
Dim Sql As String
Dim rs As New ADODB.Recordset

Sql = "select montant_comptable(2,3)"
rs.Open Sql, Cn, adOpenForwardOnly, adLockReadOnly '(avec cn comme connexion
ADODB)
MsgBox rs(0), vbOKOnly
rs.Close

End Sub

en exécution, donc, vb plante sur l'ouverture du recordset. Si je fais un
"copier-coller" de ma chaine SQL et que je la joue dans Access, pas de
problème.

Merci

"Pierre CFI [mvp]" a écrit dans le message de
news:%
bonjour
tu peux donner le code ou il y a cette req avec ta fonction ?

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Stéphane Le Tréis" a écrit dans le message
de news:c787e2$1i2$

Hmm, pour la requête, il fallait lire : "Select fonction(paramètres,...)
from table", toutes mes excuses.
En fait, c'est lorsque j'appelle la fonction au sein d'une requête à
partir


de Visual Basic que j'ai mon erreur.
J'ai également essayé d'appeler cette fonction à partir d'une vue dans
Access, puis de n'appeler que la vue à partir de VB. J'ai toujours le
même


message.

J'ai également essayé de copier le code dans VB, sans succès.

Merci de vos réponses.

Stéphane

"Stephane Le Tr?is" a écrit dans le message
de


news:
Bonjour

J'ai créé une fonction public dans un module dans ma base access.
Lorsque je lance cette fonction à partir d'Access, elle s'exécute
correctement.
Quand, je la lance à partir de VB par contre, j'obtiens un message
d'erreur : "Fonction ... non définie dans l'expression."
Lorsque j'appelle de la même manière ( recordset.open "select * from
fonction() par exemple ) une fonction access intégrée, pas de problème
à partir de VB.

Comment puis-je faire pour utiliser ma fonction perso à partir de VB ?

Merci pour vos éclaicissements :-)










Avatar
machin
Bonjour,


Stéphane Le Tréis wrote:
| Hélas, j'ai bien placé ma fonction dans un module standard.
|
| Merci quand même pour la piste.
|
| Cordialement
|


Si ta fonction s'appelle "bidule", renomme le module en BasBidule.

Il ne faut pas donner à un objet access le nom d'une fonction.
Par exemple, on évitera de nommer un nom "Name" car c'est une fonction d'Access.
Idem pour les fonctions perso, le module doit avoir un nom différent des fonctions
que lui ou un autre module contient.

A+
Avatar
Stéphane Le Tréis
Je ne crois pas que ce soit ça, mon module s'appelle ModuleFonctions et ma
fonction répond au doux nom de Montant_Comptable ().

Merci quand même, ça m'a permis de résoudre un autre problème au passage :-)

Stef

"machin" <incognito ;-)> a écrit dans le message de
news:


Si ta fonction s'appelle "bidule", renomme le module en BasBidule.

Il ne faut pas donner à un objet access le nom d'une fonction.
Par exemple, on évitera de nommer un nom "Name" car c'est une fonction
d'Access.

Idem pour les fonctions perso, le module doit avoir un nom différent des
fonctions

que lui ou un autre module contient.

A+




Avatar
Stéphane Le Tréis
Bon, apparemment, on ne peut pas utiliser une fonction "perso" en dehors
d'Access. On ne peut utiliser que les fonctions intégrées, et encore, pas
toutes d'après ce que j'ai compris...

Quelques renseignements là pour ceux que ça intéresse. (sites en Anglais)

http://brenreyn.blogspot.com
http://support.microsoft.com/default.aspx?kbid)4698