Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/07/2011, 10h03   #1
 
Homme
Consultant informatique
Inscription : juillet 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juillet 2011
Messages : 2
Points : -1
Points : -1
Par défaut erreur 3085 sur appel requete avec fonction

Bonjour,

j'ai le problème suivant.

j'ai une base de donnée Accès 2010 dans laquelle j'ai définit une fonction fnFunc qui retourne une chaine
j'utilise cette fonction (publique) dans une requête reqQuery:

Code :
select t.champ1, fnFunc(t.champ2) as champ2 from tblTable as t
Quand je visualise le résultat de la requête tout va bien, le résultat obtenu est bien celui escompté.

Dans un document Word, je créé une fonction qui ouvre la base de donnée Accèss (sans problèmes), J'essaye d'ouvrir un recordset sur la requete precedement definie:

Code :
set rst=db.openrecordset("reqQuery", dbOpenDynaset)
ou (qui ne change rien)

Code :
set rst=db.openrecordset("reqQuery", dbOpenDynaset)
j'obtiens alors l'erreur suivante:

Citation:
Erreur d'exécution '3085'

Fonction "fnFunc" non définie dans l'expression.
je ne sais pas comment résoudre le problème.

Mon objectif est de déporter au maximum certains traitement dans le base de données afin de rendre mon code Word plus lisible et surtout plus général, sans avoir de traitement spécifique de formatage de données.
ZargosLord est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/07/2011, 21h23   #2
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Je pense que tu ne peux pas ouvrir une requête contenant une fonction définie par l'utilisateur à l'extérieur d'Access.

La solution serait de remplacer ta fonction fnFunc par son équivalent écrit à partir des fonctions intégrées (DFirst(), Left(), Right(), ...).

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 16h25   #3
 
Homme
Consultant informatique
Inscription : juillet 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Indre et Loire (Centre)

Informations professionnelles :
Activité : Consultant informatique

Informations forums :
Inscription : juillet 2011
Messages : 2
Points : -1
Points : -1
En effet, c'est aussi la conclusion à laquelle je suis arrivé.
Le problème en fait c'est que la fonction en question est en réalité une requete, un peu comme si j'avais fait:

Code :
1
2
3
4
select champ1, 
(select champA' from table' where champ1'=champ1 groupe by ChampA'),
(select champB' from table'  where champ1'=champ1 groupe by ChampB') 
from table
Donc il va me falloir faire ca autrement
Sinon je crois que le plus efficace serait d'utiliser une vrai base de données, dans laquelle je peux faire des fonction intégrées.
ZargosLord est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2011, 18h02   #4
Modérateur
 
Homme René MAROT
Inscription : octobre 2005
Messages : 5 470
Détails du profil
Informations personnelles :
Nom : Homme René MAROT
Localisation : Canada

Informations forums :
Inscription : octobre 2005
Messages : 5 470
Points : 7 552
Points : 7 552
Citation:
Sinon je crois que le plus efficace serait d'utiliser une vrai base de données, dans laquelle je peux faire des fonction intégrées.
Access est une vraie base de données mais ce n'est pas forcément une solution universelle de même que ni Oracle, ni Ms-SQL Server et ni DB2 ne sont des solutions universelles quelles que soient leurs indéniables qualités.

A+
__________________
Vous voulez une réponse rapide et efficace à vos questions téchniques ? Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
marot_r est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2011, 09h52   #5
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
Bonjour,

J'ai un soucis du même genre avec une fonction left.
Je poste ce que j'ai constaté chez moi, peut-être cela permettra-t-il de trouver une solution pour l'un et pour l'autre.

Dans un query, j'utilise la fonction suivante, pour obtenir la première lettre contenue dans un champ prénom :

Si je lance le query en exécution, j'ai une erreur

3085 Undefined function 'Left' in expression.

Or, j'ai créé cette fonction avec l'assistant fonction dans la conception du query.

Je pense, dans mon cas, qu'il y a un problème de référence. Peut-être une bibliothèque non référencée, ou dont la priorité est mal placée.

C'est d'autant plus ennuyeux dans mon cas en ce sens que cette application tourne correctement sous Access 2002, 2003, 2007 mais pas sous 2010.

En vous souhaitant une bonne journée.

Edit : Hum... Omnubilé par la recherche d'une solution à mon problème, je n'ai pas regardé la date du message original de cette discussion.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 10h45   #6
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
Bonjour,

