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 :

Interrupteur variable et lien avec base de données [WD22]


Sujet :

WinDev

  1. #1
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 3 858
    Points : 7 581
    Points
    7 581
    Par défaut Interrupteur variable et lien avec base de données
    Bonjour,

    J'avoue que le titre n'est pas clair, mais ça vient du fait que c'est pas simple !

    Alors voilà, je vous explique mon problème. Peut-être n'est-ce pas faisable...

    J'ai une table qui contient des Articles.

    J'ai une table qui contient des Familles de tarification

    Un article peut avoir plusieurs familles de tarification.

    J'ai donc une table qui fait le lien entre les articles et les familles de tarification ( 2 champs : id_article, id_famtarif). J'ai dans cette table, pour chaque article autant d'enregistrements que l'article possède des familles de tarification.

    Dans ma fiche article, j'aimerais présenter les familles de tarifications dont l'article fait partie sous forme d'interrupteur.
    L'idée était de constituer les options de l'interrupteur à la volée, lors de l'init du champ, par exemple, avec les éléments de la table Famille de Tarification.
    Puis, lors du remplissage de la table, cocher uniquement les options en fonction des enregistrements trouvés dans la table de lien.

    Je pense que constituer la liste des options avec le contenu de la table des familles de tarification ne doit pas poser de problème (enfin je ne sais pas si on peut ajouter des options par programmation ! )
    Mais, les options contiennent du texte, alors que ma table de lien ne contient que des entiers (identifiants). Donc, quand je vais lire ma table de lien, comment je vais savoir quelle option je dois cocher ?

    Merci pour vos idées

    A+
    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  2. #2
    Membre expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 098
    Points : 3 662
    Points
    3 662
    Par défaut
    Bonjour,
    A priori, ton analyse ressemble à ça:
    Nom : screenshot_01_08-03-2018.png
Affichages : 283
Taille : 8,7 Ko
    Une requête simple (REQ_FammilleDUnArticle):
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    SELECT 
    	Article.Pk_Article AS Pk_Article,	
    	Tarification.PK_Tarification AS PK_Tarification,	
    	Tarification.NDX_NomTarification AS NDX_NomTarification
    FROM 
    	Tarification,	
    	Article_Tarification,	
    	Article
    WHERE 
    	Article.Pk_Article = Article_Tarification.FK_Article
    	AND		Tarification.PK_Tarification = Article_Tarification.FK_Tarification
    	AND
    	(
    		Article.Pk_Article = {ParamIDArticle}
    	)
    Te permet de visualiser la tarification "en clair"

    Note: Tu peux insérer ce code dans l'éditeur de requêtes via l'option "Code SQL"
    Nom : screenshot_02_08-03-2018.png
Affichages : 326
Taille : 28,4 Ko

    Une fois cela fait, il ne te reste plus qu'à créer ton champ table à partir de la requête nouvellement crée, en ajoutant dans le code d'initialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaSource.ParamIDArticle = Article.Pk_Article
    Il y a peut être plus simple, mais ça tourne

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    janvier 2003
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 156
    Points : 238
    Points
    238
    Par défaut
    bonjour,

    si vous voulez avoir toutes les familles présentes et avoir une case coché uniquement en face de celle de l'article je ferais comme ceci (en reprenant les nom du message de Voroltinquo) :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    select
      T.NDX_NomTarification,
      (case when AT.FK_Tarification is null then 0 else 1 end) as selected
    from
      tarification T
      left join article_tarification  AT on T.PK_Tarification = AT.FK_Tarification
    where
      AT.FK_Article = 'MonCodeArticle' ou MonCodeArticle (si chaine ou numérique)

    A adapté et ou corrigé selon la base de données
    Cordialement JeAn-PhI

  4. #4
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 3 858
    Points : 7 581
    Points
    7 581
    Par défaut
    Bonjour,

    Et merci de vous être penchés sur mon problème.

    Je m'aperçois, à la lecture de vos réponses, que j'ai du mal exprimer mon besoin.

    En fait, pour les requêtes, je pense pouvoir m'en sortir.
    Là où je bloque, c''est sur l'affection des résultats de requête dans les champs.

    Ce qu'à montré Voroltinquo est juste pour l'analyse.

    Ce que j'aimerais obtenir c'est un truc du genre
    Nom : Exemple_dvp.PNG
Affichages : 309
Taille : 7,2 Ko
    Avec, la liste des options de l'interrupteur découlant d'une requête et la sélection des options cochées issues d'une autre requête.

    En espérant avoir été plus clair

    Merci d'avance pour vos idées

    A+
    JS

    Edit : Précision importante, le but est aussi de pouvoir modifier les options cochées et enregistrer les résultats dans la table de liens Articles-Familes_tarification.
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  5. #5
    Membre expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 098
    Points : 3 662
    Points
    3 662
    Par défaut
    J'ai au moins compris une chose, ça me rassure

    Un champ table comme ceci
    Nom : screenshot_01_09-03-2018.png
