Lenteur access provenant d'un record

vodkha Messages postés 2 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 10 août 2006 - 9 août 2006 à 10:50
vodkha Messages postés 2 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 10 août 2006 - 10 août 2006 à 08:48
Bonjour,

j'ai un prob avec une base access. je dois insérer des données provenant d'un record (environs 12'000) dans une BD Access. Cela fait donc 12'000 insert -> très lent environs 1min.

Il me faut absolument réduire ce temps d'insertion.   Quelle méthode devrais-je utiliser ?

Merci de votre aide

2 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
9 août 2006 à 18:20
mmm ce serat long.

je sais que dans un TFileStream cette routine serait trés rapide. dans une base de données, l'insertion est plus lente.
la lecture en memoire des données (des structures) doit etre relativement plus rapide que l'enregistrement.

1 minute pour 12000  (200 insert/sec)  ça me parait etre un ratio assé faiblard.

pourrait tu nous copier/coller le code de ta structure, comment tu la stock et comment tu l'insert dans la BDD ?

<hr size="2" width="100%" />Croc (click me)
0
vodkha Messages postés 2 Date d'inscription mercredi 19 novembre 2003 Statut Membre Dernière intervention 10 août 2006
10 août 2006 à 08:48
Toutes les données proviennent d'une TList. Cette TList est une structure Record (en-tête de l'entraînement et données entraînement)

Dans ma table Access, j'ai 3 tables (athlètes, entraînement et temps)

Lorsque l'utilisateur descend les données depuis son appareil, cela alimente ma TList.

J'ajoute un entraînement dans la table entraînement avec une reqûete SQL qui insère l'entête entraînement de la TList.

Dans cette entête de l'entraînement (dans BD) des données doivent être notifiées par l'utilisateur c'est pourquoi j'effectue un update de différent champ de la Table entrainement (procedure UpdateBD).

J'alimente ensuite ma table Temps (jointure avec Table entraînement) avec procedure InsertBDTemps

// Ajout entête entraînement

INSERT INTO T_ENTRAINEMENT (entr_vers_chip, entr_no_dossard, entr_nb_lap, entr_date, entr_heure, entr_tps_tot, entr_assiste, entr_tps_assiste, entr_temps_arret_auto, entr_tps_safety, entr_nb_lap_radio, entr_distance, entr_compensation, entr_mode, entr_tps_zone5, entr_tps_zone4, entr_tps_zone3, entr_tps_zone2, entr_tps_zone1, entr_poids,entr_fcrepos, entr_athle_num)VALUES (:ParamVersChip,:ParamDossard,:ParamNbLap,:ParamDate,:ParamHeure,:ParamTempsTot,:ParamAssiste,:ParamTempsAssiste,:ParamArretAuto,:ParamSafety,:ParamRadio,:ParamDistance,:ParamComp,:ParamMode,:ParamZone5,:ParamZone4,:ParamZone3,:ParamZone2,:ParamZone1,:ParamPoids,:ParamFCrepos,:ParamAthlenum);

// Mise à jour base de données
UpdateBD;

UPDATE T_ENTRAINEMENT SET entr_disc_nom=:ParamNomDisc,entr_comment=:ParamComment,entr_compensation=:ParamCompensation,entr_poids=:ParamPoids,entr_fcrepos=:ParamFcRepos 
WHERE entr_num=:ParamNum;

<!-- END TEMPLATE: bbcode_code -->// Ajout des données dans la table Temps
for i := 1 to FList.Count-1 do
begin
ptr_lap := FList.Items[i];
InsertTempsBD;
end; // end for

Insert Into T_TEMPS
(temps_lap, temps_comp,temps_cardio, temps_entr_num, temps_type, temps_no, temps_fc)
values(:ParamTempsLap,:ParamTempsComp,:ParamCardio,:ParamEntrNum,:ParamTempsType,:ParamTempsNo,:ParamTempsFC);

<!-- END TEMPLATE: bbcode_code -->
0
Rejoignez-nous