Tu as tout-a fait raison TicTacToe, mais je ne sais pas le faire autremment! Si tu as une idée je suis prenant...Envoyé par TicTacToe
Tu as tout-a fait raison TicTacToe, mais je ne sais pas le faire autremment! Si tu as une idée je suis prenant...Envoyé par TicTacToe
Voici mon côde:
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 procedure TForm1.Button1Click(Sender: TObject); var chaine : string; i:integer; begin for i := 1 to 100 do begin table1.first; while not table1.eof do begin Chaine:= table1.FieldByName('Nom').AsString; if Pos('DA', Chaine) = 1 then begin table1.Edit; table1.FieldByName('Nom').AsString:= 'da'+Copy(Chaine, 3, Length(Chaine)-2); table1.Post; end; table1.Next; end; end; end;
Je proposerais plutôt ceci :
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 procedure TForm1.Button1Click(Sender: TObject); var Chaine : string; Trouve : boolean; begin repeat Table1.First; Trouve := False; while not Table1.EoF do begin Chaine := Table1.FieldByName('Nom').AsString; if (Length(Chaine) > 1) and (Chaine[1] = 'D') and (Chaine[2] = 'A') then begin Table1.Edit; Chaine[1] := 'd'; Chaine[2] := 'a'; Table1.FieldByName('Nom').AsString := Chaine; Table1.Post; Trouve := True; Break; end; Table1.Next; end; until not Trouve; end;
Mais j'ai l'impression que tu as laissé tombé mes conseils depuis un certains temps puisque je n'ai pas eu de retour sur ce que je pensais être l'erreur...Envoyé par kikica
(modification d'un enreg faisant parti de l'index courant...)
C'est pô grave
Je pense que l'interet de ton post c'est pas d'arriver à effectuer tes modifs sur les enregs maintenant, mais de comprendre pourquoi il y a une erreur dans ton code qui est correct syntaxiquement, mais qui pourtant ne fonctionne pas...
Car tu retomberas certainement sur ce type d'erreur tôt ou tard !
Dans ce cas précis, je pense qu'un parcours à l'envers marcherait.
les 'da' sont systématiquement repoussés après les 'DA'.
J'ai repris strictement ton code mais en parcourant la table à l'envers, puisque la base le permet.
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 procedure TForm1.CLcl1Click(Sender: TObject); var chaine : string; begin table1.Last; while not table1.bof do try Chaine:= table1.FieldByName('Nom').AsString; if Pos('DA', Chaine) = 1 then begin table1.Edit; table1.FieldByName('Nom').AsString:= 'da'+Copy(Chaine, 3, Length(Chaine)-2); table1.Post; end; finally table1.prior; end; end;
et cela évite une double boucle que je trouve un peu tortueux à la relecture, mais qui marche comme la solution de sjrd.
MERCIIIIIIIIIIIIIIIIIIIIII..................... C'est GENIAL!!!
pourqoi ne pas charger avec une requette seulement les mot qui commence par 'DA' puis tu execute ton code sans faire le test???
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