Bonjour j'ai créer une procédure pour charger un fichier text, le fichier texte contient environ 36 000 lignes et je mets 7 secondes pour traiter 1600 lignes
je trouve ça horriblement lent

Je dois sûrement mal m'y prendre

C'est ma boucle qui permet d'insérer les lignes une à une dans mon TADOQuery qui est longue je n'ai même pas essayé d'insérer les données

Je suis sûr que les professionnels que vous êtes avez des conseils à me donner, merci d'avance.

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
Procedure TMain.btLoadCodePostalClick(Sender: TObject);
Var
  NewCode: TStringList;
  I:       Integer;
Begin
  If Not OpenTextFileDialog.Execute Then
    Exit; //si aucun fichier n'est spécifié je quitte la procédure
  Try
    btLoadCodePostal.Enabled := False; //je désactive mon bouton
    NewCode                  := TStringList.Create; //je crée une liste
    NewCode.LoadFromFile(OpenTextFileDialog.FileName); //je charge mon fichier dans la liste
    If NewCode.Count > 30000 Then //si la liste contient plus de 30 000 lignes il est sûrement correct
    Begin
      ADOQuery.SQL.Clear;
      ADOQuery.SQL.Add('DELETE FROM `codes postal`;' + sLineBreak); //je vide la table des anciens codes
      I := NewCode.Count - 1;
      While I > 0 Do //je boucle pour créer les requêtes afin de insérer les nouveaux codes
      Begin
        //je récupère dans chaque ligne les cinq premiers caractères, et la fin de la ligne moins les six premiers caractères
        ADOQuery.SQL.Add('INSERT INTO `codes postal` VALUES (''' + Copy(NewCode[I], 1, 5) + ''', ''' +
          Copy(NewCode[I], 7, Length(NewCode[I])) + ''');' + sLineBreak);
        Dec(I);
      End;
      ADOQuery.ExecSQL; //j'exécute mes requêtes
    End
    Else
      ShowMessage('Moins de 30000 lignes le fichiers est sûrement incorrect!');
  Finally
    NewCode.Free; //je libère ma liste
    btLoadCodePostal.Enabled := True; //je réactive mon bouton
  End;
End;