Optimisation création requête multiple
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:
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; |