Affichages : 302
Taille : 2,2 Ko
    Te conviendrait-il ?
    Il y a peut être plus simple, mais ça tourne

  6. #6
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 3 858
    Points : 7 581
    Points
    7 581
    Par défaut
    En fait... non !

    Pour le remplissage à la volée, j'ai réussi. J'obtiens bien mon interrupteur avec toutes les options.
    Le problème viendra si on ajoute trop de familles de tarification, mais normalement, ça ne devrait pas trop évoluer. J'ai réussi à jouer avec les ..hauteurs et ..largeur pour que ça passe.

    Par contre, c'est le lien entre la table de lien et l'interrupteur (dans les 2 sens) qui me pose problème. En effet, on accède aux options par leur indice, qui ne correspond pas forcément (et dans le cas présent, pas du tout) à l'identifiant Famille de tarification. Donc, je ne sais pas faire le lien entre l'identifiant Famille et le n° de l'option.
    A part passé par une grosse bidouille, genre zone mémoire ou tableau dynamique à 2 dimensions...
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  7. #7
    Membre expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    juin 2017
    Messages
    2 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : juin 2017
    Messages : 2 098
    Points : 3 662
    Points
    3 662
    Par défaut
    Comme tu disais, il faut passer par une grosse bidouille: mettre nos interrupteur, (notre en l’occurrence) dans une ZR (zone répétée.)

    Avant tout, créons notre requête de "travail" (REQ_RelationDUnArticle)
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
    	Article_Tarification.FK_Article AS FK_Article,	
    	Article_Tarification.FK_Tarification AS FK_Tarification
    FROM 
    	Article_Tarification
    WHERE 
    	Article_Tarification.FK_Article = {ParamPK_Article}

    Notre ZR (ZR_Tarification) maintenant
    Nous allons la créer à partir de la table Tarification en sélectionnant la PK et le Clair(NDX_NomTarification). Ces 2 champs vont passer en Visible=Faux, ils vont juste servir à afficher le libellé dan l'interrupteur (NDX_NomTarification) et à retrouver (ou pas, cas de l'article qui n'es pas concerné par la tarification) l'enregistrement idoine dans la table de relation (PK_Tarification.)
    Nous pouvons maintenant ajouter notre interrupteur (1 seule option)
    Code de la ZR
    Initialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    HExécuteRequête(REQ_RelationDUnArticle)
    Fin d'initialisation (On traite l'état initial de nos interrupteurs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    nIndiceZR est un entier
     
    POUR nIndiceZR = 1 _A_ ZR_Tarification..Occurrence
    	//Ne me demande pas pourquoi il y a un TAB à la fin, sans ça plante
    	//Le TAB sert en théorie à séparer 2 options
    	ZR_Tarification[nIndiceZR].INT_SansNom1..Libellé=gStylo(Noir)+ZR_Tarification[nIndiceZR].NDX_NomTarification+TAB
    	//Je n'ai pris en compte que la recherche nominale (l'enregistrement existe ou pas)
    	//Pour les autres cas où HLitrecherche peut être à Faux, je te laisse faire
    	ZR_Tarification[nIndiceZR].INT_SansNom1=HLitRecherche(REQ_RelationDUnArticle,FK_Tarification,ZR_Tarification[nIndiceZR].PK_Tarification)
    FIN
    Le plus difficile est fait, pour l'interfaçage, il ne reste plus qu'à utiliser l'onglet style.

    Suppression/Ajout de liaison via l'interrupteur
    A chaque modification :
    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
     
    bufValRech est un Buffer //Nécessaire pour faire une recherche sur une clé composée
     
    //C'est la valeur actuelle qui est prise en compte, i.e. celle après le clic sur l'interrupteur
     
    SI MoiMême=Faux ALORS //Il y a un enregistrement dans le fichier de relation on va le supprimer
    	bufValRech=HConstruitValClé(Article_Tarification,FK_Article_FK_Tarification,Article.Pk_Article,PK_Tarification)
     
    	HLitRecherche(Article_Tarification,FK_Article_FK_Tarification,bufValRech)
    	HSupprime(Article_Tarification)
    SINON //On ajoute la relation
    	Article_Tarification.FK_Article=Article.Pk_Article
    	Article_Tarification.FK_Tarification=Tarification.PK_Tarification
    	HAjoute(Article_Tarification)
    FIN
     
    //On actualise notre requête de travail
    HExécuteRequête(REQ_RelationDUnArticle)
    Il y a peut être plus simple, mais ça tourne

  8. #8
    Membre extrêmement actif Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2011
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : avril 2011
    Messages : 3 858
    Points : 7 581
    Points
    7 581
    Par défaut
    Merci Voroltinquo ,

    Effectivement, grosse bidouille.
    Mais, comme tu le dis, il y a peut-être plus simple, mais ça marche. Et effectivement, ça marche.

    Encore merci à toi.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/05/2015, 20h14
  2. Cartographie dynamique en lien avec base de données
    Par Marc31 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/04/2015, 11h03
  3. [XL-2010] Lien avec base de données SQLite
    Par athomas dans le forum Excel
    Réponses: 0
    Dernier message: 22/01/2014, 22h27
  4. Lien avec base de données
    Par pascb423 dans le forum Langage
    Réponses: 8
    Dernier message: 16/12/2008, 09h51
  5. Probleme avec base de données et variable !
    Par Sunseeker69 dans le forum Bases de données
    Réponses: 4
    Dernier message: 27/04/2006, 17h39

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