Vitesse traitement mise jour table

Signaler
Messages postés
41
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
13 août 2012
-
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
-
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

Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
d'ou vient ce XML ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
41
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
13 août 2012

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
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
ç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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
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
Messages postés
41
Date d'inscription
jeudi 5 mars 2009
Statut
Membre
Dernière intervention
13 août 2012

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
faut PENDRE, voulais-je dire.

ciao...
BruNews, MVP VC++
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
surtout s'il faut traiter toutes ces lignes et pas seulement en extraire quelques une, ciblées

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
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
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
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
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
Quel type de base attaques tu ? (Access, ...)


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

thip
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
tu souhaites intégrer ce CSV dans ces trois bases en même temps ?

Renfield - Admin CodeS-SourceS - MVP Visual Basic
Messages postés
345
Date d'inscription
mardi 1 juin 2004
Statut
Membre
Dernière intervention
17 octobre 2014
3
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