Je n'ai pas ACCESS mais depuis le temps, ce problème devrait résolu
Au pire tu pouvais faire un algo Delphi genre
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
QWrite.SQL := 'UPDATE PERSO SET NOM = :pNomR WHERE NOM = :pNom';
QWrite.Prepared := True;
QRead.SQL := 'SELECT NOM FROM PERSO';
QRead.Open();
while not QRead.EoF do
begin
QWrite.ParamByName('pNom').AsString := QRead.FieldByName('NOM').AsString;
QWrite.ParamByName('pNomR').AsString := StringReplace(QRead.FieldByName('NOM').AsString, '.', '', [rfReplaceAll]);
if QWrite.ParamByName('pNomR').AsString <> QWrite.ParamByName('pNom').AsString then
QWrite.ExecSQL();
QRead.Next();
end; |
En Excel par exemple "1234567890" on remplace "456" par "ABC" ça donne "123ABC7890"
Avec
A1 = 1234567890
A2 = 456
A3 = ABC
=CONCATENER(GAUCHE(A1;TROUVE(A2;A1)-1);A3;DROITE(A1;NBCAR(A1)-TROUVE(A2;A1)-NBCAR(A2)+1))
On peut vite le transformer en SQL ACCESS, à l'arrache je dirais
SELECT nom, Left(nom, InStr(".", nom) - 1) & "" & Right(nom, Len(nom) - InStr(".", nom) - Len(".") + 1) AS remplacement FROM perso
donc
st1:='SELECT nom, Left(nom, InStr(".", nom) - 1) & Right(nom, Len(nom) - InStr(".", nom) - Len(".") + 1) AS remplacement FROM perso;';
CHARINDEX ou InStr à vérifier
Cela remplace qu'une seule fois, le premier
Donc au pire
1 2 3 4 5 6
|
dm2.ADOQperso.SQL.Text := 'UPDATE perso SET perso.nom = Left(nom, InStr(".", nom) - 1) & Right(nom, Len(nom) - InStr(".", nom) - Len(".") + 1)';
dm2.ADOQperso.Prepared := True;
repeat
dm2.ADOQperso.ExecSQL();
until dm2.ADOQperso.RowsAffected = 0; |
Partager