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 :

Recherche dans un tableau intégré dans autre tableau [WD20]


Sujet :

WinDev

  1. #1
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut Recherche dans un tableau intégré dans autre tableau
    Bonjour,
    J'ai un tableau d'objet (ou structure) , dont chaque objet contient un tableau d'objet
    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Client est une classe
       IdClient est une chaine
       TableauCommande est un  tableau de Commande
    Fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Commande est une classe
       IdCommande est une chaine
    Fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       TableauClient est un tableau de Client
    Comment faire pour rechercher IdCommande dans le tableau TableauClient ?
    Je ne trouve pas la syntaxe de TableauCherche

  2. #2
    Membre éclairé
    Avatar de Narwe
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2013
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2013
    Messages : 257
    Points : 670
    Points
    670
    Par défaut
    Il faut faire une boucle sur TableauClient puis, pour chaque occurrence de ce tableau, faire une recherche sur le tableau Commande.

    Il n'est pas possible de faire directement une recherche dans un tableau de tableau.
    En effet, qu'elle indice serait renvoyé par la fonction ? Celui de TableauClient (mais dans ce cas quel est l'indice de TableauCommande) ou celui de TableauCommande (mais dans ce cas quel est l'indice de TableauClient).

  3. #3
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par Narwe Voir le message
    Il faut faire une boucle sur TableauClient puis, pour chaque occurrence de ce tableau, faire une recherche sur le tableau Commande.

    Il n'est pas possible de faire directement une recherche dans un tableau de tableau.
    En effet, qu'elle indice serait renvoyé par la fonction ? Celui de TableauClient (mais dans ce cas quel est l'indice de TableauCommande) ou celui de TableauCommande (mais dans ce cas quel est l'indice de TableauClient).
    Bonjour,
    Justement, mon but est que j'esquive le boucle sur TableauClient, afin que le temps de réponse soit optimisé.
    Peut être que TableauChercheParProcédure donnera une solution, mais je n'ai pas d'idée !

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 122
    Points : 9 547
    Points
    9 547
    Par défaut
    Je crains que la solution de Narwe ne soit la seule solution, avec cette organisation des données.

    J'aurais bien vu un seul tableau, pour toutes les commandes,
    en déplaçant le code client dans la structure commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    commande est une classe 
       idClient est une chaine 
       idCommande est une chaine
    fin
    tbcommande est un tableau de commande
    Mais j'imagine que ça ne t'arrange pas du tout !

  5. #5
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour,
    Non, ça m'arrange pas ... !

  6. #6
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour,

    J'ai essayé cette syntaxe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TableauCherche(TableauClient,asLinear,"TableauCommande.IdCommande","ExempleDeValeur")
    J'ai reçu l'erreur :

    Vous avez appelé la fonction TableauCherche.
    Propriété IdCommande' interdite.

  7. #7
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Bonjour,

    Vous pouvez tenter de passer par des tableaux associatifs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TableauClient[IDCLIENT]:TableauCommande[IDCOMMANDE]

  8. #8
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Bonjour
    euh... !
    Pas mal comme idée (+1) ! Il y a de forte chance que je l'utiliserai dans le futur!
    En tout cas dans le cas échéant il y a pas de solution que de parcourir le deuxième tableau intégré dans le premier.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je pensais dans ce genre là :
    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
    CommandesClient est un tableau associatif de chaines
    NumeroClient est une chaine="TOTO"
    NumeroCommande1 est une chaine="162525"
    NumeroCommande2 est une chaine="150123"
    CommandesClient[NumeroClient]="161245-162525-163132-163204"
     
    //Est-ce que mon client a déjà passé une commande?
    Si CommandesClient[NumeroClient]<>"" Alors
    	//Est-ce la commande 162525 est rattachée à mon client? la réponse est oui
    	Si Contient("-"+CommandesClient[NumeroClient]+"-", "-"+NumeroCommande1+"-") Alors
    		Info("Le client "NumeroClient+" a bien passé la commande "+NumeroCommande1)
    	Sinon
    		Info("La commande "+NumeroCommande1+" a été rattachée à un autre client")
    	Fin
     
    	//Est-ce la commande 150123 est rattachée à mon client? la réponse est non
    	Si Contient("-"+CommandesClient[NumeroClient]+"-", "-"+NumeroCommande2+"-") Alors
    		Info("Le client "NumeroClient+" a bien passé la commande "+NumeroCommande2)
    	Sinon
    		Info("La commande "+NumeroCommande2+" a été rattachée à un autre client")
    	Fin
    Fin
    Dernière modification par Invité ; 27/03/2017 à 17h55.

  10. #10
    Membre éprouvé Avatar de WDKyle
    Homme Profil pro
    Analyste-Programmeur
    Inscrit en
    Septembre 2008
    Messages
    1 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-Programmeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 200
    Points : 962
    Points
    962
    Par défaut
    Sinon avec des tableaux "classique" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    nIndClient est un entier
    nIndCommande est un entier
     
     
    nIndClient = TableauCherche(TableauClient, tcLinéairePremier, "IdClient", IDCLIENT)
    si nIndClient < 1 ALORS retour
     
    nIndCommande = TableauCherche(TableauClient[nIndClient]:TableauCommande, tcLinéairePremier, "IdCommande", IDCOMMANDE)
    si nIndCommande < 1 ALORS retour
     
    // votre traitement

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

Discussions similaires

  1. Bug dans une macro de copie de tableau Excel dans PPT
    Par sachadupuy dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/05/2014, 11h29
  2. Réponses: 0
    Dernier message: 05/04/2014, 15h08
  3. Réponses: 10
    Dernier message: 24/12/2013, 20h41
  4. Réponses: 2
    Dernier message: 04/07/2008, 14h24
  5. Réponses: 24
    Dernier message: 04/05/2007, 20h37

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