Bonjour,
est-il possible de désactiver les transactions d'un RecordSet ouvert avec
dbOpenTable afin de faire un grand nombre de mises à jour ? j'ai une base
Access 2000 dont la taille explose systématiquement (lorsque les données
changent effectivement lors de la mise à jour). Pour le moment, je n'ai vu
dans la doc qu'il était seulement possible de désactiver les transactions
pour les requêtes action (UseTransaction à false).
Merci.
-------------------------------------------------------
Patrice Dargenton
patrice.dargenton@free.fr
http://patrice.dargenton.free.fr/index.html
-------------------------------------------------------
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Benoit Compoint
Bonjour,
A partir de l'appel de la méthode Edit, les nouvelles données destinées à l'enregistrement courant sont bufferisées. Il est conseillé de faire appel assez rapidement à la méthode Update afin de vider le buffer. En tout cas il faut appeler la méthode Update avant de passer à un autre enregistrement.
C'est pourquoi je ne comprends pas bien cette question : Est-ce que "un grand nombre de mises à jour" signifie qu'un grand nombre d'enregistrements sont modifiés ?
Si un grand nombre de mises à jour doivent être effectuées dans un même enregistrement qui comporterait un très grand nombre de champs, il est toujours possible d'appeler plusieurs fois les méthodes Edit et Update afin de morceler cette mise à jour "volumineuse" en plusieurs "petites" mises à jour sur un nombre limité de champs.
Benoît Compoint.
"Patrice Dargenton" wrote in message news:3f97964b$0$229$
Bonjour, est-il possible de désactiver les transactions d'un RecordSet ouvert avec dbOpenTable afin de faire un grand nombre de mises à jour ? j'ai une base Access 2000 dont la taille explose systématiquement (lorsque les données changent effectivement lors de la mise à jour). Pour le moment, je n'ai vu dans la doc qu'il était seulement possible de désactiver les transactions pour les requêtes action (UseTransaction à false). Merci. ------------------------------------------------------- Patrice Dargenton
A partir de l'appel de la méthode Edit, les nouvelles données destinées à
l'enregistrement courant sont bufferisées.
Il est conseillé de faire appel assez rapidement à la méthode Update afin de
vider le buffer.
En tout cas il faut appeler la méthode Update avant de passer à un autre
enregistrement.
C'est pourquoi je ne comprends pas bien cette question :
Est-ce que "un grand nombre de mises à jour" signifie qu'un grand nombre
d'enregistrements sont modifiés ?
Si un grand nombre de mises à jour doivent être effectuées dans un même
enregistrement qui comporterait un très grand nombre de champs, il est
toujours possible d'appeler plusieurs fois les méthodes Edit et Update afin
de morceler cette mise à jour "volumineuse" en plusieurs "petites" mises à
jour sur un nombre limité de champs.
Benoît Compoint.
"Patrice Dargenton" <patrice.dargenton@free.fr> wrote in message
news:3f97964b$0$229$626a54ce@news.free.fr...
Bonjour,
est-il possible de désactiver les transactions d'un RecordSet ouvert avec
dbOpenTable afin de faire un grand nombre de mises à jour ? j'ai une base
Access 2000 dont la taille explose systématiquement (lorsque les données
changent effectivement lors de la mise à jour). Pour le moment, je n'ai vu
dans la doc qu'il était seulement possible de désactiver les transactions
pour les requêtes action (UseTransaction à false).
Merci.
-------------------------------------------------------
Patrice Dargenton
patrice.dargenton@free.fr
http://patrice.dargenton.free.fr/index.html
-------------------------------------------------------
A partir de l'appel de la méthode Edit, les nouvelles données destinées à l'enregistrement courant sont bufferisées. Il est conseillé de faire appel assez rapidement à la méthode Update afin de vider le buffer. En tout cas il faut appeler la méthode Update avant de passer à un autre enregistrement.
C'est pourquoi je ne comprends pas bien cette question : Est-ce que "un grand nombre de mises à jour" signifie qu'un grand nombre d'enregistrements sont modifiés ?
Si un grand nombre de mises à jour doivent être effectuées dans un même enregistrement qui comporterait un très grand nombre de champs, il est toujours possible d'appeler plusieurs fois les méthodes Edit et Update afin de morceler cette mise à jour "volumineuse" en plusieurs "petites" mises à jour sur un nombre limité de champs.
Benoît Compoint.
"Patrice Dargenton" wrote in message news:3f97964b$0$229$
Bonjour, est-il possible de désactiver les transactions d'un RecordSet ouvert avec dbOpenTable afin de faire un grand nombre de mises à jour ? j'ai une base Access 2000 dont la taille explose systématiquement (lorsque les données changent effectivement lors de la mise à jour). Pour le moment, je n'ai vu dans la doc qu'il était seulement possible de désactiver les transactions pour les requêtes action (UseTransaction à false). Merci. ------------------------------------------------------- Patrice Dargenton
"Benoit Compoint" a écrit dans le message de news:
Bonjour,
A partir de l'appel de la méthode Edit, les nouvelles données destinées à l'enregistrement courant sont bufferisées. Il est conseillé de faire appel assez rapidement à la méthode Update afin de
vider le buffer. En tout cas il faut appeler la méthode Update avant de passer à un autre enregistrement.
Ca c'est clair, d'ailleurs je ne savait même pas que l'on pouvait passer à un autre enregistrement sans faire de mise à jour !!!
C'est pourquoi je ne comprends pas bien cette question : Est-ce que "un grand nombre de mises à jour" signifie qu'un grand nombre d'enregistrements sont modifiés ?
Oui, tout à fait.
Si un grand nombre de mises à jour doivent être effectuées dans un même enregistrement qui comporterait un très grand nombre de champs, il est toujours possible d'appeler plusieurs fois les méthodes Edit et Update afin
de morceler cette mise à jour "volumineuse" en plusieurs "petites" mises à jour sur un nombre limité de champs.
Il y a une dizaine de champs, ce n'est pas très volumineux, par contre il y a 10 000 enregistrements. Si je pouvais faire une requête action, je pourrais désactiver les transactions, mais il est très rare de pouvoir faire une requête éditable lorsqu'il y a un joint un peu complexe. Je pourrais également ouvrir une requête mise à jour via un QueryDef pour lequel je désactive les transactions, mais j'ai remarqué que la propriété Transactions reste à True pour le RecordSet. De plus, dbOpenTable n'est pas possible avec un QueryDef, or la méthode Seek avec dbOpenTable est 100 fois plus rapide que la méthode FindFirst. En désespoir de cause, j'avais même commencé à refaire entièrement mon programme en construisant une collection de classes VB pour faire une structure de données en RAM !!! (mais c'est compliqué car il faut ensuite sérialiser la structure "à la main" pour faire la persistance...) Je pense que c'est les transactions qui font exploser ma base : je passe de 20 Mo à 500 Mo, puis je redescend à 20 Mo après compactage... mais après 15 minutes de travail, alors que si je pouvait désactiver les transactions, je pourrais faire le tout en 3 minutes. Comment savoir quand faire appel à Update pour vider le buffer ? je pourrais effectivement le faire en 2 ou 3 fois.
"Benoit Compoint" <benoitc@online.microsoft.com> a écrit dans le message de
news:ekEbjRlmDHA.1084@tk2msftngp13.phx.gbl...
Bonjour,
A partir de l'appel de la méthode Edit, les nouvelles données destinées à
l'enregistrement courant sont bufferisées.
Il est conseillé de faire appel assez rapidement à la méthode Update afin
de
vider le buffer.
En tout cas il faut appeler la méthode Update avant de passer à un autre
enregistrement.
Ca c'est clair, d'ailleurs je ne savait même pas que l'on pouvait passer à
un autre enregistrement sans faire de mise à jour !!!
C'est pourquoi je ne comprends pas bien cette question :
Est-ce que "un grand nombre de mises à jour" signifie qu'un grand nombre
d'enregistrements sont modifiés ?
Oui, tout à fait.
Si un grand nombre de mises à jour doivent être effectuées dans un même
enregistrement qui comporterait un très grand nombre de champs, il est
toujours possible d'appeler plusieurs fois les méthodes Edit et Update
afin
de morceler cette mise à jour "volumineuse" en plusieurs "petites" mises à
jour sur un nombre limité de champs.
Il y a une dizaine de champs, ce n'est pas très volumineux, par contre il y
a 10 000 enregistrements. Si je pouvais faire une requête action, je
pourrais désactiver les transactions, mais il est très rare de pouvoir faire
une requête éditable lorsqu'il y a un joint un peu complexe. Je pourrais
également ouvrir une requête mise à jour via un QueryDef pour lequel je
désactive les transactions, mais j'ai remarqué que la propriété Transactions
reste à True pour le RecordSet. De plus, dbOpenTable n'est pas possible avec
un QueryDef, or la méthode Seek avec dbOpenTable est 100 fois plus rapide
que la méthode FindFirst. En désespoir de cause, j'avais même commencé à
refaire entièrement mon programme en construisant une collection de classes
VB pour faire une structure de données en RAM !!! (mais c'est compliqué car
il faut ensuite sérialiser la structure "à la main" pour faire la
persistance...)
Je pense que c'est les transactions qui font exploser ma base : je passe de
20 Mo à 500 Mo, puis je redescend à 20 Mo après compactage... mais après 15
minutes de travail, alors que si je pouvait désactiver les transactions, je
pourrais faire le tout en 3 minutes.
Comment savoir quand faire appel à Update pour vider le buffer ? je pourrais
effectivement le faire en 2 ou 3 fois.
"Patrice Dargenton" <patrice.dargenton@free.fr> wrote in message
news:3f97964b$0$229$626a54ce@news.free.fr...
Bonjour,
est-il possible de désactiver les transactions d'un RecordSet ouvert
avec
dbOpenTable afin de faire un grand nombre de mises à jour ? j'ai une
base
Access 2000 dont la taille explose systématiquement (lorsque les données
changent effectivement lors de la mise à jour). Pour le moment, je n'ai
vu
dans la doc qu'il était seulement possible de désactiver les
transactions
pour les requêtes action (UseTransaction à false).
Merci.
-------------------------------------------------------
Patrice Dargenton
patrice.dargenton@free.fr
http://patrice.dargenton.free.fr/index.html
-------------------------------------------------------
"Benoit Compoint" a écrit dans le message de news:
Bonjour,
A partir de l'appel de la méthode Edit, les nouvelles données destinées à l'enregistrement courant sont bufferisées. Il est conseillé de faire appel assez rapidement à la méthode Update afin de
vider le buffer. En tout cas il faut appeler la méthode Update avant de passer à un autre enregistrement.
Ca c'est clair, d'ailleurs je ne savait même pas que l'on pouvait passer à un autre enregistrement sans faire de mise à jour !!!
C'est pourquoi je ne comprends pas bien cette question : Est-ce que "un grand nombre de mises à jour" signifie qu'un grand nombre d'enregistrements sont modifiés ?
Oui, tout à fait.
Si un grand nombre de mises à jour doivent être effectuées dans un même enregistrement qui comporterait un très grand nombre de champs, il est toujours possible d'appeler plusieurs fois les méthodes Edit et Update afin
de morceler cette mise à jour "volumineuse" en plusieurs "petites" mises à jour sur un nombre limité de champs.
Il y a une dizaine de champs, ce n'est pas très volumineux, par contre il y a 10 000 enregistrements. Si je pouvais faire une requête action, je pourrais désactiver les transactions, mais il est très rare de pouvoir faire une requête éditable lorsqu'il y a un joint un peu complexe. Je pourrais également ouvrir une requête mise à jour via un QueryDef pour lequel je désactive les transactions, mais j'ai remarqué que la propriété Transactions reste à True pour le RecordSet. De plus, dbOpenTable n'est pas possible avec un QueryDef, or la méthode Seek avec dbOpenTable est 100 fois plus rapide que la méthode FindFirst. En désespoir de cause, j'avais même commencé à refaire entièrement mon programme en construisant une collection de classes VB pour faire une structure de données en RAM !!! (mais c'est compliqué car il faut ensuite sérialiser la structure "à la main" pour faire la persistance...) Je pense que c'est les transactions qui font exploser ma base : je passe de 20 Mo à 500 Mo, puis je redescend à 20 Mo après compactage... mais après 15 minutes de travail, alors que si je pouvait désactiver les transactions, je pourrais faire le tout en 3 minutes. Comment savoir quand faire appel à Update pour vider le buffer ? je pourrais effectivement le faire en 2 ou 3 fois.