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

VB 6 et antérieur Discussion :

[VB6]Valeurs une collection renvoyée par la fonction d'une classe


Sujet :

VB 6 et antérieur

  1. #1
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut [VB6]Valeurs une collection renvoyée par la fonction d'une classe
    Bonsoir
    J'ai une fonction d'une classe qui renvoie une collection constituée de valeurs. Comment récupérer ces valeurs depuis le code d'une form : J'appelle la fonction, et après :
    Merci.

  2. #2
    HPJ
    HPJ est déconnecté
    Membre averti

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2003
    Messages : 260
    Points : 364
    Points
    364
    Par défaut
    Cette fonction retourne un objet Collection ou bien un tableau de valeurs :

    Un bout de code ... :
    Avant de poser une question, merci de chercher dans les rubriques suivantes:
    FAQ VB
    Tutoriaux VB
    Recherche avancée sur le forum

  3. #3
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Le code utilisé dans la form:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set MyCol = DataFact.FindProduit(dcComboGrille)
    strRetour = MyCol.Item(1)
    La fonction FindProduit de la classe crée une collection contenant les valeurs des champs d'un enregistrement. La collection est bien créee, mais au retour, la ligne strRetour renvoie une erreur:
    Argument ou appel de procédure incorect
    MyCol et vRetour ont bien été déclarées par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MyCol As New Collection
    Dim vRetour As Variant

  4. #4
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    juste en passant, c'est surement pas la cause de l'erreur mais tu as du
    strRetour et vRetour, c'est normal
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  5. #5
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Citation Envoyé par Thierry AIM
    juste en passant, c'est surement pas la cause de l'erreur mais tu as du
    strRetour et vRetour, c'est normal
    Non. J'avais démarré le message avec str, et en écrivant, je me suis rendu compte que vela allait poser un problème. J'ai donc mis en variant, mis j'ai mal corrigé le texte du message .

  6. #6
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Je viens de m'appercevoir que myCol ne contient aucun élément. Jusqu'alors, persuadé que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MyCol = DataFact.FindProduit(dcComboGrille)
    renvoyait "forcément" la collection, j'avais omis de vérifier avec
    ce qu'il ne faut jamais omettre .
    Donc la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set MyCol = DataFact.FindProduit(dcComboGrille)
    ne renvoie pas de collection , mais celle-ci est pourtant bien créée par la fonction.
    Bref, je rame

  7. #7
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Je viens de tester ceci avec succes:

    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
    Private Sub Command1_Click()
        Dim MyCol As New Collection
        Dim strRetour As Variant
     
        Set MyCol = FindProduit()
        strRetour = MyCol.Item(3)
     
        MsgBox strRetour
    End Sub
     
    Private Function FindProduit() As Collection
        Set FindProduit = New Collection
     
        FindProduit.Add "Item 1"
        FindProduit.Add "Item 2"
        FindProduit.Add "Item 3"
    End Function
    Peux tu afficher ta fonction FindProduit?

  8. #8
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Voici.
    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 FindProduit(ByVal CodeProduit As String) As Collection
     
      Dim Code As String
      Dim Designation As String
      Dim Description As String
      Dim Prix As Single
      Dim Taux As String
     
      rsProduits.Find "CodeProduit = '" & CodeProduit & "'"
      Code = rsProduits!CodeProduit
      Designation = rsProduits!DesignationProd
      'Description = rsProduits!DescriptionPro
      Prix = rsProduits!PuVente
      Taux = rsProduits!CodeTVA
     
      'Ajoute les membres à la collection DataMembers lors de l'initialisation de la classe
      MsgBox ("d " & colProduit.Count)
      With colProduit
        .Add "Code"
        .Add "Designation"
        '.Add "Description"
        .Add "PrixU"
        .Add "TVA"
        '.Add 6
        '.Add 7
      End With
            MsgBox ("F " & colProduit.Count)
    End Function
    Mais n'oublies pas que la fonction est dans une classe. Pour ce que tu as essayé, cela ne semble pas être le cas. Mais est-ce la cause du disfonctionnement, ce que je crois sans l'avoir encore testé.

  9. #9
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Je viens de tester ceci :

    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
    Private Sub Command1_Click()
        Dim DataFact As New DataFactClass
        Dim MyCol As New Collection
        Dim strRetour As Variant
     
        Set MyCol = DataFact.FindProduit()
        strRetour = MyCol.Item(3)
     
        MsgBox strRetour
    End Sub
     
    Public Function FindProduit() As Collection
        'Fonction définie dans la classe DataFactClass
        Set FindProduit = New Collection
     
        FindProduit.Add "Item 1"
        FindProduit.Add "Item 2"
        FindProduit.Add "Item 3"
    End Function
    Ca marche. Donc cela ne vient pas de l'encapsulation de la fonction FindProduit dans une classe...

    Si j'ai fait ce test, c'est pour vérifier qu'une fonction pouvait renvoyer une collection...

  10. #10
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    C'est normal que ta fonction FindProduit ne renvoie rien ?

    Confusion entre FindProduit et ColProduit peut-être?

  11. #11
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Citation Envoyé par Catbull
    C'est normal que ta fonction FindProduit ne renvoie rien ... ... ...
    Confusion entre FindProduit et ColProduit peut-être?
    Là, je ne vois pas du tout ce que tu veux dire, tant question normalité que question confusion
    FindProduit est la fonction et colProduit est la collection. Une erreur cependant dans le commentaire: c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'Ajoute les membres à la collection ColProduit lors de l'initialisation de la classe
    et non "DataMember. Mais comme c'est un commentaire, pas de problème...
    Bon, je reprendrais demain, j'en ai plein la tête! La nuit porte conseil, à moins que cela ne soit un contributeur
    Merci de ton concours et à +

  12. #12
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    Désolé, mais je suis comme catbull, je ne comprends pas d'ou tu sors ton colProduit

    une idée aussi, pourquoi ne pas renvoyer un rs clone de rsProduits sur lequel tu appliques un .Filter ? (mais c'est juste une idée)
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  13. #13
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Citation Envoyé par Thierry AIM
    Désolé, mais je suis comme catbull, je ne comprends pas d'ou tu sors ton colProduit
    La collection colProduit est crée dans la fonction FindProduit (voit code dans message 20:33).
    une idée aussi, pourquoi ne pas renvoyer un rs clone de rsProduits sur lequel tu appliques un .Filter ? (mais c'est juste une idée)
    Je voudrais justement éviter. D'ailleurs, il faut que je précise que la classe est une classe fournisseur de données, mais cela plante également avec une simple classe.

  14. #14
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Si FindProduit est une fonction qui renvoie une Collection il faut bien que dans le corps de la fonction il y ait une instruction du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set FindProduit = UneInstanceDeCollection
    Tu ne fais rien renvoyer à ta fonction. Elle instancie seulement colProduit...

  15. #15
    Rédacteur
    Avatar de jacma
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    612
    Détails du profil
    Informations personnelles :
    Âge : 79
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 612
    Points : 1 241
    Points
    1 241
    Par défaut
    Bon, j'aurais mieux fait de rester couché depuis hier
    Merci

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

Discussions similaires

  1. [Débutant] Synchroniser une collection TFS sans passer par visual
    Par origan88 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 19/07/2014, 09h58
  2. Comment binder à un DataGrid une collection d'objets accessible par une clé
    Par zoaax dans le forum Windows Presentation Foundation
    Réponses: 16
    Dernier message: 14/01/2011, 11h00
  3. Réponses: 15
    Dernier message: 16/09/2009, 16h19
  4. Réponses: 2
    Dernier message: 25/09/2007, 20h03
  5. Modifier une zone de texte désigné par la fonction eval(concat de variables)
    Par Franck2mars dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 19/07/2006, 11h43

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