Bonjour,
J'ai une BD Access et je dois insérer des records (12'000) dans une table de 6 colonnes. (lenteur)
Je voudrais accélérer cette insertion. Quelle autre méthode utiliseriez-vous à la place de record ?
Merci a+
Version imprimable
Bonjour,
J'ai une BD Access et je dois insérer des records (12'000) dans une table de 6 colonnes. (lenteur)
Je voudrais accélérer cette insertion. Quelle autre méthode utiliseriez-vous à la place de record ?
Merci a+
Ces 12k records viennent d'où ?
D'une autre base de données ? D'un fichier texte ? de l'espace :P ? (je l'avais pas déjà faites celle la sur ton autre poste ? :aie: )
D'une TList structurée
Technique à tester mais qui peut être un peu plus rapide (pas sûr :aie: )
1- Faire une requete
2- Insérer les données dans cette requete avec des postsCode:
1
2
3 Select [liste des champs nécessaires pur l'insertion] from [La Table] Where [L'index] = [une valeur qui renvoi 0 enregistrement]
Pour ma part avec cette technique pour transférer des données d'une base de donnéesCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 With AdoQuery do begin Connection.BeginTrans; try Append; for i := 0 to Malist.count -1 do begin FieldByName().asString := Malist.Strings[i]; // exemple a toi de mettre tes champs try Post; Except on E:Exception do // ce que tu veux pour gérer celui qui passe pas end; end; Connection.CommitTrans; Except on E:Exception do Connection.RollBackTrans; end; end; end;
Nombre d'enregistrements : 49 000
Nombre de champs : 28
Origine : Base MySQL sur un serveur Internet
Destination : mon poste, base MySQL
Temps : 3mn 23s
Enr./s : 245
Je ne connais plus bien acces mais sur la plupart des bases il est utile pour les traitements de masse de désactivé ou de supprimer les index da la tables ds laquelle tu veux insérer pour les réactver ou recréer après traitement.
Au point 1 je dois faire un Close, mettre les params puis Open ?
Parce que lorsque j'arrive à Append ca se plante.
Citation:
Envoyé par Vodkha
Oui, il faut que la source de données soit ouverte.
Attention la requete doit être monoTable, ca ne fonctionne pas avec du multitable.
Code:
1
2
3
4
5
6
7
8 With MaRequete do begin Close; SQL.Clear; SQL.Add('select ...'); Open; end;