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 :

Alimenter un champ liste avec un fichier de données


Sujet :

WinDev

  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Alimenter un champ liste avec un fichier de données
    Bonjour,

    Plutôt qu'un long discours plus ou moins clair (déjà tenté dans un précédent post), voici graphiquement ce je souhaiterais faire :

    Nom : 2015-01-31_160848.png
Affichages : 330
Taille : 15,0 Ko

    A gauche, la solution classique, un champ table liés au fichier client. Solution qui ne me convient pas car la largeur des colonnes est conditionnées pas les long textes.
    A droite, ce que j'aimerais faire. Remplacer le champ table par un champ liste avec une seule colonne dans laquelle je ferais apparaitre une concaténation des infos souhaitées.

    Je ne trouve pas comment faire cela proprement sachant que :
    - Je dois pouvoir rafraichir la liste après ajout d'un client par exemple
    - Que j'aimerais pourvoir conditionner les infos affichées selon la largeur de la liste et sans avoir à rebalyer le fichier client sans sont intégralité (je pense qu'avec une variable de type tableau, on doit pouvoir y arriver mais je ne trouve pas)

    Merci de votre aide
    Les solutions les plus simples sont les plus efficaces

  2. #2
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 999
    Points : 2 525
    Points
    2 525
    Par défaut
    Franchement lolo, si c'est juste pour obtenir le résultat de droite
    je ne vois pas vraiment ou se situe la difficulté.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Ch est une chaine
    Ch=SansEspace(Civilité)+" "+SansEspace(Nom)+" "+SansEspace(prénom)+" ("+SansEspace(Ville)+")"
    Donc un tableau en variable globale alimenté à chaque ajout.
    Problème en cas de modif ! comment repérer le client dans le tableau ?
    En ajoutant la clé unique dans le tableau.

    Mais si tu as 15000 Clients et qu'en plus ton appli est multipostes
    je pense que ça va être un peu lourd.

    Pour moi, il est préférable d'utiliser la table.
    La liste c'est pour les petites listes (moins de 50 éléments)

    J'ose espérer pour toi n'avoir pas tout compris...

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Je ne vois pas la nécessité d'ouvrir une nouvelle discussion sur ce sujet, que du contraire.
    Il serait plus simple pour tous de savoir ce qui a déjà été dit et tenté dans votre discussion précédente .
    Je pense qu'on avait bien compris votre souhait et tout, en substance, avait déjà été dit au fil des diverses interventions, qu'il suffit de relire et consolider.

    Je vous propose donc de clôturer cette discussion-ci et de reporter votre post introductif dans la discussion initiale.

    Je vous renvoie également à ma dernière réponse que vous avez peut-être manquée.
    Pour le reste, cela va être la cuisine habituelle et un peu fastidieuse. Il n'y a pas d'instruction miracle.

    Donc utiliser des clés sur votre fichier, calculer pour chaque ligne des longueurs nettes en fonction des diverses chaînes insérées dans chaque colonne, pour in fine calculer la largeur maximale de l'affichage (càd celle de la ligne dont la somme des caractères est la plus importante, quelle que soit le nombre de caractères de chaque colonne en particulier) en fonction des colonnes retenues pour décider des informations qui seront retenues et terminer par une concaténation ou un ChaîneConstruit().

    Hemgé.

  4. #4
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    je ne vois pas pourquoi lololebricoleur tu n'utilises pas une requête avec une rubrique calculée (comme suggéré par hpascal et Hemgé dans la précédente discussion) qui concatène les chaînes des rubriques utiles . Exemple :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT 
    	CLIENT.Civilité + ' ' + CLIENT.Prénom + ' ' + CLIENT.Nom + ' (' + CLIENT.Ville + ')' AS Formule1
    FROM 
    	CLIENT

    et voilà ce que cela donne (la table du bas est basée sur la requête avec comme unique colonne la rubrique calculée) :

    Nom : ListeNoms.png
