comme colonnes il y a : famille, fabriquant, produit, remarque, lien1, lien2, lien3, lien4, lien5
et comme edit, c les meme noms avec un E en + devant le nom
comme EFamille
comme colonnes il y a : famille, fabriquant, produit, remarque, lien1, lien2, lien3, lien4, lien5
et comme edit, c les meme noms avec un E en + devant le nom
comme EFamille
Autre chance :
Les modif sont en rouges.
Normalement pour le changement de toute la ligne c'est bon par contre, c'est bizard qu'il te fasse l'inverse de ce que tu veuille
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 int stop = 0; TLocateOptions Option; TGestionMateriaux->First(); while(!stop){ if(EProduit->Text.c_str()==TGestionMateriaux->FieldByName("produit")->Value) { TGestionMateriaux->Locate("produit",EProduit->Text.c_str(),Option) stop = 1; } if(TGestionMateriaux->EOF) { TGestionMateriaux->Append(); stop=1; } TGestionMateriaux->Next(); } TGestionMateriaux->Edit(); TGestionMateriaux->FieldByName("produit")->Value=EProduit->Text.c_str(); TGestionMateruax->FieldByName("famille")->Value=EFamille->Text.c_str(); TGestionMateruax->FieldByName("remarque")->Value=ERemarque->Text.c_str(); TGestionMateruax->FieldByName("lien1")->Value=ELien1->Text.c_str(); TGestionMateruax->FieldByName("lien2")->Value=ELien2->Text.c_str(); TGestionMateruax->FieldByName("lien3")->Value=ELien3->Text.c_str(); TGestionMateruax->FieldByName("lien4")->Value=ELien4->Text.c_str(); TGestionMateruax->FieldByName("lien5")->Value=ELien5->Text.c_str(); TGestionMateriaux->Post(); TGestionMateriaux->Refresh();
A tout hasard (mais ca m'étonnerais) change == par != (donc l'inverse) dans le premier if :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 if(EProduit->Text.c_str()==TGestionMateriaux->FieldByName("Produit")->Value) { ...
Envoyé par kalou26
Current StatusAux persévérants aucune route n'est interdite.
Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
Faîtes quelque chose de bien avec vos petits sous: Enfants du MekongAvec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
j'ai regardé votre code; il est bien :
vous lisez la valeur de la cellule en cours, vous debutez la lecture de tous les champs en parallèle vous comparez les données de la cellule en cours d'édition avec celles existantes c'est bien.
La question est celle ci que faites vous lorsque vous trouvez une correspondance ?
Reponse supprimer la ligne en cours de lecture (continuer la recherche ? ou sortir de la boucle ? à vous de voir)
vous devriez supprimer l'enregistrement en cours du datasource ( methode delete) qui n'apparait null part dans votre code.
Felicatation pour ce que vous avez deja trouvé
Envoyé par Furlaz
il manque une virgule, apres manger
Mais sur le coup
lanonyme
Effectivement, mais c'est peut etre pour ca que je trouve pas la solutionEnvoyé par lanonyme
ton code marche presque furlaz
en fait lorsque le produit n'existe pas, cela le crée en en ecrasant un otre, alors quil faudrait en crée un nouveau
aussi, cela n'ecrase pas la bonne ligne, cela ecrase la ligne selectionnée et non celle qui porte le meme nom de produit
La je pensé que lorsqu'on trouve une correspondance, on se pointe dessus.Envoyé par vacknov
Du coup la boucle s'arrete (variable stop) et il n'y pas de
Donc normalement il edit tous les champs à l'endroit où il pointe soit sur la correspondance. Mais apparement ca n'a pas l'air de fonctionner
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 TGestionMateriaux->Append();
On finira bien par y arriver
Tu a mis != ou == dans le 1er if ?Envoyé par kalou26
ca ne vien pas de la en fait
et je ne comprend pas pk sane crée pas de nouveau produit lorsquil n'existe pas
on rééssaye :
Verdict ?
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 int stop = 0; TLocateOptions Option; TGestionMateriaux->First(); while(!stop){ if(TGestionMateriaux->Locate("produit",EProduit->Text.c_str(),Option)==true) { stop = 1; } if(TGestionMateriaux->EOF && !stop) { TGestionMateriaux->Append(); stop=1; } TGestionMateriaux->Next(); } TGestionMateriaux->Edit(); TGestionMateriaux->FieldByName("produit")->Value=EProduit->Text.c_str(); TGestionMateruax->FieldByName("famille")->Value=EFamille->Text.c_str(); TGestionMateruax->FieldByName("remarque")->Value=ERemarque->Text.c_str(); TGestionMateruax->FieldByName("lien1")->Value=ELien1->Text.c_str(); TGestionMateruax->FieldByName("lien2")->Value=ELien2->Text.c_str(); TGestionMateruax->FieldByName("lien3")->Value=ELien3->Text.c_str(); TGestionMateruax->FieldByName("lien4")->Value=ELien4->Text.c_str(); TGestionMateruax->FieldByName("lien5")->Value=ELien5->Text.c_str(); TGestionMateriaux->Post(); TGestionMateriaux->Refresh();
affectons à stop le nombre d'enregistrement +1; lorsqu'une correspondance est trouvé. ceci devrait arrêter la boucleEnvoyé par Furlaz
toujours pareil, ca ne crée pas de nouveau produit sil nexiste pas
Mais la lorsqu'une correspondance est trouvé la variable stop se met à 1 et du coup le While n'étant plus respecté il arrete la boucleEnvoyé par vacknov
Envoyé par Furlaz
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 while(stop==0) { if (trouver) { stop==1 } ...->Next(); }
Allez un de plus :
L'espoir fait vivre
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 TLocateOptions Option; TGestionMateriaux->First(); if(TGestionMateriaux->Locate("produit",EProduit->Text.c_str(),Option)==false) { TGestionMateriaux->Append(); } TGestionMateriaux->Edit(); TGestionMateriaux->FieldByName("produit")->Value=EProduit->Text.c_str(); TGestionMateruax->FieldByName("famille")->Value=EFamille->Text.c_str(); TGestionMateruax->FieldByName("remarque")->Value=ERemarque->Text.c_str(); TGestionMateruax->FieldByName("lien1")->Value=ELien1->Text.c_str(); TGestionMateruax->FieldByName("lien2")->Value=ELien2->Text.c_str(); TGestionMateruax->FieldByName("lien3")->Value=ELien3->Text.c_str(); TGestionMateruax->FieldByName("lien4")->Value=ELien4->Text.c_str(); TGestionMateruax->FieldByName("lien5")->Value=ELien5->Text.c_str(); TGestionMateriaux->Post(); TGestionMateriaux->Refresh();
heu ouiEnvoyé par vacknov
mais dans l'autre aussi car lorsque que l'on arrive en fin de table (caractere EOF) le stop est mis a un aussi
tu dois garder dans une variable l'élément que tu souhaite ajouter en cas de suppression la grille s'actualise et tu ajoute par programmation le nouvel élément manuellement sans verification
Mais en meme temps je viens de me rendre compte que la boucle elle ne sert a rien maintenant que l'on utilise Locate
C'est d'ailleur pour ca que j'ai changé le code
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager