OVH Cloud OVH Cloud

Table vide qui devient impossible à remplir

10 réponses
Avatar
Archives
Bonsoir,

J'ai un programme sous Access VB qui passe son temps à remplir puis à vider
une table sous Access 2002. Au bout d'un moment apparaît le message d'erreur
"Argument invalide". J'arrête le programme et essaie de remplir manuellement
la table: elle est vide et il est impossible d'y entrer la moindre ligne.
Toujours le même message d'erreur.

La seule solution fiable consiste à compacter la base et on peut ensuite
entrer à nouveau des données dans la table.

Avez vous une solution pour soit empècher que celà se produise soit
permettre au programme de "réparer" la table pour pouvoir continuer ensuite.

NB: la table est assez simple, sans contrôle d'entrée mais avec 5 index
indépendants non unique (pas de clé primaire).

Merci de votre aide

10 réponses

Avatar
Pierre CFI [mvp]
bonjour
il est comment c code ?

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
Access http://users.skynet.be/mpfa/

"Archives" a écrit dans le message de news: 43639e9f$0$1730$
Bonsoir,

J'ai un programme sous Access VB qui passe son temps à remplir puis à vider une table sous Access 2002. Au bout d'un moment
apparaît le message d'erreur "Argument invalide". J'arrête le programme et essaie de remplir manuellement la table: elle est vide
et il est impossible d'y entrer la moindre ligne. Toujours le même message d'erreur.

La seule solution fiable consiste à compacter la base et on peut ensuite entrer à nouveau des données dans la table.

Avez vous une solution pour soit empècher que celà se produise soit permettre au programme de "réparer" la table pour pouvoir
continuer ensuite.

NB: la table est assez simple, sans contrôle d'entrée mais avec 5 index indépendants non unique (pas de clé primaire).

Merci de votre aide



Avatar
Archives
il est comment c code ?


La ligne qui bloque sert juste à exécuter une requête ajout. Elle ne bloque
qu'après plusieurs dizaines de milliers de passage.
En fait ce n'est pas la requête elle même qui coince car lorsque j'arrête le
programme je ne peux pas non plus ajouter d'enregistrement en ouvrant
simplement la table.

La table est vide à ce moment là et quand j'essaie d'ajouter un
enregistrement à la table, Access me répond que l'argument est incorrect.
Quel argument ? Mystère.

Avatar
Raymond [mvp]
Bonjour.

un compactage à la fermeture supprimera immédiatement le problème.
maintenant si tu fais "plusieurs dizaines de milliers de passage" sans
fermer la base tu auras toujours le même problème. il n'y a pas de mystère,
tu arrives tout simplement à la capacité maximum de la base access.
supprimer les enregistrements ne les suppriment pas physiquement, il n'y a
que le compactage qui le fait.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de news:
4363ae83$0$1749$
il est comment c code ?


La ligne qui bloque sert juste à exécuter une requête ajout. Elle ne
bloque qu'après plusieurs dizaines de milliers de passage.
En fait ce n'est pas la requête elle même qui coince car lorsque j'arrête
le programme je ne peux pas non plus ajouter d'enregistrement en ouvrant
simplement la table.

La table est vide à ce moment là et quand j'essaie d'ajouter un
enregistrement à la table, Access me répond que l'argument est incorrect.
Quel argument ? Mystère.







Avatar
Archives

un compactage à la fermeture supprimera immédiatement le problème.
maintenant si tu fais "plusieurs dizaines de milliers de passage" sans
fermer la base tu auras toujours le même problème. il n'y a pas de
mystère, tu arrives tout simplement à la capacité maximum de la base
access. supprimer les enregistrements ne les suppriment pas physiquement,
il n'y a que le compactage qui le fait.



Effectivement, au moment iù le programme s'arrète, le fichier .mdb pèse 2
Go. Après compactage il ne fait plus que 2 Mo.

Face à unt telle erreur, peut-on alors compacter la table par programme puis
relancer le programme, en d'autres termes comment ne pas interrompre
l'exécution du programme ?

Avatar
Raymond [mvp]
dans ton cas précis, la table qui passe de 2Mo à 2Go te laisse largement de
temps pour ne pas écrire de code spécial et laisser faire le compactage
normalement en sortie de base. prévois un compactage automatique sur ta base
principale du serveur lorsque tu fais tes sauvegardes tous les soirs ou
toutes les nuits.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de news:
4364c129$0$17219$

