IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

DAO impossible d'utiliser une fonction dans un requete


Sujet :

VBA Access

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 47
    Points
    47
    Par défaut DAO impossible d'utiliser une fonction dans un requete
    Bonjour
    je n'arrive pas utiliser une fonction VBA ecrite dans un module dans une requete (il me dit qu'elle n'est pas définie). Comment puis-je résoudre cela?
    merci d'avance

  2. #2
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    Hello,

    Est-elle dans un module accessible : donc pas dans un module de classe ?
    Passe-t-elle à la compilation ?
    Peux tu y accéder par le générateur d'expression ?

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 47
    Points
    47
    Par défaut
    oui pour les trois mais dans l'ecriture sql ca ne marche pas...

  4. #4
    Expert éminent
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Points : 6 781
    Points
    6 781
    Par défaut
    donne nous ton code en désespoir de cause ... on verra si une faute apparaît ...

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 47
    Points
    47
    Par défaut
    voici ma fonction mis dans un module appelé RecupFamille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    Option Compare Database
     
    Public Function RecupFamille(Nom As Long) As String
        Dim res As DAO.Recordset
        Dim SQL As String
        'Selectionne les participant du projet
        SQL = "SELECT Prénom FROM T_Enfant WHERE Nom=" & Nom
        Set res = CurrentDb.OpenRecordset(SQL)
        'Concatene les différents enregistrement
            While Not res.EOF
            RecupFamille = RecupFamille & res.Fields(0).Value & " "
            res.MoveNext
            Wend
        'Enleve le dernier espace
        RecupFamille = Left(RecupFamille, Len(RecupFamille) - 1)
        'libere la mémoire
        Set res = Nothing
    End Function
    et voici ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT DISTINCT T_Enfant.Nom, RecupFamille(Nom) AS Prénom
    FROM T_Enfant;

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut Re: DAO impossible d'utiliser une fonction dans un requete
    Bonjour,
    Citation Envoyé par exter666
    je n'arrive pas utiliser une fonction VBA ecrite dans un module dans une requete (il me dit qu'elle n'est pas définie). Comment puis-je résoudre cela?
    Cette requête est-elle exécutée à partir d'une application Access ou bien utilises-tu la bibliothèque DAO à partir d'un autre environnement ?

    Dans le premier cas (application Access) ça devrait fonctionner.
    Dans le deuxième cas (application non Access utilisant DAO), ça ne peut pas marcher (et c'est bien dommage ).

    Il y a des moyens de contouner le pb, par exemple en remplissant une table de travail composée d'un champ [Nom] et d'un deuxième champ contenant la concaténation des prénoms, et en modifiant la requête pour effectuer une jointure avec cette table de travail, sur le champ [Nom].

    Bon courage.
    =JBO=

  7. #7
    Responsable Access

    Avatar de Arkham46
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    5 865
    Détails du profil
    Informations personnelles :
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Septembre 2003
    Messages : 5 865
    Points : 14 526
    Points
    14 526
    Par défaut
    Salut,

    Ne donne pas le même nom au module et à la fonction, ça provoque des conflits.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 47
    Points
    47
    Par défaut
    merci Arkham46 c'etait un probleme de nom (en renommant module1 ca marche) mais now j'ai un autre probleme:
    il me dit que le type du paramètre n'est pas le meme pourtant le champ nom entré comme paramètre dans la methode est bien un string (texte de 255caractères max)???
    voici mon code un peu modifié
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Public Function RecupPrenom2(Nom As String) As String
        Dim res As DAO.Recordset
        Dim SQL As String
        'Selectionne les  projet du partcipant
         SQL = "SELECT Prénom FROM T_Enfant WHERE Nom=" & Chr(34) & Nom & Chr(34)
        Set res = CurrentDb.OpenRecordset(SQL)
        'Concatene les différents enregistrement
            While Not res.EOF
            RecupProjet = RecupProjet & res.Fields(0).Value & ";"
            res.MoveNext
            Wend
        'Enleve le dernier ;
        RecupProjet = Left(RecupProjet, Len(RecupProjet) - 1)
        'libere la mémoire
        Set res = Nothing
    End Function
    et ma requete est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT DISTINCT T_Enfant.Nom, RecupPrenom2(Nom) AS LesPrenoms
    FROM T_Enfant;

  9. #9
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 47
    Points
    47
    Par défaut
    en faisant des recherches j'ai trouvé que le probleme ne venait pas de mon code mais bien de ma requete... tout fonctionne si je retire le distinct (mais alors j'ai plusieurs fois le nom ce que je ne veux pas). visiblement le distinct et ma methode ou fonction ne s'apprécie pas... quelqu'un a une idée?

  10. #10
    Membre actif
    Avatar de Trini
    Homme Profil pro
    Dresseur de puce
    Inscrit en
    Juillet 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dresseur de puce

    Informations forums :
    Inscription : Juillet 2005
    Messages : 189
    Points : 264
    Points
    264
    Par défaut
    Bonjour,

    Un truc bizarre...
    Si on regarde tes dernières lignes de code, tu utilises ta fonction RecupPrenom2 et dans les lignes de code tu mets les prénoms dans RecupProjet.
    Résultat : ta fonction retourne une chaine vide dans ce cas.

    Tu dois déjà remplacer RecupProjet par RecupPrenom2 dans tes lignes.

    Salut,

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 105
    Points : 47
    Points
    47
    Par défaut
    oui merci petite erreur de ma part

Discussions similaires

  1. [RegEx] preg_replace : utiliser une fonction dans les paramètres
    Par Hell dans le forum Langage
    Réponses: 2
    Dernier message: 24/05/2008, 18h32
  2. Comment utiliser une fonction dans une fonction
    Par hatenaku dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2008, 20h00
  3. Comment utiliser une fonction dans une classe.
    Par metalamania dans le forum wxPython
    Réponses: 5
    Dernier message: 17/02/2008, 17h50
  4. Utiliser une fonction dans un module
    Par formidable78 dans le forum VBA Access
    Réponses: 11
    Dernier message: 30/01/2008, 12h49
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo