|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Bouton valider voit double |
Débuté par priv!p1057yn6+nytr4vr+z1062ryyvr4Mtznvy+p1z, 04 déc. 2024 11:03 - 16 réponses |
| |
| | | |
|
| |
Membre enregistré 8 messages |
|
Posté le 04 décembre 2024 - 11:03 |
Bonjour Je débute avec Windev, Bonjour, je suis à 2 pas de finir un petit projet sous Windev (V 25), je créer un nouvel enregistrement, celui -ci apparait dans la table mais quand j'opère une modification le clic sur le bouton valider me créer un nouvel enregistrement en plus de celui qui à été modifié, Merci de me tendre la main sMonidperso est une chaîne = "CERTC" + AnnéeEnCours()+"-"
nMafinId est un entier sResult est une chaîne nBCaractere est un entier sResult = "0001"
SI SAI_IDperso <> "" ALORS EcranVersFichier() HModifie(celibat) FIN
SI DateDuJour = PremierJourDeLAnnée(AnnéeEnCours()) ET HLitDernier(celibat,IDperso) =Vrai ALORS SI Gauche(celibat.IDperso,10) = sMonidperso ALORS nBCaractere = Taille(celibat.IDperso) -10 nMafinId = Droite(celibat.IDperso,nBCaractere) nMafinId += 1 SI nMafinId < 10 sResult = "000" + NumériqueVersChaîne(nMafinId) FIN SI nMafinId >= 10 ET nMafinId < 100 ALORS sResult = "00" + NumériqueVersChaîne(nMafinId) FIN SI nMafinId >= 100 ET nMafinId < 1000 ALORS sResult = "0" + NumériqueVersChaîne(nMafinId) FIN SINON sResult = "0001" FIN SINON SI Gauche(celibat.IDperso,10) = sMonidperso ALORS nBCaractere = Taille(celibat.IDperso) -10 nMafinId = Droite(celibat.IDperso,nBCaractere) nMafinId += 1 SI nMafinId < 10 sResult = "000" + NumériqueVersChaîne(nMafinId) FIN SI nMafinId >= 10 ET nMafinId < 100 ALORS sResult = "00" + NumériqueVersChaîne(nMafinId) FIN SI nMafinId >= 100 ET nMafinId < 1000 ALORS sResult = "0" + NumériqueVersChaîne(nMafinId) FIN FIN FIN
SAI_IDperso= sMonidperso + sResult
EcranVersFichier()
HAjoute(celibat)
Ferme("",Vrai)
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 131 messages |
|
Posté le 04 décembre 2024 - 11:10 |
bonjour , l'erreur est là
HAjoute(celibat)
Vous ajouter un enregistrement à chaque fois que vous cliquer sur le bouton ,vous devriez plutot faire quelque chose de ce type
SI SAI_IDperso <> "" ALORS EcranVersFichier() HModifie(celibat) SINON ... EcranVersFichier() HAjoute(celibat) FIN |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 184 messages |
|
Posté le 04 décembre 2024 - 11:22 |
Bonjour, Cela n'a rien à voir avec ton problème, pour lequel Silvérin t'a donné la solution, mais, en lisant ton code, je vois 2 (4 en fait car elles apparaissent 2 fois) lignes qui vont poser problème.
nMafinId = Droite(celibat.IDperso,nBCaractere) nMafinId += 1 Ce code équivaut à
nMafinId = 1 Droite renvoie une chaine, nMafinID est un entier donc avec cette affectation nMaFinID vaudra toujours 0 Pour obtenir un entier, il faut utiliser Val
nMafinId = Val(Droite(celibat.IDperso,nBCaractere)) nMafinId += 1
Par ailleurs, tu peux éventuellement remplacer tes code d'incrémentation par ChaineIncrémente (en remplaçant éventuellement les 0 de bourrage par un underscore) -- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFMMessage modifié, 04 décembre 2024 - 11:31 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 8 messages |
|
Posté le 04 décembre 2024 - 15:07 |
Merci Silverin pour ta réactivité seulement c'est toujours pas bon avec mon code j'ai ceci
avec le tien j'ai cela
je suis un peu perdu, c'est pas mon Idperso qui me joue des tours par hasard? je ne pense pas mais... Merci également à Voroltinquo pour avoir ajouté une pierre à l'édifice, je complèterai par la suite Salutations |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 164 messages |
|
Posté le 04 décembre 2024 - 16:07 |
Bonjour
Je vois votre problème, vous voulez faire des enregistrements | des modifications en un seul bouton | un seul méthode | un seul procédure, ce n'est pas très pratique J'ai une solution pour vous
1. Vous devrez différentier dans deux boutons les enregistrements | les modifications
Pour ce cas, lors des enregistrements, vous grisez le bouton de modification, ensuite lors des modifications, vous grisez le bouton des enregistrements Attention il faudrait ajouter un champ identifiant de type numérique, dont vous récupérer lors des modifications
Je transfert un code et un photo dont vous pouvez utiliser
// EDD (12/24) : Evènement d'un procédure des enregistrements IF Validation() = True THEN // EDD (12/24) : Validation des champs obligatoire | des dates validés HRAZ(celibat) celibat.Nom = SAI_Nom celibat.Prénom = SAI_Prénom celibat.Date_Naissance = SAI_Date_Naissance IF HAjoute(celibat) = False THEN // EDD (12/24) : Enregistrement des informations Info(ErreurInfo(errComplet)) FinProgramme() END Info("Enregistrement réussie.") Ferme(MaFenêtre..Nom) END
// EDD (12/24) : Evènement d'un procédure des modifications IF Validation() = True THEN // EDD (12/24) : Validation des champs obligatoire | des dates validés HLitRecherche(celibat, IDperso, SAI_IDperso) IF HTrouve(celibat) = True THEN celibat.Nom = SAI_Nom celibat.Prénom = SAI_Prénom celibat.Date_Naissance = SAI_Date_Naissance IF HModifie(celibat) = False THEN // EDD (12/24) : Modifications des informations Info(ErreurInfo(errComplet)) FinProgramme() END Info("Modification réussie.") Ferme(MaFenêtre..Nom) END END
NB : Vous devrez utiliser un procédure | une méthode mais pas dans un bouton | ..., la raison est votre procédure | votre méthode sera indépendante et sera possible d'utiliser plusieurs fois dans des autres évènements
Cordialement Mr.RATSIMANDRESY Niry Aina Eddy |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 164 messages |
|
Posté le 04 décembre 2024 - 16:11 |
: Bouton des enregistrements | des modifications
: Identifiant dans un champ de saisie de type numérique |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 8 messages |
|
Posté le 04 décembre 2024 - 20:11 |
Merci RATSIMANDRESY, mais c'est trop compliqué pour moi qui débute avec cet outil et d'une manière générale avec la programmation, je n'ai pas de soucis avec un autre fichier de mon analyse ou tout fonctionne à merveille, je saisi, je valide la fenêtre avec la table s'affiche avec mes enregistrements, je clique sur le bouton "Modifier" je modifie je valide tout est ok, la seule différence entre ce fichier et celui qui pose problème c'est que ce dernier contient un IDperso de type texte d'où le code ci dessus. Après modification le bouton "Valider" m'incrémente un nouvel enregistrement avec la modification opérée. Merci pour votre concours.
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 184 messages |
|
Posté le 05 décembre 2024 - 06:42 |
Bonjour, je ne vois pas de bouton valider.
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFM |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 8 messages |
|
Posté le 05 décembre 2024 - 08:02 |
Bonjour Voroltinquo, le Bouton "Modifier" ouvre la fenêtre saisie sur laquelle se trouve le Bouton "Valider" donc je modifie et je valide. Merci
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 4 184 messages |
|
Posté le 05 décembre 2024 - 10:00 |
Pourquoi faire simple quand on peut faire compliqué. Ça pue le RAD à plein nez. As tu pensé à l'utilisateur qui doit modifier ne serait-ce qu'une dizaine de fiche ? Ton champ table (en mode saisie 1() ) est il en "Saisie en cascade" et "Enregistrement en sortie de Ligne" (2)
. En ce qui concerne l'incrémentation de ta chaine, tu peux ajouter un "Trigger avant" en ajout
-- Il y a peut être plus simple, mais, ça tourne Quand tout a échoué, utilise l'option RTFM |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 8 messages |
|
Posté le 05 décembre 2024 - 10:51 |
Ma table n'est pas en saisie et je ne cherche pas à faire compliqué, j'ai bien expliqué que je débute en programmation. Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 204 messages |
|
Posté le 05 décembre 2024 - 11:35 |
Bonjour priv! etc..
Voroltinquo t'a donné la solution. C'est très simple, tu as juste à remplacer le code que tu nous a donné au début par celui-ci :
sMonidperso est une chaîne = "CERTC" + AnnéeEnCours()+"-"
nMafinId est un entier sResult est une chaîne nBCaractere est un entier sResult = "0001"
SI SAI_IDperso <> "" ALORS EcranVersFichier() HModifie(celibat)
FIN
SI DateDuJour = PremierJourDeLAnnée(AnnéeEnCours()) ET HLitDernier(celibat,IDperso) =Vrai ALORS
SI Gauche(celibat.IDperso,10) = sMonidperso ALORS nBCaractere = Taille(celibat.IDperso) -10 nMafinId = Val(Droite(celibat.IDperso,nBCaractere)) nMafinId += 1 SI nMafinId < 10 sResult = "000" + NumériqueVersChaîne(nMafinId) FIN SI nMafinId >= 10 ET nMafinId < 100 ALORS sResult = "00" + NumériqueVersChaîne(nMafinId)
FIN SI nMafinId >= 100 ET nMafinId < 1000 ALORS sResult = "0" + NumériqueVersChaîne(nMafinId) FIN SINON
sResult = "0001" FIN
SINON
SI Gauche(celibat.IDperso,10) = sMonidperso ALORS nBCaractere = Taille(celibat.IDperso) -10 nMafinId = Val(Droite(celibat.IDperso,nBCaractere)) nMafinId += 1 SI nMafinId < 10 sResult = "000" + NumériqueVersChaîne(nMafinId) FIN SI nMafinId >= 10 ET nMafinId < 100 ALORS sResult = "00" + NumériqueVersChaîne(nMafinId)
FIN SI nMafinId >= 100 ET nMafinId < 1000 ALORS sResult = "0" + NumériqueVersChaîne(nMafinId) FIN
FIN
FIN
SAI_IDperso= sMonidperso + sResult
EcranVersFichier()
HAjoute(celibat)
Ferme("",Vrai)
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 8 messages |
|
Posté le 06 décembre 2024 - 09:14 |
Bonjour STASZEWSKI Désolé ce code c'est le mien c'est celui qui pose problème, la preuve en validant la modification ça donne ceci:
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 458 messages |
|
Posté le 06 décembre 2024 - 09:31 |
Bonjour,
Il vous faut un RETOUR après le HModifie(), sans quoi le reste du code va toujours s'exécuter, y compris le HAjoute() à la fin.
SI SAI_IDperso <> "" ALORS EcranVersFichier() HModifie(celibat) RETOUR FIN
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 8 messages |
|
Posté le 06 décembre 2024 - 22:18 |
Merci bchanudet J'ai suivi ton conseil j'ai mis un "RETOUR" après le "HModifie" mais en validant la fiche (FN) de saisie ne se ferme pas, en la forçant je constate que la modification à été prise en compte dans ma Table, qu'ai-je oublié? Salutations
sMonidperso est une chaîne = "CERTC" + AnnéeEnCours()+"-"
nMafinId est un entier sResult est une chaîne nBCaractere est un entier sResult = "0001"
SI SAI_IDperso <> "" ALORS EcranVersFichier() HModifie(celibat)
RETOUR FIN
SI DateDuJour = PremierJourDeLAnnée(AnnéeEnCours()) ET HLitDernier(celibat,IDperso) =Vrai ALORS SI Gauche(celibat.IDperso,10) = sMonidperso ALORS nBCaractere = Taille(celibat.IDperso) -10 nMafinId = Droite(celibat.IDperso,nBCaractere) nMafinId += 1 SI nMafinId < 10 sResult = "000" + NumériqueVersChaîne(nMafinId) FIN SI nMafinId >= 10 ET nMafinId < 100 ALORS sResult = "00" + NumériqueVersChaîne(nMafinId) FIN SI nMafinId >= 100 ET nMafinId < 1000 ALORS sResult = "0" + NumériqueVersChaîne(nMafinId) FIN SINON sResult = "0001" FIN SINON SI Gauche(celibat.IDperso,10) = sMonidperso ALORS nBCaractere = Taille(celibat.IDperso) -10 nMafinId = Droite(celibat.IDperso,nBCaractere) nMafinId += 1 SI nMafinId < 10 sResult = "000" + NumériqueVersChaîne(nMafinId) FIN SI nMafinId >= 10 ET nMafinId < 100 ALORS sResult = "00" + NumériqueVersChaîne(nMafinId) FIN SI nMafinId >= 100 ET nMafinId < 1000 ALORS sResult = "0" + NumériqueVersChaîne(nMafinId) FIN FIN
FIN
SAI_IDperso= sMonidperso + sResult
EcranVersFichier()
HAjoute(celibat)
ToastAffiche("Modification réussie",toastLong,cvBas,VertClair)
Ferme("",Vrai)
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 200 messages |
|
Posté le 07 décembre 2024 - 07:18 |
Bonjour,
bchanudet avait raison sur le principe, il faut éviter que le reste du code s'exécute après le HModifie()
Remplace le RETOUR par un Ferme() et ça devrait le faire !
SI SAI_IDperso <> "" ALORS EcranVersFichier() HModifie(celibat) ToastAffiche("Modification réussie",toastLong,cvBas,VertClair) Ferme("",Vrai) FIN Message modifié, 07 décembre 2024 - 07:40 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 8 messages |
|
Posté le 07 décembre 2024 - 08:16 |
Merci à vous tous, tout est au Top ça motive pour la suite. Salutations. |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|