Affichages : 263
Taille : 59,4 Ko

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  5. #5
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Merci de votre aide (ou presque)
    Commençons par remettre quelques pendules à l'heure,

    Serendib,
    Je n'ai pas besoin d'aide pour faire une bête liste comme celle que tu me propose, heureusement pour moi.
    Si tu relis bien ma demande, tu verras que je fixe des contraintes et c'est là que les choses ce compliquent.
    Je note que tu me conseilles de n'utiliser les listes que pour des petites quantités de données, je vais étudier cela.
    Je te confirme, tu n'as pas tout compris. J'ose espérer pour toi que cela ne t'arrive pas trop souvent...

    Hemgé,
    J'ai fais le choix d'ouvrir une nouvelle discussion parce que :
    - Mon premier post n'était pas clair au dire des participants (vous notamment)
    - Je n'aime pas les post à rallonge, on finit par s'écarter du sujet et ne plus s'y retrouver selon moi (je pense être libre de cela non ?)
    - J'ai bien vu votre dernier post sur la première discussion et c'est même à cause de lui que j'ai décroché. Comment dire sans vous vexer... je n'y comprend rien mis à part le fait que je devrait, selon vous, prendre au moins la peine de lire les doc PC Soft avant de déranger le forum (en tout cas, dsl, c'est comme cela que le reçoit). Permettait moi de vous dire que je vous trouve très critique et très peu indulgent avec ceux qui ne sont pas à votre "niveau". Vous auriez même tendance à juger à l'emporte pièce selon moi et c'est bien dommage car cela n'apporte pas grand chose au débat.

    Maintenant et au delà de cela...
    Merci jurassic, je vais explorer la piste de la requête. Et merci pour la sobriété et la neutralité de ta réponse. Il me semble que certain seraient bien inspiré de s'en inspirer...

    Merci à tous, je vais continuer de fouiner.
    Les solutions les plus simples sont les plus efficaces

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Dis moi Jurassic
    Cela te surprendra probablement mais je n'utilise que rarement les requêtes SQL.

    Est-il possible d'alimenter un champ table avec une requête SQL passée en programmation ?
    Si oui, tu pourrais me donner le code que tu utilises pour alimenter la table Client avec la requête SQL que tu me propose stp ?
    Merci ;-)
    Les solutions les plus simples sont les plus efficaces

  7. #7
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    je suis passé par l'Editeur de requête :

    1 - Nouveau/Requête
    2 - Création d'une nouvelle requête/ type de requête Sélection (Select)
    3 - Editeur de Requête - changer le nom de la requête : ex: REQ_Concat
    4 - Cliquer sur le bouton Rubrique calculée, choisir Nouvelle rubrique calculée
    5 - Description d'une rubrique calculée/ dans code SQL de expression , mettre son code sql : ex : CLIENT.Civilité + ' ' + CLIENT.Prénom + ' ' + CLIENT.Nom + ' (' + CLIENT.Ville + ')'
    6 - Changer le nom de la rubrique calculée si besoin ( par défaut c'est formule1)
    7 - Valider
    8 - Enregistrer la requête
    9 - Tu peux faire tester la requête pour voir si elle fonctionne.
    Et voilà maintenant ta requête est visible. Tu peux l'utiliser dans une table par Contenu/ Remplissage Fichier/Requête Source Fichier parcouru : ta requête ex: REQ_Concat

    Avec une table mémoire tu peux utiliser un code du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ReqClient est une Source de Données
    // Initialisation de la requête "Client"
    HExécuteRequêteSQL(ReqClient,"Select  CLIENT.Civilité + ' ' + CLIENT.Prénom + ' ' + CLIENT.Nom + ' (' + CLIENT.Ville + ')'  as Formule1 From Client")
    FichierVersTableMémoire(TABREQ, ReqClient) // TABREQ est la table mémoire
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  8. #8
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Merci jurassic
    Cool, j’apprends des truc là.
    Et si je veux que ma liste renvoie l'ID du client, il faut que j'ajoute la donnée dans la requête et que j'ai une colonne dédiée et invisible dans la table ?
    Comment faire cela stp ?

    Question générale :
    - Comment Windev étable le lien entre la ou les colonnes de la table et la ou les valeurs de la requête ?
    - Il procède par défaut, juste dans l'ordre des colonnes et des valeurs ?

    Merci de ton aide Jusrassic, super cool
    Les solutions les plus simples sont les plus efficaces

  9. #9
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 953
    Points : 9 283
    Points
    9 283
    Par défaut
    hello,
    oui tu rajoutes une colonne dans ta table mémoire (à rendre invisible ou non) et pour la requête un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HExécuteRequêteSQL(ReqClient,"Select  CLIENT.Civilité + ' ' + CLIENT.Prénom + ' ' +  CLIENT.Nom + ' (' + CLIENT.Ville + ')'  as Formule1,Client.NumClient From Client")
    ou alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HExécuteRequêteSQL(ReqClient,"Select  Client.NumClient,CLIENT.Civilité + ' ' + CLIENT.Prénom + ' ' +  CLIENT.Nom + ' (' + CLIENT.Ville + ')'  as Formule1 From Client")
    si tu veux le NumClient en première colonne de la table.

    Pour avoir la table ordonnée par le nom des clients tu rajoutes une colonne invisible et un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HExécuteRequêteSQL(ReqClient,"Select  CLIENT.Civilité + ' ' + CLIENT.Prénom + ' ' +  CLIENT.Nom + ' (' + CLIENT.Ville + ')'  as Formule1,Client.NumClient,Client.Nom  From Client ORDER BY Client.Nom")
    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

  10. #10
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 359
    Points : 508
    Points
    508
    Par défaut Merci jurassic
    Merci de ton aide jurassic.
    Grâce à toi, je vais pouvoir faire plaisir à Hemgé et clôturer ce post. ;-)
    Les solutions les plus simples sont les plus efficaces

Discussions similaires

  1. Réponses: 16
    Dernier message: 29/07/2010, 14h29
  2. [AC-2010] [FORMULAIRE] Alimenter un "Formulaire Liste" avec "RechDom"
    Par peper-eliot dans le forum IHM
    Réponses: 4
    Dernier message: 22/03/2010, 16h26
  3. [AC-2002] Alimenter zone de liste avec le résultat d'une requête
    Par faraudch dans le forum IHM
    Réponses: 10
    Dernier message: 12/03/2010, 20h41
  4. [MySQL] champs listes avec autorisation d'effectuer des saisies
    Par eddycool dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 30/04/2009, 15h50
  5. Champ List avec DevC++
    Par SebRs dans le forum Dev-C++
    Réponses: 1
    Dernier message: 18/04/2006, 14h57

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