PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

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 //On revient à l'employé initial
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
//Création de la liste des PK des clients sélectionnés
POUR IndiceSélection = 1 _A_ TableSelectOccurence(TABLE_Client)
sListeVentilation=sListeVentilation+TABLE_Client[TableSelect(TableClient,IndiceSélection)]
SI IndiceSélection <> TableSelectOccurence(TableClient) ALORS //On ajoute le séparateur
sListeVentilation=sListeVentilation+";" //Le séparateur est point virrgule
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 tourne
Mensaje 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.P
Mensaje modificado, 18,octubre 2019 - 15:48