OVH Cloud OVH Cloud

Compactage de la base de données

5 réponses
Avatar
Lena
Bonjour,

A nouveau moi...une journée devant l'ordi...ça tue...surtout quand il fait
beau dehors ;-)

Dans une procédure, je supprime des enregistrements pour en ajouter
d'autres. Comme il s'agit d'un nombre assez important d'enregistrements,
j'aimerais compacter la base de données après la suppression pour pouvoir
ajouter les nouveaux enregistrements sur une base compactée. Mais je ne
souhaite pas renommer la base. Je voudrais pouvoir le faire très simplement,
de la même manière qu'avec l'outils options compacter une base de données,
mais tout ça à l'intérieur de ma procédure VBA.

Une solution ?

Merci d'avance

5 réponses

Avatar
Jessy SEMPERE
Bonjour

Bon c'est vrai que sur ma page je n'ai pas très bien expliqué...

En fait ce n'est pas Compact() qu'il faut lancer...
Tu dois exécuter la fonction : CompactExe().

Voilà
--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Lena" a écrit dans le message news:

Merci pour ton aide Pierre,

J'ai importé la macro et le module, mais ça ne fonctionne pas. Quand
j'exécute compact(), ça bugue à : Set acApp = GetObject(strDbFile) -
Erreur d'exécution 432 : Nom du fichier ou de la classe introuvable lors
de

l'opération d'Automation.

Comme je suis un peu débutante, ça me parle chinois. Est-ce au niveau des
outils références qu'il faut que je modifie quelque chose.

Merci de m'aider à nouveau.

Meilleures salutations

Lena

"3stone" a écrit dans le message de news:
#$
Bonjour Marie Lena,

Lena
Dans une procédure, je supprime des enregistrements pour en ajouter
d'autres. Comme il s'agit d'un nombre assez important
d'enregistrements,


j'aimerais compacter la base de données après la suppression pour
pouvoir


ajouter les nouveaux enregistrements sur une base compactée. Mais je
ne



souhaite pas renommer la base. Je voudrais pouvoir le faire très
simplement,


de la même manière qu'avec l'outils options compacter une base de
données,


mais tout ça à l'intérieur de ma procédure VBA.




Vas regader ceci :

http://access.jessy.free.fr/htm/DownLoad/CompactDb.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------










Avatar
Jessy SEMPERE
Au fait j'oubliai...
J'ai pas encore mis le rectif sur mon site, le code que tu as
impose de rajouter la référence : "Microsoft Office x.0 Object Library"

Pour éviter cela, remplaces la fonction CompactExe() par :

**************************************************
Function CompactEXE() As Boolean

Dim strDbFile As String

strDbFile = CurrentDb.Name & ".tmp"

If Dir(strDbFile) <> "" Then Kill strDbFile

DBEngine.CreateDatabase strDbFile, dbLangGeneral

DoCmd.CopyObject strDbFile, , acMacro, "mcrCompact"
DoCmd.CopyObject strDbFile, , acModule, "modCompactCurrentDb"

