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 :

[VBA-A]Recuperation champ d'une table dans une collection


Sujet :

VBA Access

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Points : 23
    Points
    23
    Par défaut [VBA-A]Recuperation champ d'une table dans une collection
    Bonjour tout le monde,
    j'au rait une question a vous poser,voila..
    j'ai mis une requete sql dans une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public function nomFunction As collection
    ...
    end function
    je fait bien un while rs.EOF....Wend et je fait un set de ma collection avec le contenu de mon recordSet

    lorsque je veus utiliser les item de la collection en faisant
    il me dit Erreur d'execution 438
    Propriété ou methode non gerée par cet objet, alors que c'est bien une collection (meme chose lorsque je le place dans un debug.Print)

    je precise que mon debug.print aisin que la manipulation a la base se fait une boucle for.

    J'aurais besoin de votre connaissance en VB, en vous remerciant

  2. #2
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Salut,
    je crois que tu sautes une étape:
    Tu dois déclarer une collection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Collec As Collection
    puis la remplir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Collec = nomFunction()
    puis l'utiliser:

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    il est dommage de créer une collection alors qu'il en existe déjà une
    dao.database.tabledefs.fields
    si cependant cela te te nte
    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
     
    Option Compare Database
    Option Explicit
    Dim v As New Collection
     
    Function ajoute(x As String) As Boolean
    Dim base As DAO.Database
    Dim u As DAO.TableDef
    Dim z As DAO.Field
    Set base = CurrentDb()
    Set u = base.TableDefs(x)
    For Each z In u.Fields
    MsgBox (z.Name)
    v.Add (z.Name)
    Next z
    End Function

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    merci bien.
    je teste tout ca et je vous tiens au courant

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    erf me voila avec un autre souci
    je consulte fait deja une requete dans le meme module access.
    j'utilise donc deja
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDB.OpenRecordset(requete1)
    et lorsque j'utilise une seconde fois cette instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurrentDB.OpenRecordset(requete2)
    j'obteins une erreur du type
    Erreur '3048'
    Impossible d'ouvrir plus de bases de données.

    need help s'il vous plait yé soui perdou

  6. #6
    Membre expert
    Avatar de khany
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 073
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 073
    Points : 3 890
    Points
    3 890
    Par défaut
    CurrentDB est la même table ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    oui
    en faisant des debug print je me suis rendu compte que ma requete etait faite indefiniment juste a saturation c pourquoi j'ai ce message d'erreur.

    ce que je ne comprend pas c'est que la fonction qui boucle indefiniment et un copier coller d'une fonction qui quant à elle tourne impecablement bien.

    voici ma fonction

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Public Function nomFunction() As Collection
     
       '-----------------------------------------
        ' requete SQL
        '-----------------------------------------
        Dim sqlreq As String
        Dim a As Integer
        sqlreq = "select * from PROD_Site"
        Debug.Print "requete sql : " &  sqlreq 
        Dim rs As DAO.Recordset
        Set rs = CurrentDb.OpenRecordset(sqlreq )
     
        '-----------------------------------------
        ' liste des sites
        '-----------------------------------------
        Dim col As New Collection
        While Not rs.EOF
            Dim obj As prsSite
            Set obj = New prsSite
            obj.Site = rs!ColonneDeTable
            col.Add obj
            rs.MoveNext
        Wend
        Set col = nomFunction
        Debug.Print "sql item" & nomFunction(1)
        CurrentDb.Close
    End Function
    le obj.SIte est une sorte de cast en String

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    en regardant un peu le site je suis tomber sur cette page
    http://access.developpez.com/faq/?page=SQL#Recordset

    je l'ai mise dans mon module et ca fait le mme resultat, il boucle sans arret, yé souis vraiment perdu

    j'ai besoin de votre connaissance encore une fois svp

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 419
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 419
    Points : 4 297
    Points
    4 297
    Par défaut
    je suggère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            Dim obj As prsSite 
            Set obj = New prsSite 
    While Not rs.EOF 
     
            obj.Site = rs!ColonneDeTable 
            col.Add obj 
            rs.MoveNext

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    ca marche toujours po..

    lorsqu'il me met l'erreur signalant que trop de base sont ouverte apres avoir ouvert ma currentDB jusqu'a saturation. le debuger me pointe la ligne

    ca fait plu d'une heure que je lit cette fonction et je ne capte toujours pas ce qui peut faire boucler cette function :scratch:

  11. #11
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Et si tu remplaçais cette ligne:
    Par
    Parce que là, tu réappelles ta fonction dans la fonction...

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    Merci Megaxel
    t'es un boss
    ca marche

  13. #13
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Pas de quoi... 8)
    C'est bizarre le nombre de programmeurs qui font cette erreur avec l'opérateur " = ".
    Et en passant, pourquoi est-ce que tu ne travailles pas directement avec ta collection "NomFunction"? Je ne crois pas que ça soit très utile de passer par ta collection intermédiaire.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2006
    Messages : 30
    Points : 23
    Points
    23
    Par défaut
    en fait mon but c'est de pouvoir utiliser les champs contenu dans la base dans une chaine de caractere (dans un chemin pour un fichier en fait)

    donc la ce que je pensait faire c'est "Me.nomFonction(1)" mais je me retrouve avec une erreur me disant 'Propriété ou methode non gérée par cet objet'

    bizarre bizarre, il faut que buche sur cette erreur maintenant

  15. #15
    Membre expérimenté Avatar de Megaxel
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    1 187
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 187
    Points : 1 405
    Points
    1 405
    Par défaut
    Alors là, reviens à ma première réponse, dans ce fil.
    Là, tu dois déclarer une collection, et la remplir en appelant ta fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MaCollec = NomFunction()
    GnaGnaGna = MaCollec(1)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. copier une table d'une BDD dans une table d'une autre BDD
    Par faniette dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/05/2013, 10h17
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. [AC-2003] insert des données d'une table dans une table d'une base externe
    Par marieo dans le forum VBA Access
    Réponses: 1
    Dernier message: 30/11/2009, 14h29
  4. Réponses: 2
    Dernier message: 24/02/2009, 17h40
  5. Réponses: 2
    Dernier message: 02/06/2006, 11h26

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