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

WinDev Discussion :

Valeurs retournées par composant


Sujet :

WinDev

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut Valeurs retournées par composant
    Bonjour,
    j'ai fait un composant qui doit me retourner plusieurs valeurs. Pour se faire, j'ai utilisé une structure. Quand j'affiche mes valeurs de ma structure directement dans le composant, tout fonctionne très bien.

    Le problème est lorsque j'utilise mon composant dans un autre projet, je ne suis pas capable d'affecter la valeur de retour de mon composant à une structure que j'ai dans mon projet qui utilise le composant.

    J'ai pourtant créé une structure identique dans le projet qui utilise le composant.

    Voici le message d'erreur que j'obtiens
    On ne peut pas affecter à une structure autre chose qu'une structure de même définition.
    Merci d'avance pour votre aide et bonne journée
    --Samus535

  2. #2
    Membre expert
    Avatar de mail.spam
    Homme Profil pro
    Développeur Windev et technicien maintenance
    Inscrit en
    Janvier 2008
    Messages
    1 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Windev et technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 914
    Points : 3 803
    Points
    3 803
    Par défaut
    Bonjour,

    Peux tu nous mettre la définition de la structure de ton composant ainsi que le code utiliser pour renvoyer la structure.


    Puis peux tu nous mettre la structure utilisé dans ton projet ainsi que la façon dont l'affecte.

    Merci.
    la touche est ton amie. l'aide ne mord pas quand on la consulte...
    PS : n'oubliez jamais que nous ne sommes pas avec vous sur le projet. Donc plus vous donnez d'informations et d'exemples de codes et plus nous pourrons vous aider. (Un exemple vaut mieux que de longs discours...)

    Pensez à utiliser les votes et à cliquer sur , merci

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par mail.spam Voir le message
    Bonjour,

    1 - Peux tu nous mettre la définition de la structure de ton composant ainsi que le code utiliser pour renvoyer la structure.


    2 - Puis peux tu nous mettre la structure utilisé dans ton projet ainsi que la façon dont l'affecte.

    Merci.
    1 -
    Définition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ValRetourGetPrice est une structure
    	sCommCode est une chaîne
    	xCommRate est un numérique
    	sOrigin est une chaîne
    	xPrice est un numeric
    	nStatus est un entier
    	sMsg est une chaîne
    FIN
    Code pour retourner la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    stMesValeursDeRetour est un ValRetourGetPrice
    ...
    ...
    stMesValeursDeRetour = getNetPriceMc(param1, param2, param3, etc.)
    RENVOYER stMesValeursDeRetour

    2 - Définition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ValRetourGetPrice est une structure
    	sCommCode est une chaîne
    	xCommRate est un numérique
    	sOrigin est une chaîne
    	xPrice est un numeric
    	nStatus est un entier
    	sMsg est une chaîne
    FIN
    Affectation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    valRetour est un ValRetourGetPrice
    ...
    ...
    valRetour = Composant_Price.Get_Price(param1, param2, param3, etc.)

    S'il manque des informations n'hésite pas à les demander

    Merci et bonne journée
    --Samus535

  4. #4
    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
    Bonjour,

    Ce genre de problématique m'intéresse particulièrement.

    Citation Envoyé par samus535 Voir le message

    J'ai pourtant créé une structure identique dans le projet qui utilise le composant.


    Voici le message d'erreur que j'obtiens
    On ne peut pas affecter à une structure autre chose qu'une structure de même définition.
    Le message d'erreur est très clair: tu dois utiliser la même définition de structure et non pas une définition de structure identique.

    As-tu essayé dans le projet de déclarer la variable valRetour avec le type défini dans le composant ?

    En effet, les structures définies dans le composant peuvent être utilisées dans les projets qui utilisent le composant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    valRetour est un Composant_Price.ValRetourGetPrice
    ...
    ...
    valRetour = Composant_Price.Get_Price(param1, param2, param3, etc.)
    _

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    Bonjour,

    Ce genre de problématique m'intéresse particulièrement.



    Le message d'erreur est très clair: tu dois utiliser la même définition de structure et non pas une définition de structure identique.

    As-tu essayé dans le projet de déclarer la variable valRetour avec le type défini dans le composant ?

    En effet, les structures définies dans le composant peuvent être utilisées dans les projets qui utilisent le composant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    valRetour est un Composant_Price.ValRetourGetPrice
    ...
    ...
    valRetour = Composant_Price.Get_Price(param1, param2, param3, etc.)
    _
    Merci pour la réponse,
    le seul petit problème, c'est que je n'ai pas accès à ma structure dans le projet qui utilise le composant.

    Ma structure est définie dans l'initialisation du projet.

    Merci et bonne journée
    --Samus535

  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
    Citation Envoyé par samus535 Voir le message
    le seul petit problème, c'est que je n'ai pas accès à ma structure dans le projet qui utilise le composant.

    Ma structure est définie dans l'initialisation du projet.
    Et tu appelles ça un "petit" problème !

    En fait c'est "LE" problème !

    Il faut définir cette structure dans le "traitement de déclaration de globales" d'une collection de procédures, ou d'une classe de ton composant.

    Il semblerait logique de le faire dans la collection de procédures où tu as défini la procédure Get_Price().
    _

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    Et tu appelles ça un "petit" problème !

    En fait c'est "LE" problème !

    Il faut définir cette structure dans le "traitement de déclaration de globales" d'une collection de procédures, ou d'une classe de ton composant.

    Il semblerait logique de le faire dans la collection de procédures où tu as défini la procédure Get_Price().
    _
    J'ai changé de place la définition le ma structure pour la mettre dans les "Procédures globales de Composant_Price". J'ai ensuite recompilé mon composant. Ensuite si je vais dans le projet qui utilise le composant, quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    valRetour est un Composant_Price.<CTRL+Space>
    il me propose ValRetourGetPrice, mais lorsque je le choisi, j'ai le message d'erreur suivant:

    Le type ValRetourGetPrice est inconnu.
    Merci beaucoup et bonne journée
    --Samus535

  8. #8
    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 Un contournement ???
    Je n'ai pas trop le temps de t'aider.
    Si tu es pressé, je te propose un contournement facile à mettre en œuvre.

    Au lieu d'une structure, crée une classe avec le même nom et les mêmes membres que la structure.
    Ainsi, il n'y aura plus de problème de type inconnu.
    _

  9. #9
    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 Autre piste: utiliser la sérialisation ?
    Apparemment, une définition de type Structure n'est pas utilisable via les composants.
    C'est dommage , et je ne vois aucune raison technique qui justifie cette limitation.

    Alors voici les alternatives:

    * soit tu passes par une classe, et là il n'y aura pas de problème,

    * soit tu continues comme au début de la discussion avec des structures strictement identiques mais, tu passes par la sérialisation/désérialisation de la structure dans une chaine de caractères, ce qui devrait "mystifier" WinDev,

    * soit tu passes à WD15 dont le type Variant accepte des variables de type tableau, classe, structure.
    Et dans ton code du projet, tu récupères dans une variable de type Variant la structure renvoyée par la procédure Composant_Price.Get_Price().

    Personnellement, je préfèrerai passer par une classe.
    _

  10. #10
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    Citation Envoyé par =JBO= Voir le message
    Apparemment, une définition de type Structure n'est pas utilisable via les composants.
    C'est dommage , et je ne vois aucune raison technique qui justifie cette limitation.

    Alors voici les alternatives:

    * soit tu passes par une classe, et là il n'y aura pas de problème,

    * soit tu continues comme au début de la discussion avec des structures strictement identiques mais, tu passes par la sérialisation/désérialisation de la structure dans une chaine de caractères, ce qui devrait "mystifier" WinDev,

    * soit tu passes à WD15 dont le type Variant accepte des variables de type tableau, classe, structure.
    Et dans ton code du projet, tu récupères dans une variable de type Variant la structure renvoyée par la procédure Composant_Price.Get_Price().

    Personnellement, je préfèrerai passer par une classe.
    _
    Merci pour la réponse,
    Nous allons utiliser une classe. Le seul autre "petit" problème, c'est que j'ai fait une classe avec le même nom et les mêmes membres. J'ai enlevé ma structure pour ne pas qu'il y aie de conflits. J'ai recompilé mon composant.

    J'ai ouvert mon projet qui utilise le composant et quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Composant_Price. <CTRL+Space>
    il ne me propose pas ma classe.

    Je suis vraiment désolé de poser toutes ces questions, mais c'est la première fois que nous utilisons du code provenant de l'extérieur de notre projet principale.

    Merci et bonne journée
    --Samus535

  11. #11
    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
    Citation Envoyé par samus535 Voir le message
    J'ai recompilé mon composant.

    J'ai ouvert mon projet qui utilise le composant et quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Composant_Price. <CTRL+Space>
    il ne me propose pas ma classe.

    Je suis vraiment désolé de poser toutes ces questions, mais c'est la première fois que nous utilisons du code provenant de l'extérieur de notre projet principale.
    C'est une première pour toi et ceci explique ton oubli !

    En effet, lorsque tu génères ton composant, tu dois:
    (1) cocher tous les éléments qui seront intégrés dans le composant,
    (2) cocher les éléments intégrés qui seront accessibles par les projets qui utiliseront le composant.

    Et je suppose que tu as oublié de cocher ta nouvelle classe ValRetourGetPrice.
    _

  12. #12
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    Finalement tout fonctionne très bien en utilisant une classe. C'est moi qui avait oublié un petit détail, ce qui faisait que je ne voyais pas ma classe dans mon projet.

    Merci et bonne journée
    --Samus535

  13. #13
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juin 2004
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 220
    Points : 70
    Points
    70
    Par défaut
    Bonjour à tous,
    j'ai refait quelques tests et ça ne fonctionne toujours pas.



    Lorsque j'appèle ma procédure de mon composant, j'essaye d'obtenir certaines informations de ma procédure. Je veux les stocker dans un classe, de la façon suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    test est un Composant_Price.ValRetourGetPrice
    test = Composant_Price.Get_Price("S","",0,"QC0063",1,"","00210","DR","2006-01-01","CD","",0,"B","",0,0,"")
    Trace(test:xPrice)
    Le petit problème est que j'ai le message d'erreur suivant :

    Erreur à la ligne 2 du traitement Clic sur BTN_GetPrice.
    On ne peut pas affecter à un objet autre chose qu'un objet de la même classe.
    Merci d'avance et bonne journée
    --Samus 535

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

Discussions similaires

  1. comment comparer les valeurs retournés par DBGrid
    Par Ice-tea dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/06/2006, 14h42
  2. Réponses: 1
    Dernier message: 22/05/2006, 11h27
  3. [SQL] Valeur retournée par une requête...
    Par Empty_body dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/01/2006, 22h13
  4. VB6 --> Valeurs retournées par une comboBox
    Par the java lover dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 13/12/2005, 16h26
  5. valeur retournée par un .js
    Par astrofiles dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 09/08/2005, 10h20

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