Vitesse traitement mise jour table

serialv2 Messages postés 41 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 13 août 2012 - 23 déc. 2009 à 13:50
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 - 29 déc. 2009 à 09:15
Salut,
Je vais essayer d'etre le plus clair possible,
Voila j'ai une base de donnee ARTICLE a mettre a jour regulierement.
Pour ce faire je dispose d'un fichier XML D'environ 50milles enregistrements Comme ceci:
<__Article>10000011</__Article>
<___Gencod>7040</___Gencod>

donc apres j'ai ma table qui as environ 100milles enregistrement.
Je lis mon fichier xml ligne par ligne en recuperant la valeur des balises,
JE recherche pour chaque enregistrement "Gencod" de mon fichier XML si il y a un enregistrement dans la base article,pour remettre a jour le champs "ARTICLE",de cette maniere,
For I = 1 To P.Max
If I Mod 10 = 0 Then ' If loop has repeated
' 1000 times.
OpenForms = DoEvents ' Yield to operating system
End If

A = ts.ReadLine
C = ts.ReadLine
A1 = Replace(A, "<__Article>", "")
A2 = Replace(A1, "</__Article>", "")
C1 = Replace(C, "<___Gencod>", "")
C2 = Replace(C1, "</___Gencod>", "")
ts.SkipLine
ts.SkipLine
Sql = "Select Gencod,RefFournisseur From BaseArticle where Gencod='" & Val(C2) & "'"
Adorecordset.Open Sql, adoconnection, adOpenDynamic, adLockBatchOptimistic
'Adorecordset!Libelle = B2
If Adorecordset.EOF = False Then
Adorecordset!RefFournisseur = "000000" & Val(A2)
Adorecordset.Update
maval = maval + 1
End If
Form13.Refresh
Adorecordset.Close
P.Value = P.Value + 1
Label2.Caption = P.Value & " Articles sur " & Count / 5
Label3.Caption = maval & " Article Trouve"

Next I
Ca fonctionne nikel crhome,mais le probleme c'est que ca met un temps fou + ou moins 12heures,J'aimerais savoir si qqun aurai une autre solution qui me permeterai de gagner du temps sur ce procesus qui doit etre effectuer tous les semaines.
MErci

16 réponses

tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
23 déc. 2009 à 14:07
Bonjour,

C'est long d'ouvrir/fermer un recordset (+ update) à chaque itération.

Crée plutôt une table de travail, avec un insert à chaque itération et fermer le recordset à la fin de la boucle. Pour finir, un update global par SQL.


thip
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 déc. 2009 à 14:23
d'ou vient ce XML ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
serialv2 Messages postés 41 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 13 août 2012
23 déc. 2009 à 14:38
Le fichier provient d'une application windev.
j'y avais pensé mais je ne maitrise pas l'update global,peux tu m'en dire plus??
merci
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
23 déc. 2009 à 15:03
ça donne :

UPDATE BaseArticle INNER JOIN travail ON BaseArticle.Gencod travail.Gencod SET BaseArticle.RefFournisseur travail.RefFournisseur

l'update ne se fait que sur les enregistrement liés (remplace ton sql de recherche) et les insert se font rapidement.

Il y a peut-être moyen d'insérer directement le fichioer xml dans une table.
C'est bien là ton idée Renfield ?

thip
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 déc. 2009 à 15:21
Mon idée est de raccourcir la boucle, effectivement.

le traitement de peut il etre fait dans ton application Windev ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
serialv2 Messages postés 41 Date d'inscription jeudi 5 mars 2009 Statut Membre Dernière intervention 13 août 2012
23 déc. 2009 à 16:29
Non malheuresement,L'application est bien faite mais il y a qq imperfection.
J'ai deja fait la table de travail inserer les enregistrement,il ne me reste plus qu'a updater les tables!!!
merci a tous les deux!!
je reviendrais certainenement cers vous rapidement,car je me mets a visual studio 2008
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 déc. 2009 à 20:52
50 000 enregs en XML, faut le tout fou qui a pondu cela, ça restera très long quoi que tu fasses.

ciao...
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
23 déc. 2009 à 21:09
faut PENDRE, voulais-je dire.

ciao...
BruNews, MVP VC++
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
23 déc. 2009 à 22:05
surtout s'il faut traiter toutes ces lignes et pas seulement en extraire quelques une, ciblées

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
29 déc. 2009 à 08:04
Bonjour, je reviens de quelques jours au soleil, et les idées plus claires.
Il m'est arrivé de faire l'insertion de quelques centaines de milliers d'enregistrements, et le plus rapide que j'ai constaté est d'utiliser la fonction d'insertion de fichier texte. On la trouve dans tous les bons sgbd.
Parfois on peut même créer la table au passage. On n'a plus qu'a créer un index pour la jointure et faire l'update global. Et détruire la table temporaire.

thip
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 déc. 2009 à 08:12
tu sembles parles là d'un fichier texte contenant des requetes SQL.

est-ce bien cela ?

ou s'agit il plutôt de fichier de type CSV ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
29 déc. 2009 à 08:24
D'un simple fichier texte contenant les données, en CSV. Ici, il faudrait refaire le fichier, mais globalement on est gagnant en temps. On peut ensuite (si nécessaire) faire des contrôles de masse sur la table résultante plutôt que de travailler sur chaque enregistrement.
Comme par exemple la liste des enregistrements qui n'ont pas été inclus.

thip
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 déc. 2009 à 08:33
Quel type de base attaques tu ? (Access, ...)


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
29 déc. 2009 à 08:42
Aujourd'hui : Access, MySQL, JavaDB.
Avant, c'était Unify et Informix.
Et d'autres de manière anecdotique.

thip
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
29 déc. 2009 à 08:58
tu souhaites intégrer ce CSV dans ces trois bases en même temps ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
29 déc. 2009 à 09:15
Ah, je comprends mieux tes questions. j'étais un peu surpris.
C'est serialv2 qui demandait de l'aide, et je faisais part de mon expérience, si elle pouvait lui être utile.
Moi, non, je n'ai pas de CSV à intégrer en ce moment.
thip
0
Rejoignez-nous