OVH Cloud OVH Cloud

.edit .update et taille de base

3 réponses
Avatar
Bonjour,

Je cherche désespérément la réponse à ce problème.

En effet, En effet lorsque je mets a jour une table via le code VBA ma base
grossit de manière exponentielle, ci dessous le code utilisé pour test, le
code final comportera des variables.

Dim MaTable As Recordset
Set MaTable = CurrentDb.OpenRecordset("ZTest")
Do Until MaTable.EOF = True
MaTable.Edit
MaTable("ListNb") = "L1"
MaTable.Update
End If
MaTable.MoveNext
Loop
MaTable.Close
End Sub

Descriptif :

Table avec environ 200 000 enregistrements, dans 2 colonnes
La 1ere colonne comprend une adresse email et la seconde que j'update 2
caractères
toto@yahoo.com L1
test@yahoo.com L2
...etc

Les chiffres :

13788ko --> 14 068ko avec SQL pour les 200 000 enregistrements, en mettant
"L1"
13272ko --> 15 280ko avec VBA pour 500 enregistrements updatés seulement
avec la meme chose "L1"
13272ko --> 350 000ko avec VBA pour 200 000 enregistrements updatés avec la
meme chose "L1"

Merci pour vos solutions.

3 réponses

Avatar
Buddy
Salut
est ce que ça fait pareil si tu passe par SQL
du genre
DoCmd.RunSQL "UPDATE ZTest SET ListNb='L1'"

Buddy

a écrit dans le message de news:c8q3qo$7cn$
Bonjour,

Je cherche désespérément la réponse à ce problème.

En effet, En effet lorsque je mets a jour une table via le code VBA ma base
grossit de manière exponentielle, ci dessous le code utilisé pour test, le
code final comportera des variables.

Dim MaTable As Recordset
Set MaTable = CurrentDb.OpenRecordset("ZTest")
Do Until MaTable.EOF = True
MaTable.Edit
MaTable("ListNb") = "L1"
MaTable.Update
End If
MaTable.MoveNext
Loop
MaTable.Close
End Sub

Descriptif :

Table avec environ 200 000 enregistrements, dans 2 colonnes
La 1ere colonne comprend une adresse email et la seconde que j'update 2
caractères
L1
L2
...etc

Les chiffres :

13788ko --> 14 068ko avec SQL pour les 200 000 enregistrements, en mettant
"L1"
13272ko --> 15 280ko avec VBA pour 500 enregistrements updatés seulement
avec la meme chose "L1"
13272ko --> 350 000ko avec VBA pour 200 000 enregistrements updatés avec la
meme chose "L1"

Merci pour vos solutions.















Avatar
J'ai testé : DoCmd.RunSQL "UPDATE ZTest SET ZTest.ToSend_ListNb = ""L1"""
mais la base grossit normalement moins d'1 Mo, l'update sous SQL ne semble
pas poser de problème.Ce qui m'intéresse c'est l'update via VBA (.edit et
.update). Je précise que j'ai testé le code VBA (voir ci dessous 1er
message) et cela sous plusieurs versions d'acess 2000 et XP, l'update par
VBA fait grossir ma base très anormalement.

merci d'avance.


----------------------------------------------------------------------------
-------------------------------------------
"Buddy" a écrit dans le message de
news:
Salut
est ce que ça fait pareil si tu passe par SQL
du genre
DoCmd.RunSQL "UPDATE ZTest SET ListNb='L1'"

Buddy


----------------------------------------------------------------------------
-------------------------------------------

a écrit dans le message de
news:c8q3qo$7cn$

Bonjour,

Je cherche désespérément la réponse à ce problème.

En effet, En effet lorsque je mets a jour une table via le code VBA ma
base


grossit de manière exponentielle, ci dessous le code utilisé pour test,
le


code final comportera des variables.

Dim MaTable As Recordset
Set MaTable = CurrentDb.OpenRecordset("ZTest")
Do Until MaTable.EOF = True
MaTable.Edit
MaTable("ListNb") = "L1"
MaTable.Update
End If
MaTable.MoveNext
Loop
MaTable.Close
End Sub

Descriptif :

Table avec environ 200 000 enregistrements, dans 2 colonnes
La 1ere colonne comprend une adresse email et la seconde que j'update 2
caractères
L1
L2
...etc

Les chiffres :

13788ko --> 14 068ko avec SQL pour les 200 000 enregistrements, en
mettant


"L1"
13272ko --> 15 280ko avec VBA pour 500 enregistrements updatés
seulement


avec la meme chose "L1"
13272ko --> 350 000ko avec VBA pour 200 000 enregistrements updatés avec
la


meme chose "L1"

Merci pour vos solutions.



















Avatar
Daniel Carollo
Bonjour agpub!

Lors de vos tests, avez-vous fait les essais sur de bases identiques? (par
opposition a une seule base dans laquelle vous auriez fait les essais les
uns apres les autres), c'est a dire trois copies d'une meme base.

Je n'ai pas fait vos essais, mais je dirais qu'a vue de nez, il n'y a aucune
raison de ne pas obtenir des resultats aleatoires. L'augmentation de la
taille de la base depend du nombre de pages que Jet doit creer pour
satisfaire ses besoins (internes) en espace de travail. Ces besoins
dependent de l'oragnisation du stockage des donnes, de leur ordre, et de
l'ordre des mises a jour.

La grande difference obtenue entre votre premiere manip et la derniere
s'explique aisement par le fait qu'en passant par SQL (donc une requete), il
n'y a qu'un seul changement de 200 000 enregistrements, alors qu'en
utilisant votre boucle on fait 200 000 changements d'un enregistrement, ce
qui n'est pas du tout la meme chose.

En regle generale, les changements d'enregistrements en VBA doivent se
limiter a quelques enregistrements (a vue de nez, je dirais une dizaine) et
les traitements de donnees (sur de portions de tables consequents) doivent
utiliser des requetes. Une moulinette en VBA pour balayer une table est une
aberration.


--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

wrote in message
news:c8r8pl$rkb$

J'ai testé : DoCmd.RunSQL "UPDATE ZTest SET ZTest.ToSend_ListNb = ""L1"""
mais la base grossit normalement moins d'1 Mo, l'update sous SQL ne semble
pas poser de problème.Ce qui m'intéresse c'est l'update via VBA (.edit et
.update). Je précise que j'ai testé le code VBA (voir ci dessous 1er
message) et cela sous plusieurs versions d'acess 2000 et XP, l'update par
VBA fait grossir ma base très anormalement.

merci d'avance.