ZargosLord/marot_r
Il est inexact de dire qu'il n'est pas possible d'exploiter une fonction perso dans une requête via DAO et un Recordset...
Le seul pépin dans ce cas est que le mode Debogage au pas à pas peut être perturbé.
Cepandant, la fonction doit être une vraie fonction... Par exemple :
Code :
1
2
3
4
5
6
7
Function Age(ByVal NeLe As Date) As Integer
    Age = (Now - NeLe) \ 365.25
End Function
'---------------------------------------------
SQL = "SELECT TOP 1 Nom, Prenom, Age([DateNaissance]) FROM tblPersonnes;"
Set RS = DB.OpenRecordset(SQL, 2)
Debug.Print RS.Fields(1) & " a " &  RS.Fields(2) & " ans"
Geache
C'est effectivement un problème de référence.
Met des Option Explicit dans tous tes modules et Compile ton projet.

Argy
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 11h34   #7
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
@Argyronet : Merci, je vais essayer.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 12h19   #8
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
Bonjour,

J'ai passé en revue tous mes modules. Formulaires, Rapports et modules proprement dits. J'ai rajouté

là où cela manquait (très peu, en fait).

Et j'ai toujours cette erreur.

Mais je dois préciser qu'elle survient lors de l'ouverture d'un formulaire dont le recordsource est lié à un query.

C'est dans mon query que j'utilise cette fonction Left.

Bonne journée.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 12h37   #9
Rédacteur/Modérateur

 
Avatar de argyronet
 
Homme Jean-Philippe AMBROSINO
Panseur de bobos en solutions ETL
Inscription : mai 2004
Messages : 3 650
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe AMBROSINO
Localisation : France

Informations professionnelles :
Activité : Panseur de bobos en solutions ETL
Secteur : Finance

Informations forums :
Inscription : mai 2004
Messages : 3 650
Points : 6 209
Points : 6 209
Envoyer un message via MSN à argyronet
Et as-tu compilé ton projet ?
__________________
Ils comptent sur vous...

Ce qui donne son sens à la communication, c´est la réponse que l´on obtient. Si vous n´obtenez pas la réponse voulue, communiquez différemment.

Web Site@Mail
Livres : VBA pour OFFICE 2007 et MICROSOFT ACCESS 2007
Nouveau Tutoriel : Déployer vos applications avec Microsoft Access 2010
MDB Viewer : Visionneuse Access v4.0
argyronet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 12h50   #10
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
Euh, non. Pas encore.

Je fais dés que possible, j'ai une autre modification urgente à faire dans un autre projet.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 13h42   #11
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
Bonjour,

@Argyronet

Bon, ça va prendre un peu plus de temps que je ne l'avais pensé pour la compilation.

Je dois revérifier mes dernières modifications dans ce projet avant. J'ai détecté un autre problème lors de ma tentative de compilation.

Faut que je corrige cela en premier lieu.

Je reviens te dire quoi plus tard.

Bonne journée.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 08h02   #12
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
Bonjour,

J'ai recompilé le projet. Aucune erreur de compilation. Mais le problème persiste pour cette fonction Left.

Je continue mes recherches pour solutionner le problème.

Merci de te pencher sur mon soucis.

Bonne journée.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 10h29   #13
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
Visiblement, chez moi, c'est un problème avec ACCESS sur la machine avec laquelle je teste l'application avant de l'envoyer chez le client.

En effet, quand j'installe sur une machine différente, je n'ai plus le problème et je suis sous ACCESS 2010 aussi.

Je me trompe peut-être mais j'ai l'impression que ACCESS est corrompu sur ma machine habituelle de test. Je vais le réinstaller pour vérifier.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 07h39   #14
Membre habitué
 
Homme Georges HAROT
Inscription : août 2003
Messages : 122
Détails du profil
Informations personnelles :
Nom : Homme Georges HAROT
Âge : 53
Localisation : Belgique

Informations forums :
Inscription : août 2003
Messages : 122
Points : 104
Points : 104
Envoyer un message via MSN à Geache
Bonjour,

Après réinstallation de ACCESS sur la machine de test, je n'ai plus le problème.

Une bonne journée à tous.
Geache est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h21.


 
 
 
 
Partenaires

Hébergement Web