un compactage à la fermeture supprimera immédiatement le problème.
maintenant si tu fais "plusieurs dizaines de milliers de passage" sans
fermer la base tu auras toujours le même problème. il n'y a pas de
mystère, tu arrives tout simplement à la capacité maximum de la base
access. supprimer les enregistrements ne les suppriment pas physiquement,
il n'y a que le compactage qui le fait.



Effectivement, au moment iù le programme s'arrète, le fichier .mdb pèse 2
Go. Après compactage il ne fait plus que 2 Mo.

Face à unt telle erreur, peut-on alors compacter la table par programme
puis relancer le programme, en d'autres termes comment ne pas interrompre
l'exécution du programme ?




Avatar
Archives
dans ton cas précis, la table qui passe de 2Mo à 2Go te laisse largement
de temps pour ne pas écrire de code spécial et laisser faire le compactage
normalement en sortie de base. prévois un compactage automatique sur ta
base principale du serveur lorsque tu fais tes sauvegardes tous les soirs
ou toutes les nuits.



C'est une base qui passe son temps à chercher (et qui trouve de temps en
temps) de manière autonome sans que quiconque ne la consulte.

En pratique, je lance le programme mais au bout, disons d'une quinzaine
d'heures, le programme s'est arrété. Je ne suis pas là pour le surveiller et
souhaiterais qu'il se réamorce tout seul sans que j'aie à intervenir.

Avatar
Bonjour,
As tu essayé de remplir un fichier texte au lieu de remplir une table ?
Ainsi, au lieu de vider la table, tu pourras écraser le fichier texte existant (attaché ou non)

Sinon, les ajouts/suppression de données dans une table feront toujours grossir ta base, à moins
de jongler
d'une base à l'autre toutes les x heures, la seconde compactant la première lors de son
ouverture et vice-versa.

--
Arnaud
-----------------------------------
http://users.skynet.be/mpfa/
-----------------------------------


"Archives" a écrit dans le message de news:
4364d9a2$0$17234$
|> dans ton cas précis, la table qui passe de 2Mo à 2Go te laisse largement
| > de temps pour ne pas écrire de code spécial et laisser faire le compactage
| > normalement en sortie de base. prévois un compactage automatique sur ta
| > base principale du serveur lorsque tu fais tes sauvegardes tous les soirs
| > ou toutes les nuits.
| >
|
| C'est une base qui passe son temps à chercher (et qui trouve de temps en
| temps) de manière autonome sans que quiconque ne la consulte.
|
| En pratique, je lance le programme mais au bout, disons d'une quinzaine
| d'heures, le programme s'est arrété. Je ne suis pas là pour le surveiller et
| souhaiterais qu'il se réamorce tout seul sans que j'aie à intervenir.
|
|
Avatar
Raymond [mvp]
dans ce cas tu peux inclure une procédure de compactage que tu trouveras sur
le site de jessy:
http://access.jessy.free.fr/htm/DownLoad/CompactDb.htm

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Archives" a écrit dans le message de news:
4364d9a2$0$17234$
dans ton cas précis, la table qui passe de 2Mo à 2Go te laisse largement
de temps pour ne pas écrire de code spécial et laisser faire le
compactage normalement en sortie de base. prévois un compactage
automatique sur ta base principale du serveur lorsque tu fais tes
sauvegardes tous les soirs ou toutes les nuits.



C'est une base qui passe son temps à chercher (et qui trouve de temps en
temps) de manière autonome sans que quiconque ne la consulte.

En pratique, je lance le programme mais au bout, disons d'une quinzaine
d'heures, le programme s'est arrété. Je ne suis pas là pour le surveiller
et souhaiterais qu'il se réamorce tout seul sans que j'aie à intervenir.




Avatar
Raymond [mvp]
Salut Arnaud.

ça faisait longtemps qu'on ne s'était vu.

--
@+
Raymond Access MVP
http://OfficeSystem.Access.free.fr/
http://OfficeSystem.Access.free.fr/runtime/
http://users.skynet.be/mpfa/ pour débuter sur le forum


<Anor> a écrit dans le message de news:

Avatar
Archives
"Raymond [mvp]" a écrit dans le message de
news:
dans ce cas tu peux inclure une procédure de compactage que tu trouveras
sur le site de jessy:
http://access.jessy.free.fr/htm/DownLoad/CompactDb.htm



Merci Raymond, c'est exactement ce dont j'avais besoin.