Shell "MSACCESS.EXE """ & strDbFile & """ /x mcrCompact", _
vbMinimizedNoFocus

End Function
**************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Lena" a écrit dans le message news:

Merci pour ton aide Pierre,

J'ai importé la macro et le module, mais ça ne fonctionne pas. Quand
j'exécute compact(), ça bugue à : Set acApp = GetObject(strDbFile) -
Erreur d'exécution 432 : Nom du fichier ou de la classe introuvable lors
de

l'opération d'Automation.

Comme je suis un peu débutante, ça me parle chinois. Est-ce au niveau des
outils références qu'il faut que je modifie quelque chose.

Merci de m'aider à nouveau.

Meilleures salutations

Lena

"3stone" a écrit dans le message de news:
#$
Bonjour Marie Lena,

Lena
Dans une procédure, je supprime des enregistrements pour en ajouter
d'autres. Comme il s'agit d'un nombre assez important
d'enregistrements,


j'aimerais compacter la base de données après la suppression pour
pouvoir


ajouter les nouveaux enregistrements sur une base compactée. Mais je
ne



souhaite pas renommer la base. Je voudrais pouvoir le faire très
simplement,


de la même manière qu'avec l'outils options compacter une base de
données,


mais tout ça à l'intérieur de ma procédure VBA.




Vas regader ceci :

http://access.jessy.free.fr/htm/DownLoad/CompactDb.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------










Avatar
Lena
Hello,

Super, ça marche...

Maintenant une dernière petite question toute conne... Comment je procède
pour appeler la fonction compactEXE() dans ma procédure ?


"Jessy SEMPERE" a écrit dans le message de news:
belofd$64o$
Au fait j'oubliai...
J'ai pas encore mis le rectif sur mon site, le code que tu as
impose de rajouter la référence : "Microsoft Office x.0 Object Library"

Pour éviter cela, remplaces la fonction CompactExe() par :

**************************************************
Function CompactEXE() As Boolean

Dim strDbFile As String

strDbFile = CurrentDb.Name & ".tmp"

If Dir(strDbFile) <> "" Then Kill strDbFile

DBEngine.CreateDatabase strDbFile, dbLangGeneral

DoCmd.CopyObject strDbFile, , acMacro, "mcrCompact"
DoCmd.CopyObject strDbFile, , acModule, "modCompactCurrentDb"

Shell "MSACCESS.EXE """ & strDbFile & """ /x mcrCompact", _
vbMinimizedNoFocus

End Function
**************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Lena" a écrit dans le message news:

Merci pour ton aide Pierre,

J'ai importé la macro et le module, mais ça ne fonctionne pas. Quand
j'exécute compact(), ça bugue à : Set acApp = GetObject(strDbFile) -
Erreur d'exécution 432 : Nom du fichier ou de la classe introuvable lors
de

l'opération d'Automation.

Comme je suis un peu débutante, ça me parle chinois. Est-ce au niveau
des


outils références qu'il faut que je modifie quelque chose.

Merci de m'aider à nouveau.

Meilleures salutations

Lena

"3stone" a écrit dans le message de news:
#$
Bonjour Marie Lena,

Lena
Dans une procédure, je supprime des enregistrements pour en ajouter
d'autres. Comme il s'agit d'un nombre assez important
d'enregistrements,


j'aimerais compacter la base de données après la suppression pour
pouvoir


ajouter les nouveaux enregistrements sur une base compactée. Mais je
ne



souhaite pas renommer la base. Je voudrais pouvoir le faire très
simplement,


de la même manière qu'avec l'outils options compacter une base de
données,


mais tout ça à l'intérieur de ma procédure VBA.




Vas regader ceci :

http://access.jessy.free.fr/htm/DownLoad/CompactDb.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------














Avatar
Jessy SEMPERE
Re,
Super, ça marche...


Ah c'est cool

Maintenant une dernière petite question toute conne... Comment je procède
pour appeler la fonction compactEXE() dans ma procédure ?


Ben normalement tu as importé le module et la macro dans ta base...
Donc si c'est bien le cas, il te suffit juste de l'appeler par son nom
mais attention si tu as du code qui suit l'appel de cette fonction, il
ne s'exécutera pas vu que lors du compactage, la base se ferme.

Donc :

Function TaFonction ()
{tes instructions}
CompactExe
'tout ce que tu mettras après, ne s'exécutera pas...
End Function

Tu peux aussi l'appeler depuis une macro :
Action : ExécuterCode
Argument : CompactExe()

Voilà

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------


"Jessy SEMPERE" a écrit dans le message de
news:

belofd$64o$
Au fait j'oubliai...
J'ai pas encore mis le rectif sur mon site, le code que tu as
impose de rajouter la référence : "Microsoft Office x.0 Object Library"

Pour éviter cela, remplaces la fonction CompactExe() par :

**************************************************
Function CompactEXE() As Boolean

Dim strDbFile As String

strDbFile = CurrentDb.Name & ".tmp"

If Dir(strDbFile) <> "" Then Kill strDbFile

DBEngine.CreateDatabase strDbFile, dbLangGeneral

DoCmd.CopyObject strDbFile, , acMacro, "mcrCompact"
DoCmd.CopyObject strDbFile, , acModule, "modCompactCurrentDb"

Shell "MSACCESS.EXE """ & strDbFile & """ /x mcrCompact", _
vbMinimizedNoFocus

End Function
**************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Lena" a écrit dans le message news:

Merci pour ton aide Pierre,

J'ai importé la macro et le module, mais ça ne fonctionne pas. Quand
j'exécute compact(), ça bugue à : Set acApp GetObject(strDbFile) -
Erreur d'exécution 432 : Nom du fichier ou de la classe introuvable
lors



de
l'opération d'Automation.

Comme je suis un peu débutante, ça me parle chinois. Est-ce au niveau
des


outils références qu'il faut que je modifie quelque chose.

Merci de m'aider à nouveau.

Meilleures salutations

Lena

"3stone" a écrit dans le message de news:
#$
Bonjour Marie Lena,

Lena
Dans une procédure, je supprime des enregistrements pour en
ajouter





d'autres. Comme il s'agit d'un nombre assez important
d'enregistrements,


j'aimerais compacter la base de données après la suppression pour
pouvoir


ajouter les nouveaux enregistrements sur une base compactée. Mais
je





ne
souhaite pas renommer la base. Je voudrais pouvoir le faire très
simplement,


de la même manière qu'avec l'outils options compacter une base de
données,


mais tout ça à l'intérieur de ma procédure VBA.




Vas regader ceci :

http://access.jessy.free.fr/htm/DownLoad/CompactDb.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------


















Avatar
Lena
Mince, ça n'est pas possible que la procédure continue après le compactage ?

Private Sub xxx()
...
...
CompactEXE
...
...
End Sub



"Jessy SEMPERE" a écrit dans le message de news:
belrjv$7u7$
Re,
Super, ça marche...


Ah c'est cool

Maintenant une dernière petite question toute conne... Comment je
procède


pour appeler la fonction compactEXE() dans ma procédure ?


Ben normalement tu as importé le module et la macro dans ta base...
Donc si c'est bien le cas, il te suffit juste de l'appeler par son nom
mais attention si tu as du code qui suit l'appel de cette fonction, il
ne s'exécutera pas vu que lors du compactage, la base se ferme.

Donc :

Function TaFonction ()
{tes instructions}
CompactExe
'tout ce que tu mettras après, ne s'exécutera pas...
End Function

Tu peux aussi l'appeler depuis une macro :
Action : ExécuterCode
Argument : CompactExe()

Voilà

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------


"Jessy SEMPERE" a écrit dans le message de
news:

belofd$64o$
Au fait j'oubliai...
J'ai pas encore mis le rectif sur mon site, le code que tu as
impose de rajouter la référence : "Microsoft Office x.0 Object
Library"




Pour éviter cela, remplaces la fonction CompactExe() par :

**************************************************
Function CompactEXE() As Boolean

Dim strDbFile As String

strDbFile = CurrentDb.Name & ".tmp"

If Dir(strDbFile) <> "" Then Kill strDbFile

DBEngine.CreateDatabase strDbFile, dbLangGeneral

DoCmd.CopyObject strDbFile, , acMacro, "mcrCompact"
DoCmd.CopyObject strDbFile, , acModule, "modCompactCurrentDb"

Shell "MSACCESS.EXE """ & strDbFile & """ /x mcrCompact", _
vbMinimizedNoFocus

End Function
**************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Lena" a écrit dans le message news:

Merci pour ton aide Pierre,

J'ai importé la macro et le module, mais ça ne fonctionne pas. Quand
j'exécute compact(), ça bugue à : Set acApp > GetObject(strDbFile) -
Erreur d'exécution 432 : Nom du fichier ou de la classe introuvable
lors



de
l'opération d'Automation.

Comme je suis un peu débutante, ça me parle chinois. Est-ce au
niveau




des
outils références qu'il faut que je modifie quelque chose.

Merci de m'aider à nouveau.

Meilleures salutations

Lena

"3stone" a écrit dans le message de news:
#$
Bonjour Marie Lena,

Lena
Dans une procédure, je supprime des enregistrements pour en
ajouter





d'autres. Comme il s'agit d'un nombre assez important
d'enregistrements,


j'aimerais compacter la base de données après la suppression
pour






pouvoir
ajouter les nouveaux enregistrements sur une base compactée.
Mais






je
ne
souhaite pas renommer la base. Je voudrais pouvoir le faire très
simplement,


de la même manière qu'avec l'outils options compacter une base
de






données,
mais tout ça à l'intérieur de ma procédure VBA.




Vas regader ceci :

http://access.jessy.free.fr/htm/DownLoad/CompactDb.htm


--
A+
Pierre (3stone) Access MVP
--------------------------------------
Une pour tous, tous pour une ;-)
http://users.skynet.be/mpfa/
--------------------------------------