Ajout si pas encore dans mysql
Bonjour,
J'aimerais effectuer une comparaison entre des données présentes dans une table "patient" de mysql et les noms des patients présents dans un fichier .txt. L'objectif est d'ajouter le nom de la personne si elle n'est pas encore présente dans la table "patient" de la bdd de mysql.
Voici un exemple de lignes du fichier .txt
aderwel, Yvonne Marie Yvonne19080505655 00007-01 1939-01-01 Dupire 0ABUT990102104024 0A08:00 16031973260536100 RESIDENCE Edel 00007-01
aderwel, Yvonne Marie Yvonne19080505655 00007-01 1939-01-01 Dupire 0ABUT990102104024 0A08:00 16032173260536100 RESIDENCE Edel 00007-01
Le nom de la personne étant "aderwel", j'aimerais donc que si ce nom n'est pas encore dans la bdd mysql, de l'ajouter. Mais bon c'est plus facile à dire qu'à faire... .
Je suis parti sur cette base, mais il doit certainement y avoir plein de fautes... 8O
Code:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
| procedure TFficheEnvoi.BitBtn2Click(Sender: TObject);
procedure CompareStringLists(List1, List2 : TStringList; Missing1, Missing2, Common1 : TStrings);
var
I: Integer;
J: Integer;
begin
List1.Sort;
List2.Sort;
I := 0;
J := 0;
while (I < List1.Count) and (J < List2.Count) do // tant qu'on est pas à la fin des deux listes
begin
if List1[I] < List2[J] then
begin
Missing2.Add(List1[I]);
Inc(I); // on incremente i de 1
end
else if List1[I] > List2[J] then
begin
// Missing1.Add(List2[J]); on fait rien car je veux pas l'ajouter
Inc(J); // on incrémente j de 1
end
else
begin
Common1.Add(List2[J]); //si c'est identique
Inc(I);
Inc(J);
end;
end;
for I := I to List1.Count - 1 do
Missing2.Add(List1[I]);
end;
var
i, j, k : Integer;
List1: TStringList;
List2: TStringList;
CQuery : TZReadOnlyQuery;
begin
List1 := TStringList.Create;
List2 := TStringList.Create;
CQuery:=TZReadOnlyQuery.Create(Nil);
try
CQuery.Connection:=ZTable4.Connection;
CQuery.SQL.Text:='select nom from patient'; // je sélectionne tous les noms des patients
CQuery.Prepare;
for i := 0 to Memo1.Lines.Count-2 do // pour les lignes qui sont dans le memo2
begin
list1:=copy (memo1.Lines[i],1,27); // je copie les 27 premiers caractères de chaque ligne
end;
list2:=ZTable4nom.Text; // je selectionne tous les noms de la ztable4
List1.Clear();
List2.Clear();
List1.LoadFromFile(OpenDialog1.FileName);
List2.LoadFromFile(cquery.SQL);
CompareStringLists(List1, List2, missing1, missing2);
finally
List2.Free;
List1.Free;
end;
end; |