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...

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
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;