|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Combo en cascade avec mise à jour bdd |
Débuté par Juju, 19 jan. 2018 09:12 - 5 réponses |
| |
| | | |
|
| |
Membre enregistré 87 messages Popularité : +4 (4 votes) |
|
Posté le 19 janvier 2018 - 09:12 |
Bonjour,
J'ai une table principale TABLE1 qui contient ma catégorie et ma sousCatégorie. J'ai une table paramètre à côté de mes catégories.
T_PRINCIPAL Id Categorie SousCategorie ...
T_CATEGORIE Categorie CorrespondanceCateg SousCategorie CorrespondanceSsCateg.
Exemple de contenu de t_CATEGORIE Categorie : PC / PC... Correspondance : Desktop / Laptop... SousCategorie : Micro / ePc... Correspondance : MicroDesktop / ePc...
Dans mon programme j'ai ma combo1 qui est liée (onglet Liaison) à mon champ T_PRINCIPAL.Categorie. Et son contenu (onglet Contenu) parcours ma requête qui sélectionne toutes les valeurs de T_CATEGORIE en faisant un distinct dessus. La rubrique affichée est Categorie et la rubrique mémorisée est la CorrespondanceCateg.
Jusque là tout va bien.
Donc si je sélectionne PC en bdd dans T_PRINCIPAL.Categorie j'ai Desktop qui s'enregistre.
Je veux que lorsque je sélectionne ma valeur dans la Combo1, les valeurs possibles s'affichent dans la combo 2. Donc si je sélectionne PC, j'ai Micro et ePc qui s'affichent. Mais également si en base de données j'ai une valeur de renseignée pour la fiche que j'ouvre que les combo se remplissent tout seul avec les valeurs bdd.
Mon combo est donc lié (onglet Liaison) à T_PRINCIPALE.SousCategorie et je le rempli par programmation mais c'est là que cela ne fonctionne pas, voici ce que je fais :
HExécuteRequête(REQ_SsCategorie,hRequêteDéfaut,T_PRINCIPALE..AN_CATEGORIE) ListeSupprimeTout(FEN_Fiche.COMBO_ssCateg) POUR TOUT REQ_SsCategorie ListeAjoute(FEN_Fiche.COMBO_ssCateg,gLien(T_CATEGORIE.CA_CorrespondanceSsCateg)+ T_CATEGORIE.CA_SousCategorie) FIN
C'est ma procédure que j'appelle à l'initialisation de la Fiche et lorsque il y a une modification dans le Combo1.
ça ne fonctionne pas ma combo2 reste vide...
J'espère que je suis assez claire ... merci d'avance |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 948 messages Popularité : +30 (92 votes) |
|
Posté le 19 janvier 2018 - 17:13 |
Coucou,
Tu ne pas utiliser ..Filtre ?
La propriété ..Filtre permet de connaître et de modifier le filtre utilisé pour l'affichage des enregistrements dans : les champs Combo fichier, http://doc.pcsoft.fr/?2510042
COMBO_Elément..Filtre = COMBO_Elément
-- In üs we trust - Autopsie Volume 1 disponible le 01-23 au dépôt de ton armurier. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 572 messages Popularité : +222 (260 votes) |
|
Posté le 20 janvier 2018 - 05:18 |
Bonjour,
Ton explication est vraiment très peu claire et à la lecture de ton code, je crois comprendre que tu ne sais pas vraiment ce que tu fais. Je t'engage vivement à suivre l'auto-formation qui te donnera des bases.
Juste pour exemple, tu exécutes une requête, tu parcours son résultat, et tu ajoutes des données provenant d'un fichier de donnée au lieu d'ajouter l'enregistrement que tu viens,de lire. Tu mélanges tout et honnêtement, je ne pense pas que tu puisses y arriver comme ça.
Si j'ai bien compris, ta combo2 doit afficher les enregistrements de la requête "REQ_SsCategorie" et se positionner sur le bon enregistrement s'il existe.
Comme pour la combo1, dans l'onglet contenu tu mets: Fichier Parcouru = REQ_SsCategorie Rubrique affichée = REQ_SsCategorie.SousCategorie Rubrique mémorisée = REQ_SsCategorie.SousCategorie
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 87 messages Popularité : +4 (4 votes) |
|
Posté le 22 janvier 2018 - 08:57 |
Non tu m'as mal comprise.
SI HLitRecherchePremier(T_ANNONCE,AN_NUM_LP,gnNumLP) ALORS SI T_ANNONCE.AN_CATEGORIE <> "" ALORS HExécuteRequête(REQ_SsCategorie,hRequêteDéfaut,T_ANNONCE.AN_CATEGORIE) ListeSupprimeTout(FEN_FicheVehicule.COMBO_ssCateg) POUR TOUT REQ_SsCategorie ListeAjoute(FEN_FicheVehicule.COMBO_ssCateg,gLien(T_CATEGORIE.CA_SS_TYPE_V_MOBILE)+ T_CATEGORIE.CA_SS_TYPE_VEHICULE) FIN FIN FichierVersEcran(FEN_FicheVehicule,T_ANNONCE) FIN
D'abord je vérifie en base de données si j'ai un enregistrement ou non pour le véhicule demandé. Si j'ai une catégorie de renseignée pour mon véhicule j'exécute ma requête et j'ajoute les champs correspondants dans mon combo2.
Par contre si je n'ai rien en base de données (la fiche véhicule n'a pas encore été renseignée) mon combo est vide il ne se remplira avec les sous catégories de véhicule que lorsque l'utilisateur aura sélectionné la catégorie principale (moto, voiture) dans le combo1.
C'est pour cela que je n'ai pas fait de contenu sur ma combo2 j'ai juste fait la liaison car si ma fiche est renseignée j'utilise une requête et sinon j'utilise les valeurs de ma table...
Est ce que je suis plus claire ? |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 2 572 messages Popularité : +222 (260 votes) |
|
Posté le 22 janvier 2018 - 11:01 |
Bonjour,
Rien ne t'empêche de faire 2 requêtes et d'affecter l'une ou l'autre selon tes conditions par programmation avec la propriété ..FichierParcouru.
Cependant je persiste en disant que faire l'affection au contenu dès le départ est plus rapide. Imaginons que ma combo sous-catégorie soit reliée, tu te retrouverais avec quelque chose comme ça:
SI HLitRecherchePremier(T_ANNONCE,AN_NUM_LP,gnNumLP) ALORS SI T_ANNONCE.AN_CATEGORIE <> "" ALORS
HExécuteRequête(REQ_SsCategorie,hRequêteDéfaut,T_ANNONCE.AN_CATEGORIE) SINON HExécuteRequête(REQ_SsCategorie,hRequêteDéfaut,"@@__@@") FIN FIN
ListeAffiche(COMBO_ssCateg) FichierVersEcran(FEN_FicheVehicule,T_ANNONCE) FIN
Dans le code la combo catégorie on a
HExécuteRequête(REQ_SsCategorie,hRequêteDéfaut,MoiMême) ListeAffiche(COMBO_ssCateg)
-- Cordialement,
Philippe SAINT-BERTIN Géode Informatique |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 87 messages Popularité : +4 (4 votes) |
|
Posté le 22 janvier 2018 - 15:04 |
Super ça fonctionne , c'est à dire que grâce à la deuxième partie :
HExécuteRequête(REQ_SsCategorie,hRequêteDéfaut,COMBO_CategVehicule..ValeurAffichée) ListeAffiche(COMBO_ssCateg)
En fonction de la sélection dans la combo 1, les données s'affichent dans le combo2.
Et ici :
SI HLitRecherchePremier(T_ANNONCE,AN_NUM_LP,gnNumLP)ALORS SI T_ANNONCE.AN_CATEGORIE<>""ALORS HExécuteRequête(REQ_SsCategorie,hRequêteDéfaut,T_ANNONCE.AN_CATEGORIE) SINON HExécuteRequête(REQ_SsCategorie,hRequêteDéfaut,"@@__@@") FIN FIN
ListeAffiche(COMBO_ssCateg) FichierVersEcran(FEN_FicheVehicule,T_ANNONCE)
Si j'ai une valeur sauvegardée en base de données cela m'affiche bien cette valeur
Avec ma requête :
SELECT T_CATEGORIE.CA_SS_TYPE_VEHICULE AS CA_SS_TYPE_VEHICULE, T_CATEGORIE.CA_SS_TYPE_V_MOBILE AS CA_SS_TYPE_V_MOBILE FROM T_CATEGORIE WHERE T_CATEGORIE.CA_TYPE_VEHICULE = {pTypeVehicule} OR T_CATEGORIE.CA_TYPE_V_MOBILE = {pTypeVehicule}
Ce qui me posait problème c'est que en fonction de la valeur choisie dans les listes déroulantes, j'enregistre en base une correspondance (ex : voiture => je sauvegarde Car en bdd). Donc quand il s'agit d'afficher en fonction de la sélection dans la combo1 mon paramètre doit être égal à mon CA_TYPE_VEHICULE. Néanmoins lorsque je lis le résultat dans ma base le paramètre doit être égal au CA_TYPE_V_MOBILE.
Merci encore pour ton aide |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|