|
| Inicio → WINDEV 2025 → Modifier un valeur dans une bdd via un bouton et deux champs combo. |
| Modifier un valeur dans une bdd via un bouton et deux champs combo. |
| Iniciado por Maxime, 16,oct. 2019 14:37 - 10 respuestas |
| |
| | | |
|
| |
Miembro registrado 106 mensajes |
|
| Publicado el 16,octubre 2019 - 14:37 |
Bonjour ,
J'ai crée une fenêtre avec deux champs combo et un bouton . J'aimerai faire en sorte que lorsque je clique sur le bouton selon les paramètre choisi en combo change une valeur dans la base de donnée .
cas pratique :
mon combo1 est l'ancien collaborateur mon combo2 est le nouveau collaborateur
le bouton sert a pouvoir transférer les clients de l'ancien collaborateur au nouveau ( d'ou le fait de la modification dans la BDD )
j'ai tenté de faire ce code ci-joint sans succès mais qui pourrai peut être vous éclairez d'avantage par rapport a mon explication .
HLitRecherche(CLIENT,IDCOLLABORATEUR,"") SI HTrouve() ALORS SI CLIENT.IDCOLLABORATEUR = COMBO_AncienCollaborateur ALORS CLIENT.IDCOLLABORATEUR=COMBO_NouveauCollaborateur HModifie(CLIENT) Info("les clients du collaborateur on été transféré") FIN SINON Info("Aucun client n'appartient au collaborateur choisi.") FIN
Cordialement M.P |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 16,octubre 2019 - 15:06 |
Bonjour, Un seul combo suffit, le combo collaborateur. Normalement, lors de l'affichage de la fiche "Client", l'employé affecté au client apparaît. il suffit de coder la partie "Sélection d'une ligne" pour modifier l'affectation. Il faut bien entendu que le combo en question retourne la PK de la table Collaborateur (Valeur mémorisée.)
SI OuiNon("Voulez vous modifier l'employé affecté au client" ALORS Client.IDCollaborateur=MoiMême HModifie(CLIENT) SINON ToastAffiche("Modification annulée") MoiMême=Client.IDCollaborateur FIN
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 194 mensajes |
|
| Publicado el 16,octubre 2019 - 15:30 |
Bonjour
A priori ce type de traitement en masse (Basculer les clients d'un collaborateur sur un autre) se fait plutôt par une requête de type UPDATE. Bien plus efficace et code plus léger.
-- Côme, Clairinfo |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 16,octubre 2019 - 15:42 |
Côme a écrit :
Bonjour
A priori ce type de traitement en masse (Basculer les clients d'un collaborateur sur un autre) se fait plutôt par une requête de type UPDATE. Bien plus efficace et code plus léger.
-- Côme, Clairinfo
Merci je vais essayé .
Voroltinquo a écrit :
Bonjour, Un seul combo suffit, le combo collaborateur. Normalement, lors de l'affichage de la fiche "Client", l'employé affecté au client apparaît. il suffit de coder la partie "Sélection d'une ligne" pour modifier l'affectation. Il faut bien entendu que le combo en question retourne la PK de la table Collaborateur (Valeur mémorisée.) SI OuiNon("Voulez vous modifier l'employé affecté au client" ALORS Client.IDCollaborateur=MoiMême HModifie(CLIENT) SINON ToastAffiche("Modification annulée") MoiMême=Client.IDCollaborateur //On revient à l'employé initial FIN
-- Il y a peut être plus simple, mais, ça tourne
Le problème c'est que je dois choisir les fiches clients de l'ancien employé pour les mettre sur un autre donc je suis obligé d'en avoir deux de champs me semble t'il .
Merci de vos réponse .
Cordialement M.P |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 16,octubre 2019 - 16:59 |
Il serait dans ce cas judicieux de passer par un champ table alimenté par une requête du style, valeur mémorisée : PK_Client
SELECT Client.PK_Client Client.NDX_NomClient AS NomClient, Client.AK_NoClient AS NoClient FROM Client WHERE Client.FK_ResponsableClient = {pAncienResponsable} où pAncienResponsable est la valeur de la combo
Suite à la sélection des clients à "Ventiler", création de la liste de ventilation :
sListeVentilation est chaîne
POUR IndiceSélection = 1 _A_ TableSelectOccurence(TABLE_Client) sListeVentilation=sListeVentilation+TABLE_Client[TableSelect(TableClient,IndiceSélection)] SI IndiceSélection <> TableSelectOccurence(TableClient) ALORS sListeVentilation=sListeVentilation+";" FIN FIN
Pour ventiler il suffit d'appliquer la requête suivante (je reprend la suggestion de côme)
UPDATE Client SET FK_ResponsableClient = {pNouveauResponsable} WHERE Client.PK_Client IN ({pClientsAVentiler})
Sans oublier de rafraîchir le champ table à l'issue via un TableAffiche
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 16,octubre 2019 - 17:16 |
Une autre solution, peut être plus rapide, consisterait à parcourir la sélection (cf création de la liste des client à ventiler) et de faire la modification au fur et à mesure.
-- Il y a peut être plus simple, mais, ça tourneMensaje modificado, 16,octubre 2019 - 17:17 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 194 mensajes |
|
| Publicado el 16,octubre 2019 - 18:57 |
Vous pouvez faire ce changement en masse via une seule requête SQL ! update client SET MonColl = X WHERE MonColl = Y Ou alors je n'ai pas compris votre demande ce qui est possible.
-- Côme, Clairinfo |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 17,octubre 2019 - 09:32 |
je pense que vous avez bien compris Côme mon but est de donner les client du collaborateur X a Y . Ce serait admettons pour les démissions ou licenciement afin de faire plus rapide que manuellement Donc je pense que vous êtes dans la bonne situation Côme.
Merci de votre réponse et aide je vais essayé de suite .
Cordialement M.P |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 18,octubre 2019 - 10:21 |
bonjour ,
Ma requête est la suivante :
UPDATE CLIENT SET IDCOLLABORATEUR = {ParamNouveauColl} WHERE CLIENT.IDCOLLABORATEUR = {ParamAncien}
J'ai essayé ce code afin d'assigné mes champs combo a mes paramètres
SI OuiNon("Êtes vous sure de vouloir affecter les client de %1 à %2 ?") ALORS REQ_Changement.ParamAncien=COMBO_AncienCollaborateur REQ_Changement.ParamNouveauColl=COMBO_NouveauCollaborateur HExécuteRequête(REQ_Changement,hVérifieIntégrité+hVérifieDoublon) Info("les clients du collaborateur on été transféré") FIN
Mon problème est le suivant :
Lorsque je test ma requête manuellement elle est fonctionnelle et modifie les bonnes données mais des que je passe par la fenêtre avec le code ci-joint aucune modification ne s'effectue. Avez vous une idée ?
Cordialement M.P |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.361 mensajes |
|
| Publicado el 18,octubre 2019 - 10:50 |
La requête est elle exécutée ? Il ne faut pas hésiter à le vérifier dans le code
SI PAS HExécuteRequête(REQ_Changement,hVérifieIntégrité+hVérifieDoublon) Erreur("Problème d'exécution de la requête, changez de bourreau"+CRLF+HErreurInfo) SINON Info("les clients du collaborateur on été transféré") FIN Que renvoient tes combos ? (Valeur mémorisée)
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 106 mensajes |
|
| Publicado el 18,octubre 2019 - 15:43 |
La requête ne s'exécute pas car " problème d’exécution de la requête , changez de bourreau erreur dans le code sql de la requête impossible . <REQ_ChangementColl>. initialisation de la requête impossible. toutes les affections de la requête Update ont été ignoré cause de parametre non défini."
Le message d'erreur reçu Cordialement M.PMensaje modificado, 18,octubre 2019 - 15:48 |
| |
| |
| | | |
|
| | | | |
| | |
|