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 :

Colonne de table Interrupteur : problème d'affichage quand coché


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut Colonne de table Interrupteur : problème d'affichage quand coché
    Bonjour,

    J'ai un petit souci avec une colonne Interrupteur dans ma table.
    Cette table est une table fichier que j'obtiens à partir d'une requête.
    J'ai rajouté une colonne mémoire de type interrupteur que je veux initialiser par programmation à la fin de l'initialisation de la table. L'interrupteur doit se cocher lorsque l'IDOpération associé à la carte est différent de 6.

    Je procède comme ceci : (Code de Fin d'initialisation de TABLE_GestionCartes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    POUR TOUTE LIGNE DE TABLE_GestionCartes
    	HLitRecherche(Carte, identifiant, COL_IDCarte)
    	SI HLitRecherche(Suivi,IDCarte, Carte.IDCarte) ALORS
    		TANTQUE HTrouve(Suivi)
    			SI Suivi.IDOpération = 6 ALORS
    				HLitSuivant(Suivi, IDCarte)
    			SINON
    				COL_EtatCarte..Valeur = Vrai
    				SORTIR
    			FIN
    		FIN
    	FIN
    FIN
    Ce code fonctionne très bien excepté la ligne suivante qui doit cocher l'interrupteur dans la cellule correspondante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COL_EtatCarte..Valeur = Vrai
    En effet, bien que je sais grâce à des "Info(COL_EtatCarte..Valeur)", qui me renvoient la valeur "vrai", que le programme rentre bien dans le SINON et exécute le code qui s'y trouve, impossible de cocher les interrupteurs voulus... Alors que leur valeur est vraie !

    Quelqu'un saurait-il, s'il vous plaît, d'où peut provenir ce fâcheux problème ?

    Merci d'avance,

    Aenur.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Citation Envoyé par Aenur56 Voir le message
    Quelqu'un saurait-il, s'il vous plaît, d'où peut provenir ce fâcheux problème ?
    Pas moi
    Par contre j'ai une autre solution: pourquoi ne pas inclure la colonne en question dans la requête ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select colonne1,colonne2,(case when colonne2 = '6' then TRUE else FALSE end)
    from MaTable
    Where MaCondition = vrai

    Ainsi tu y gagnes en simplicité (plus de code pour afficher la requête) et en performance...

    Tatayo

    P.S. les puristes diraient qu'il faut utiliser DECODE en lieu et place de CASE WHEN dans la requête, mais je n'ai plus la syntaxe en tête

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Bonjour,

    Tout d'abord merci de ta réponse.

    Par contre je n'arrive pas à appliquer les modifications que tu proposes dans l'éditeur de requête... Et le problème, c'est que si je change le code de la requête, alors mon tableau n'y est plus lié et ne veut plus l'être...

    J'ai essayé d'ajouter la fonction dans l'éditeur de requêtes mais ça mon programme bug... Il m'affiche plusieurs fois des mêmes enregistrements.

    Quand je regarde le code ça a rajouté ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CASE WHEN Suivi.IDOpération = '6' THEN 'TRUE' ELSE 'FALSE' END AS EtatCarte
    La ligne est-elle bonne ?

    Ou y a-t-il une autre solution ?

    Merci d'avance,

    Aenur.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    A priori oui, sauf qu'il renvoie une chaine au lieu d'un booléen.
    Est-ce qu'on peut voir la requête complète ?

    Tatayo.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Finalement, j'ai réussi à afficher ce que je veux. Il fallait que je mette 1 ou 0 plutôt que TRUE ou FALSE.

    Je te met quand même le code de ma requête si tu veux mais attention elle fait peur

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    SELECT 
    	Carte.identifiant AS identifiant,	
    	Agent.matricule AS matricule,	
    	Agent.civilite AS civilite,	
    	Agent.nom AS nom,	
    	Agent.prénom AS prénom,	
    	Agent.dateNaissance AS dateNaissance,	
    	Agent.numTel AS numTel,	
    	Agent.Adresseemail AS Adresseemail,	
    	Agent.codeADELI AS codeADELI,	
    	Agent.codeRPPS AS codeRPPS,	
    	TypeCarte.libelle AS libelle,	
    	Grade.libelle AS libelle_Gr,	
    	Métier.libelle AS libelle_Mé,	
    	Pole.libelle AS libelle_Po,	
    	Service.libelle AS libelle_Se,	
    	Spécialité.libelle AS libelle_Sp,	
    	UF.libelle AS libelle_UF,	
    	Carte.codeFINESS AS codeFINESS,	
    	CASE WHEN Suivi.IDOpération = '6' THEN 0 ELSE 1 END AS EtatCarte
    FROM 
    	Spécialité RIGHT OUTER JOIN Agent ON Agent.IDSpécialité	=	Spécialité.IDSpécialité,	
    	Pole RIGHT OUTER JOIN Agent ON Agent.IDPole	=	Pole.IDPole,	
    	Service RIGHT OUTER JOIN Agent ON Agent.IDService	=	Service.IDService,	
    	Grade RIGHT OUTER JOIN Agent ON Agent.IDGrade	=	Grade.IDGrade,	
    	Métier RIGHT OUTER JOIN Agent ON Agent.IDMétier	=	Métier.IDMétier,	
    	UF RIGHT OUTER JOIN Agent ON Agent.IDUF	=	UF.IDUF,	
    	Agent INNER JOIN Affectation ON Affectation.IDAgent	=	Agent.IDAgent,	
    	Carte INNER JOIN Affectation ON Affectation.IDCarte	=	Carte.IDCarte,	
    	Carte INNER JOIN Suivi ON Suivi.IDCarte	=	Carte.IDCarte,	
    	Commande INNER JOIN Carte ON Carte.IDCommande	=	Commande.IDCommande,	
    	TypeCarte INNER JOIN Commande ON Commande.IDTypeCarte	=	TypeCarte.IDTypeCarte
    WHERE 
    	(
    	Commande.IDCommande = {Param1}
    )
    ORDER BY 
    	nom ASC,	
    	identifiant ASC
    Bon par contre j'ai toujours un petit problème quand je fait l'action qui coche l'interrupteur, en gros quand je passe le IDOpération de 6 à 5.
    Ca me duplique la ligne du tableau sur laquelle j'ai appliqué la modification...

    Après ça doit être un problème dans ma requête mais je sais pas trop d'où ça vient.

    Le code du clic sur le bouton est le suivant :

    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
    // Si la carte a déjà été reçue
    	SI COL_EtatCarte..Valeur = 1 ALORS
    		Info("Cette carte a déjà été signalée comme reçue.")
    	// Si la carte n'a pas encore été reçue
    	SINON
    		// On recherche l'identifiant de la carte sélectionnée
    		HLitRecherche(Carte,identifiant,COL_IDCarte)
    		Info("carte n°: " + Carte.IDCarte)
    		// On recherche le dernier enregistrement concernant cette carte
    		HLitRecherche(Suivi,IDCarte,Carte.IDCarte)
    		Suivi.dateOpération = DateSys
    		Suivi.IDOpération = 5
    		// On ajoute le suivi
    		HAjoute(Suivi)
    		Info("s.carte " + Suivi.IDCarte + " s.agent " + Suivi.IDAgent)
    		HDésactiveFiltre(Carte)
    		HDésactiveFiltre(Suivi)
    		COL_EtatCarte..Valeur = Vrai
     
    	FIN
    Maintenant va falloir trouver comment faire pour qu'il ne m'affiche plus les enregistrements plusieurs fois (il remet juste une ligne en plus qui correspond à la ligne qui a été cochée, mais décochée; ça me fait donc la même ligne une fois cochée et une fois décochée).

    Merci encore et si vous trouvez la solution à cet autre problème, merci de me le faire savoir !

    Aenur.

  6. #6
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Salut,

    Dans le code du SINON, tu fais un HAjoute(..) donc tu trouves forcément avec un enregistrement en plus... et avec l'ID de la carte correspondant au HLitRecherche(..)
    Si tu veux modifier la valeur d'un enregistrement, il te faut faire un HModifie(..), non ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    En effet, mais comme je l'ai précisé un peu au dessus, ma table Suivi est un historique et doit donc garder en mémoire toutes les actions effectuées.

    En conséquence, une carte ou un agent peut avoir plusieurs suivis associés suivant les changements d'états de la carte (commandée, reçue, perdue, volée, etc...), ce qui permettra de contrôler le cycle de vie de chaque carte.

    J'ai fait plusieurs essais de requêtes qui ont toujours abouti à mon problème des 2 lignes pour une même carte. J'ai cependant isolé mon problème de manière plus "compréhensible" (enfin je crois ).

    Je dois sélectionner les suivis de toutes les cartes qui ont été reçues (au moins un suivi avec IDOpération <> 6) sans le suivi où elles ont été commandées, ainsi que les suivis des cartes qui ont uniquement été commandées (un seul suivi avec IDOpération = 6).

    Je ne sais pas si j'ai réussi à être plus clair, mais c'est la façon dont je vois mon problème

    EDIT : je joins une image de l'analyse, vous comprendrez peut être mieux.


  8. #8
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Je pense qu'il faudrait passer par l'utilisation d'un GROUP BY pour utiliser un COUNT(Carte.identifiant) et un SUM(Suivi.IDOpération) ce qui devrait te donner :
    - toutes les cartes qui ont été reçues (au moins un suivi avec IDOpération <> 6) sans le suivi où elles ont été commandées ==> COUNT > 1
    - les suivis des cartes qui ont uniquement été commandées ==> COUNT = 1 ET SUM = 6

    ce qui pourrait donner en SQL :
    ... GROUP BY <les champs de la sélection>
    HAVING COUNT(Carte.identifiant) > 1 OU (COUNT(Carte.identifiant) ET SUM(Suivi.IDOpération) = 6)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    En effet j'avais aussi pensé au GROUP BY mais je n'ai pas réussi à trouver comment les faires avec l'éditeur de requêtes

    Comment peut-on faire les GROUP BY et les HAVING COUNT ?

    EDIT : J'ai essayé en créant une nouvelle requête tapée à la main, j'ai copié l'ancienne et j'ai rajouté ton idée mais il me met une erreur "mot AND inattendu" pour le AND de la ligne avec HAVING COUNT (je connais pas trop la synthaxe ).

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    SELECT 
    Carte.identifiant AS identifiant,	
    Agent.matricule AS matricule,	
    Agent.civilite AS civilite,	
    Agent.nom AS nom,	
    Agent.prénom AS prénom,	
    Agent.dateNaissance AS dateNaissance,	
    Agent.numTel AS numTel,	
    Agent.Adresseemail AS Adresseemail,	
    Agent.codeADELI AS codeADELI,	
    Agent.codeRPPS AS codeRPPS,	
    TypeCarte.libelle AS libelle,	
    Grade.libelle AS libelle_Gr,	
    Métier.libelle AS libelle_Mé,	
    Pole.libelle AS libelle_Po,	
    Service.libelle AS libelle_Se,	
    Spécialité.libelle AS libelle_Sp,	
    UF.libelle AS libelle_UF,	
    Carte.codeFINESS AS codeFINESS,	
    CASE WHEN Suivi.IDOpération = '6' THEN 0 ELSE 1 END AS EtatCarte
    FROM 
    Spécialité RIGHT OUTER JOIN Agent ON Agent.IDSpécialité	=	Spécialité.IDSpécialité,	
    Pole RIGHT OUTER JOIN Agent ON Agent.IDPole	=	Pole.IDPole,	
    Service RIGHT OUTER JOIN Agent ON Agent.IDService	=	Service.IDService,	
    Grade RIGHT OUTER JOIN Agent ON Agent.IDGrade	=	Grade.IDGrade,	
    Métier RIGHT OUTER JOIN Agent ON Agent.IDMétier	=	Métier.IDMétier,	
    UF RIGHT OUTER JOIN Agent ON Agent.IDUF	=	UF.IDUF,	
    Agent INNER JOIN Affectation ON Affectation.IDAgent	=	Agent.IDAgent,	
    Carte INNER JOIN Affectation ON Affectation.IDCarte	=	Carte.IDCarte,	
    Carte LEFT OUTER JOIN Suivi ON Suivi.IDCarte	=	Carte.IDCarte,	
    Commande INNER JOIN Carte ON Carte.IDCommande	=	Commande.IDCommande,	
    TypeCarte INNER JOIN Commande ON Commande.IDTypeCarte	=	TypeCarte.IDTypeCarte
     
    GROUP BY Agent.IDAgent, Carte.IDCarte
    HAVING COUNT(Carte.identifiant) > 1 OR (COUNT(Carte.identifiant)) AND SUM(Suivi.IDOpération) = 6)
    WHERE 
    (
    Commande.IDCommande = {Param1}
    )
    ORDER BY 
    nom ASC,	
    identifiant ASC

  10. #10
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    ouah la question piège, j'utilise l'assistant uniquement pour faire vite un petit SELECT mais j'ai trouvé ^^

    Tu as des boutons Somme et Compter sur la droite de l'assistant.
    Ensuite tu le bouton Condition de sélection qui te permet de peufiner le critère de sélection avec les ET, les OU.

  11. #11
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Citation Envoyé par Aenur56 Voir le message
    ...HAVING COUNT(Carte.identifiant) > 1 OR (COUNT(Carte.identifiant) = 1 AND SUM(Suivi.IDOpération) = 6)
    Il te manque ça et je ne l'avais pas mis dans mon post et une parenthèse en trop à mon avis.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Arf ça ne marche pas... ça m'affiche toujours dans mon tableau lié à la requête 2 fois la même ligne (enfin une cochée et l'autre non) quand la carte a été reçue...

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    SELECT 
    	COUNT(Carte.identifiant) AS Comptage_1,	
    	Agent.matricule AS matricule,	
    	Agent.civilite AS civilite,	
    	Agent.nom AS nom,	
    	Agent.prénom AS prénom,	
    	Agent.dateNaissance AS dateNaissance,	
    	Agent.numTel AS numTel,	
    	Agent.Adresseemail AS Adresseemail,	
    	Agent.codeADELI AS codeADELI,	
    	Agent.codeRPPS AS codeRPPS,	
    	TypeCarte.libelle AS libelle,	
    	Grade.libelle AS libelle_Gr,	
    	Métier.libelle AS libelle_Mé,	
    	Pole.libelle AS libelle_Po,	
    	Service.libelle AS libelle_Se,	
    	Spécialité.libelle AS libelle_Sp,	
    	UF.libelle AS libelle_UF,	
    	Carte.codeFINESS AS codeFINESS,	
    	CASE WHEN Suivi.IDOpération = '6' THEN 0 ELSE 1 END AS EtatCarte,	
    	SUM(Suivi.IDOpération) AS la_somme_IDOpération
    FROM 
    	Spécialité RIGHT OUTER JOIN Agent ON Agent.IDSpécialité	=	Spécialité.IDSpécialité,	
    	Pole RIGHT OUTER JOIN Agent ON Agent.IDPole	=	Pole.IDPole,	
    	Service RIGHT OUTER JOIN Agent ON Agent.IDService	=	Service.IDService,	
    	Grade RIGHT OUTER JOIN Agent ON Agent.IDGrade	=	Grade.IDGrade,	
    	Métier RIGHT OUTER JOIN Agent ON Agent.IDMétier	=	Métier.IDMétier,	
    	UF RIGHT OUTER JOIN Agent ON Agent.IDUF	=	UF.IDUF,	
    	Agent INNER JOIN Affectation ON Affectation.IDAgent	=	Agent.IDAgent,	
    	Carte INNER JOIN Affectation ON Affectation.IDCarte	=	Carte.IDCarte,	
    	Carte LEFT OUTER JOIN Suivi ON Suivi.IDCarte	=	Carte.IDCarte,	
    	Commande INNER JOIN Carte ON Carte.IDCommande	=	Commande.IDCommande,	
    	TypeCarte INNER JOIN Commande ON Commande.IDTypeCarte	=	TypeCarte.IDTypeCarte
    WHERE 
    	(
    	Commande.IDCommande = {Param1}
    )
    GROUP BY 
    	Agent.matricule,	
    	Agent.civilite,	
    	Agent.nom,	
    	Agent.prénom,	
    	Agent.dateNaissance,	
    	Agent.numTel,	
    	Agent.Adresseemail,	
    	Agent.codeADELI,	
    	Agent.codeRPPS,	
    	TypeCarte.libelle,	
    	Grade.libelle,	
    	Métier.libelle,	
    	Pole.libelle,	
    	Service.libelle,	
    	Spécialité.libelle,	
    	UF.libelle,	
    	Carte.codeFINESS,	
    	CASE WHEN Suivi.IDOpération = '6' THEN 0 ELSE 1 END
    HAVING 
    	COUNT(Carte.identifiant) > 1
    OR	
    (
    	SUM(Suivi.IDOpération) = 6
    	AND	COUNT(Carte.identifiant) = 1
    )
    ORDER BY 
    	nom ASC,	
    	Comptage_1 ASC
    Là je vois vraiment pas comment faire

  13. #13
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Ce ne serai pas le CASE qui empêcherait cela.

    Dans tes lignes en doublons, tu dois avoir une ligne à 1 et une ligne à 0.

    Si tu l'enlèves, ça devrait être bon.
    Par contre, il faudra trouver une autre méthode pour cocher l'interrupteur de ta table...

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Exact, ce qui me ramène à mon premier post du sujet : Je n'arrive pas à cocher les interrupteurs par programmation, la ligne ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    COL_EtatCarte..Valeur = Vrai
    Je ne savais pas d'où ça venait, c'est pourquoi j'ai essayé de le faire en requête, comme le proposait tatayo mais comme tu le sais, ça n'a pas mieux marché

  15. #15
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Si tu passes ta table en "Fichier chargé en mémoire", tes cases vont se cocher.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    A oui en effet elle se cochent maintenant

    Par contre quand je veux en cocher plusieurs, ça coche juste la dernière sélectionnée...

    Par exemple si j'ai 3 cartes dans la commande. Je sélectionne la première, je clique sur le bouton pour signaler la réception et elle se coche bien (tout en ajoutant le bon enregistrement dans mon fichier). Ensuite, si je sélectionne la deuxième et que je reclique sur le bouton, la ligne se coche bien mais la première se décoche...
    L'enregistrement est toujours ajouté mais pour voir les 2 interrupteurs cochés, je suis obligé de quitter l'application (enfin le test) et de le redémarrer.

    Vois-tu d'où vient le problème ? Pour rafraîchir mes tables, j'utilise l'option taInit ou taCourantEnreg et ça fait pareil.

  17. #17
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    Lorsque tu coches l'interrupteur, repasses-tu par le code de fin d'initialisation de ta table, là où se trouve le code cochant ou non les cartes ?

    Si non, tu pourrais mettre ce code dans une procédure est l'appeler à chaque fois... mais là ça commence à être lourd.

    As-tu besoin de faire une réinitialisation du contenu de la table à chaque modif ?

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 97
    Points : 52
    Points
    52
    Par défaut
    Heu je crois, avec le taInit... Voici mon code du clic sur le bouton

    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
    29
    // On recherche la carte sélectionnée
    HLitRecherche(Carte,identifiant,COL_IDCarte, hIdentique)
    // On filtre ses suivis
    HFiltre(Suivi, IDCarte, Carte.IDCarte, Carte.IDCarte)
    nbEnr est un entier = 0
    // On se positionne sur le premier
    HLitPremier(Suivi)
    // Tant qu'il y a des suivis, on incréments un compteur
    TANTQUE HTrouve(Suivi)
    	nbEnr++
    	HLitSuivant(Suivi)
    FIN
    // Si il y a plusieurs suivis, carte déjà reçue
    SI nbEnr > 1 ALORS
    	Info("Cette carte a déjà été signalée comme reçue.")
    // Sinon : ajouter suivi réception de la carte
    SINON
    	Suivi.dateOpération = DateSys
    	Suivi.IDOpération = 5
    	// On ajoute le suivi
    	HAjoute(Suivi)
    	COL_EtatCarte[TableSelect(TABLE_GestionCartes)]..Valeur = Vrai
    FIN
    HRAZ(Carte)
    HRAZ(Suivi)
     
    // On actualise les tables
    TableAffiche(TABLE_GestionCartes, taInit)
    TableAffiche(FEN_DetailCommande.TABLE_CartesCommande, taInit

    Si je commente les 2 TableAffiche(...), les 2 interrupteurs se cochent comme je le désire... à condition que je ne ferme pas la fenêtre car si je la rouvre ensuite, il n'y en a qu'un de coché.
    De plus, ma fenêtre précédente (on va l'appeler fenêtre 1) affiche aussi le même tableau. Et après avoir coché et fermé la fenêtre qui coche (fenêtre 2), la fenêtre 1, qui affichait avant les mêmes lignes cochées que la fenêtre 2, ne coche aucun interrupteur.

    J'espère avoir été assez clair (même si j'en doute )

  19. #19
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    2 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 329
    Points : 3 841
    Points
    3 841
    Par défaut
    En effet, le taInit repasse dans la fin d'initialisation de la table.
    Il faudrait passer par le mode Debug et faire du pas-à-pas pour comprendre pourquoi les cases ne restent pas cochés.

Discussions similaires

  1. Problème d'affichage quand j'ouvre plusieurs fichiers Office 2013
    Par damdam91 dans le forum Microsoft Office
    Réponses: 7
    Dernier message: 01/10/2015, 12h01
  2. Problème d'affichage quand champ NULL
    Par audrey1912 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/05/2011, 12h15
  3. Problème d'affichage quand champ NULL
    Par audrey1912 dans le forum ASP.NET
    Réponses: 1
    Dernier message: 19/05/2011, 08h31
  4. Réponses: 2
    Dernier message: 23/03/2009, 18h19
  5. Problème à l'affichage quand j'utilise SDL
    Par vincechaff10 dans le forum SDL
    Réponses: 8
    Dernier message: 25/07/2006, 11h34

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