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