Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Sauvegarde d'une base

15 réponses
Avatar
Francis
Bonjour,

Je reviens sur une question déjà posée (15/03/08), et que je n'avais
pas réussi à résoudre. J'ai à nouveau tenté le coup d'appliquer la
méthode de Jessy
http://access.fr.free.fr/download.php?lng=fr&pg=120
et ça ne marche toujours pas: la procédure bloque sur l'instruction:
DBEngine.CompactDataBase strDbFile, strDbFileOld
Par contre, avec l'exemple téléchargé db1.mdb, ça marche au poil.
Si je remplace les variables strDbFile et StrDbFileOld par les chemins
et noms de mon fichier, j'ai alors un message d'erreur d'exécution 3356
qui me dit que j'ai essayé d'ouvrir une base de données déjà ouverte en
mode exclusif etc...

Alors, si qqun pouvait me dire ce qui ne va pas dans ma démarche, ça me
rendrait bien service,
Merci et @+

Francis

--
Francis
fhgc@wanadoudou.fr
THEOREME de la loi de MURPHY
Tout corps plongé dans une baignoire...déclenche systématiquement la
sonnerie du téléphone !

10 réponses

1 2
Avatar
3stone
Salut,

"Francis"
| Je reviens sur une question déjà posée (15/03/08), et que je n'avais
| pas réussi à résoudre. J'ai à nouveau tenté le coup d'appliquer la
| méthode de Jessy
| http://access.fr.free.fr/download.php?lng=fr&pg0
| et ça ne marche toujours pas: la procédure bloque sur l'instruction:
| DBEngine.CompactDataBase strDbFile, strDbFileOld


Vérifie si tu as bien renseigné la référence à "Microsoft DAO 3.6 Object Libray"
et qu'elle se situe bien avant (plus haut) que ADO, si utilisé...


| Si je remplace les variables strDbFile et StrDbFileOld par les chemins
| et noms de mon fichier, j'ai alors un message d'erreur d'exécution 3356
| qui me dit que j'ai essayé d'ouvrir une base de données déjà ouverte en
| mode exclusif etc...

Pourquoi remplacer ces variables ? Le code de Jessy fonctionne tel quel,
si tu souhaites le modifier, il faut le comprendre ;-)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Francis
Le 07/07/2008, 3stone a supposé :
Salut,

"Francis"
Je reviens sur une question déjà posée (15/03/08), et que je n'avais
pas réussi à résoudre. J'ai à nouveau tenté le coup d'appliquer la
méthode de Jessy
http://access.fr.free.fr/download.php?lng=fr&pg0
et ça ne marche toujours pas: la procédure bloque sur l'instruction:
DBEngine.CompactDataBase strDbFile, strDbFileOld




Vérifie si tu as bien renseigné la référence à "Microsoft DAO 3.6 Object
Libray" et qu'elle se situe bien avant (plus haut) que ADO, si utilisé...



Bonsoir Pierre,

Merci de te pencher à nouveau sur mon pb. J'espère que, cette fois, on
mettra le doigt sur ce qui ne va pas.
Oui, cette référence DAO est bien activée? La référence ADO, elle, ne
l'est pas.


Si je remplace les variables strDbFile et StrDbFileOld par les chemins
et noms de mon fichier, j'ai alors un message d'erreur d'exécution 3356
qui me dit que j'ai essayé d'ouvrir une base de données déjà ouverte en
mode exclusif etc...



Pourquoi remplacer ces variables ? Le code de Jessy fonctionne tel quel,
si tu souhaites le modifier, il faut le comprendre ;-)



Pour ce qui est de comprendre ce code, c'est encore à ma portée...
J'ai simplement fait ce remplacement pour essayer de faire avancer un
peu le schmilblic lol
Dans les deux cas, c'est à la même instruction que ça bloque, mais
l'info est un peu plus riche dans le deuxième cas.

J'ai aussi testé la méthode avec l'API que tu avais mentionnée. Elle va
presque jusqu'au bout, mais s'arre^te avec un message d'erreur
'7874'"Impossible de trouver l'objet '-1' "

Si ça t'inspire, je ne suis pas plus attaché à une approche qu'à une
autre, dans la mesure où je n'y connais pas grand chose en la matière
;-)

@+

--
Francis

LOI DE BOOB
Quel que soit l'objet, il sera trouvé dans le dernier endroit dans
lequel on l'aura cherché.
Avatar
Michel_D
Bonjour,

"Francis" a écrit dans le message de news:
Bonjour,

Je reviens sur une question déjà posée (15/03/08), et que je n'avais
pas réussi à résoudre. J'ai à nouveau tenté le coup d'appliquer la
méthode de Jessy
http://access.fr.free.fr/download.php?lng=fr&pg0
et ça ne marche toujours pas: la procédure bloque sur l'instruction:
DBEngine.CompactDataBase strDbFile, strDbFileOld
Par contre, avec l'exemple téléchargé db1.mdb, ça marche au poil.



Ok.

Si je remplace les variables strDbFile et StrDbFileOld par les chemins
et noms de mon fichier, j'ai alors un message d'erreur d'exécution 3356
qui me dit que j'ai essayé d'ouvrir une base de données déjà ouverte en
mode exclusif etc...



Donc c'est assez simple, ce sont au niveau des valeurs de tes variables
que cela coince, donne les valeurs de tes 2 variables pour voir si tu as
compris le principe.
Avatar
Francis
Michel_D a couché sur son écran :
Bonjour,

"Francis" a écrit dans le message de
news:
Bonjour,

Je reviens sur une question déjà posée (15/03/08), et que je n'avais
pas réussi à résoudre. J'ai à nouveau tenté le coup d'appliquer la
méthode de Jessy
http://access.fr.free.fr/download.php?lng=fr&pg0
et ça ne marche toujours pas: la procédure bloque sur l'instruction:
DBEngine.CompactDataBase strDbFile, strDbFileOld
Par contre, avec l'exemple téléchargé db1.mdb, ça marche au poil.



Ok.

Si je remplace les variables strDbFile et StrDbFileOld par les chemins
et noms de mon fichier, j'ai alors un message d'erreur d'exécution 3356
qui me dit que j'ai essayé d'ouvrir une base de données déjà ouverte en
mode exclusif etc...



Donc c'est assez simple, ce sont au niveau des valeurs de tes variables
que cela coince, donne les valeurs de tes 2 variables pour voir si tu as
compris le principe.



Salut Michel,

Sympa de te pencher sur mon pb.

Voici le code récupéré de Jessy et qui me pose pb
========== Option Compare Database
Option Explicit

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

Public Function Compact()
Dim acApp As Access.Application
Dim strDbPath As String, strDbFile As String
Dim strDbFileOld As String

strDbPath = CurrentDb.Name
strDbFile = Left(strDbPath, Len(strDbPath) - 4)
strDbFileOld = Left(strDbFile, Len(strDbFile) - 4) & ".old"

Set acApp = GetObject(strDbFile)

With acApp
.SysCmd acSysCmdSetStatus, "Compactage en cours..."
.CloseCurrentDatabase
DBEngine.CompactDatabase strDbFile, strDbFileOld
' DBEngine.CompactDatabase "E:Mes DocumentsANCRE 2008ANCRE
060708.mdb", "E:Mes DocumentsANCRE 2008ANCRE 060708.mdb.old"
' Ça, c'est mon instruction pour bipasser celle d'origine.
Kill strDbFile
Name strDbFileOld As strDbFile
.OpenCurrentDatabase strDbFile
.SysCmd acSysCmdClearStatus
End With
Application.Quit
End Function
========== En plus de ça, on charge la maco mcrCompact, dont la seule instruction
est de lancer Compact()
Depuis hier soir, j'ai tenté beaucoup de choses, mais en vain. A un
moment, on m'a dit que la fonction GetObject n'était pas définie.
Alors, j'ai créé la PublicFunction GetObject(), et, depuis, je récupère
dans les deux cas (instr d'origine ou la mienne)le même message qui me
dit que j'ai "essayé d'ouvrir une base de données déjà ouverte en mode
exclusif par l'utilisateur 'Admin' sur la machine 'FC'. Recommencez
lorsque la base de données sera disponible".

Comprenne qui pourra... Moi, ça me passe au dessus de la tête.
J'espère que ça t'inspirera davantage que moi :-)
@+

Francis

--
Francis

LOI DE LA GRAVITE SÉLECTIVE
En tout point de la surface du globe, toute biscotte tombera côté
beurre.
Avatar
Francis
Michel_D a écrit :
Bonjour,

"Francis" a écrit dans le message de
news:
Bonjour,

Je reviens sur une question déjà posée (15/03/08), et que je n'avais
pas réussi à résoudre. J'ai à nouveau tenté le coup d'appliquer la
méthode de Jessy
http://access.fr.free.fr/download.php?lng=fr&pg0
et ça ne marche toujours pas: la procédure bloque sur l'instruction:
DBEngine.CompactDataBase strDbFile, strDbFileOld
Par contre, avec l'exemple téléchargé db1.mdb, ça marche au poil.



Ok.

Si je remplace les variables strDbFile et StrDbFileOld par les chemins
et noms de mon fichier, j'ai alors un message d'erreur d'exécution 3356
qui me dit que j'ai essayé d'ouvrir une base de données déjà ouverte en
mode exclusif etc...



Donc c'est assez simple, ce sont au niveau des valeurs de tes variables
que cela coince, donne les valeurs de tes 2 variables pour voir si tu as
compris le principe.



J'ajoute à ma réponde précédente que quand ça bloque sur:
DBEngine.CompactDataBase strDbFile, strDbFileOld
je suis obligé d'utiliser Ctrl-Alt-Sup pour tuer Access.
La base ANCRE xx.mdb.tmp est bien créée, mais elle est vide. Par
ailleurs, le fichier ANCRE xx.ldb existe.
Voilà, juste pour faire part de tout ce que j'ai pu constater

--
Francis

CINQUIÈME LOI DE YOUNG
Se tromper est humain, mais pour vraiment mettre le bordel, il faut y
ajouter un ordinateur.
Avatar
3stone
Salut,

"Francis"
[...]
| La base ANCRE xx.mdb.tmp est bien créée, mais elle est vide. Par
| ailleurs, le fichier ANCRE xx.ldb existe.


et si tu remplace le nom "Ancre xx.mdb" par "Ancre_xx.mdb" ?

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Francis
Le 08/07/2008, 3stone a supposé :
Salut,

"Francis"
[...]
La base ANCRE xx.mdb.tmp est bien créée, mais elle est vide. Par
ailleurs, le fichier ANCRE xx.ldb existe.




et si tu remplace le nom "Ancre xx.mdb" par "Ancre_xx.mdb" ?



Bjr Pierre,
Non, hélas, ça bloque toujours au même endroit.
Et ce message avec " ...d'ouvrir une base de données déjà ouverte en
mode exclusif par l'utilisateur 'Admin'...", ça ne t'inspire pas un
truc à faire au niveau des options ou des références ?
@+

--
Francis

CINQUIÈME LOI DE YOUNG
Se tromper est humain, mais pour vraiment mettre le bordel, il faut y
ajouter un ordinateur.
Avatar
Michel_D
re,

"Francis" a écrit dans le message de news:
Michel_D a couché sur son écran :
> Bonjour,
>
> "Francis" a écrit dans le message de
> news:
>> Bonjour,
>>
>> Je reviens sur une question déjà posée (15/03/08), et que je n'avais
>> pas réussi à résoudre. J'ai à nouveau tenté le coup d'appliquer la
>> méthode de Jessy
>> http://access.fr.free.fr/download.php?lng=fr&pg0
>> et ça ne marche toujours pas: la procédure bloque sur l'instruction:
>> DBEngine.CompactDataBase strDbFile, strDbFileOld
>> Par contre, avec l'exemple téléchargé db1.mdb, ça marche au poil.
>
> Ok.
>
>> Si je remplace les variables strDbFile et StrDbFileOld par les chemins
>> et noms de mon fichier, j'ai alors un message d'erreur d'exécution 3356
>> qui me dit que j'ai essayé d'ouvrir une base de données déjà ouverte en
>> mode exclusif etc...
>
> Donc c'est assez simple, ce sont au niveau des valeurs de tes variables
> que cela coince, donne les valeurs de tes 2 variables pour voir si tu as
> compris le principe.

Salut Michel,

Sympa de te pencher sur mon pb.

Voici le code récupéré de Jessy et qui me pose pb
========== > Option Compare Database
Option Explicit

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

Public Function Compact()
Dim acApp As Access.Application
Dim strDbPath As String, strDbFile As String
Dim strDbFileOld As String

strDbPath = CurrentDb.Name
strDbFile = Left(strDbPath, Len(strDbPath) - 4)
strDbFileOld = Left(strDbFile, Len(strDbFile) - 4) & ".old"

Set acApp = GetObject(strDbFile)

With acApp
.SysCmd acSysCmdSetStatus, "Compactage en cours..."
.CloseCurrentDatabase
DBEngine.CompactDatabase strDbFile, strDbFileOld
' DBEngine.CompactDatabase "E:Mes DocumentsANCRE 2008ANCRE
060708.mdb", "E:Mes DocumentsANCRE 2008ANCRE 060708.mdb.old"
' Ça, c'est mon instruction pour bipasser celle d'origine.
Kill strDbFile
Name strDbFileOld As strDbFile
.OpenCurrentDatabase strDbFile
.SysCmd acSysCmdClearStatus
End With
Application.Quit
End Function
========== > En plus de ça, on charge la maco mcrCompact, dont la seule instruction
est de lancer Compact()
Depuis hier soir, j'ai tenté beaucoup de choses, mais en vain. A un
moment, on m'a dit que la fonction GetObject n'était pas définie.
Alors, j'ai créé la PublicFunction GetObject(), et, depuis, je récupère
dans les deux cas (instr d'origine ou la mienne)le même message qui me
dit que j'ai "essayé d'ouvrir une base de données déjà ouverte en mode
exclusif par l'utilisateur 'Admin' sur la machine 'FC'. Recommencez
lorsque la base de données sera disponible".

Comprenne qui pourra... Moi, ça me passe au dessus de la tête.
J'espère que ça t'inspirera davantage que moi :-)



Avant toute chose un extrait issu de l'aide :

DBEngine.CompactDatabase olddb, newdb, locale, options, password
...
Vous devez fermer la base de données olddb pour la compacter.
En environnement multi-utilisateur, aucun utilisateur ne peut
ouvrir la base de données olddb durant son compactage.
Si la base de données olddb n'est pas fermée ou n'est pas
utilisable en mode exclusif, une erreur se produit.

PS:Je viens de tester sur une base il n'y a aucun problème dés l'instant
que la base que tu veux compacter ne CONTIENT pas le code destiné
au compactage sinon à voir la remarque de Pierre.
Avatar
Francis
Michel_D a couché sur son écran :
re,

"Francis" a écrit dans le message de
news:
Michel_D a couché sur son écran :
Bonjour,

"Francis" a écrit dans le message de
news:
Bonjour,

Je reviens sur une question déjà posée (15/03/08), et que je n'avais
pas réussi à résoudre. J'ai à nouveau tenté le coup d'appliquer la
méthode de Jessy
http://access.fr.free.fr/download.php?lng=fr&pg0
et ça ne marche toujours pas: la procédure bloque sur l'instruction:
DBEngine.CompactDataBase strDbFile, strDbFileOld
Par contre, avec l'exemple téléchargé db1.mdb, ça marche au poil.



Ok.

Si je remplace les variables strDbFile et StrDbFileOld par les chemins
et noms de mon fichier, j'ai alors un message d'erreur d'exécution 3356
qui me dit que j'ai essayé d'ouvrir une base de données déjà ouverte en
mode exclusif etc...



Donc c'est assez simple, ce sont au niveau des valeurs de tes variables
que cela coince, donne les valeurs de tes 2 variables pour voir si tu as
compris le principe.



Salut Michel,

Sympa de te pencher sur mon pb.

Voici le code récupéré de Jessy et qui me pose pb
========== >> Option Compare Database
Option Explicit

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

Public Function Compact()
Dim acApp As Access.Application
Dim strDbPath As String, strDbFile As String
Dim strDbFileOld As String

strDbPath = CurrentDb.Name
strDbFile = Left(strDbPath, Len(strDbPath) - 4)
strDbFileOld = Left(strDbFile, Len(strDbFile) - 4) & ".old"

Set acApp = GetObject(strDbFile)

With acApp
.SysCmd acSysCmdSetStatus, "Compactage en cours..."
.CloseCurrentDatabase
DBEngine.CompactDatabase strDbFile, strDbFileOld
' DBEngine.CompactDatabase "E:Mes DocumentsANCRE 2008ANCRE
060708.mdb", "E:Mes DocumentsANCRE 2008ANCRE 060708.mdb.old"
' Ça, c'est mon instruction pour bipasser celle d'origine.
Kill strDbFile
Name strDbFileOld As strDbFile
.OpenCurrentDatabase strDbFile
.SysCmd acSysCmdClearStatus
End With
Application.Quit
End Function
========== >> En plus de ça, on charge la maco mcrCompact, dont la seule instruction
est de lancer Compact()
Depuis hier soir, j'ai tenté beaucoup de choses, mais en vain. A un
moment, on m'a dit que la fonction GetObject n'était pas définie.
Alors, j'ai créé la PublicFunction GetObject(), et, depuis, je récupère
dans les deux cas (instr d'origine ou la mienne)le même message qui me
dit que j'ai "essayé d'ouvrir une base de données déjà ouverte en mode
exclusif par l'utilisateur 'Admin' sur la machine 'FC'. Recommencez
lorsque la base de données sera disponible".

Comprenne qui pourra... Moi, ça me passe au dessus de la tête.
J'espère que ça t'inspirera davantage que moi :-)






Bonjour Michel,
Avant toute chose un extrait issu de l'aide :

DBEngine.CompactDatabase olddb, newdb, locale, options, password
...
Vous devez fermer la base de données olddb pour la compacter.


Je suppose que c'est l'instruction
If Dir(strDbFile) <> "" Then Kill strDbFile
qui s'en charge

En environnement multi-utilisateur, aucun utilisateur ne peut
ouvrir la base de données olddb durant son compactage.
Si la base de données olddb n'est pas fermée ou n'est pas
utilisable en mode exclusif, une erreur se produit.


Je suis seul utilisateur de la base, et le résultat est le même que je
mette le mode exclusif ou partagé dans les options/avancé

PS:Je viens de tester sur une base il n'y a aucun problème dés l'instant
que la base que tu veux compacter ne CONTIENT pas le code destiné
au compactage sinon à voir la remarque de Pierre.


Je pense, moi aussi, que la cause tourne autour de qquechose de ce
genre.
Mais si j'ai bien tout compris, le code développé par Jessy tient
compte de cette contrainte pour permettre précisément de
compacter/sauvegarder la base pendant qu'elle est ouverte.
Comme il dit de faire, j'ai importé la macro "mcrCompact" et le module
"modCompactCurrentDb" dans ma base et j'ai créé un bouton pour lancer
la la fonction "CompactEXE()" pour effectuer le compactage.
Ou bien, alors, je suis complètement à côté de la plaque... :-(

Là, je dois m'absenter pendant qques heures, mais je sens que ce sera
mon os à ronger pour la soirée.
Et merci d'avance pour toutes vos propositions à venir

--
Francis

PRINCIPE DE RUBY
La probabilité de rencontrer une personne de ta connaissance augmente
quand tu es avec quelqu'un avec qui tu ne veux pas être vu.
Avatar
Michel_D
"Francis" a écrit dans le message de news:
Michel_D a couché sur son écran :
> re,
>
> "Francis" a écrit dans le message de
> news:
>> Michel_D a couché sur son écran :
>>> Bonjour,
>>>
>>> "Francis" a écrit dans le message de
>>> news:
>>>> Bonjour,
>>>>
>>>> Je reviens sur une question déjà posée (15/03/08), et que je n'avais
>>>> pas réussi à résoudre. J'ai à nouveau tenté le coup d'appliquer la
>>>> méthode de Jessy
>>>> http://access.fr.free.fr/download.php?lng=fr&pg0
>>>> et ça ne marche toujours pas: la procédure bloque sur l'instruction:
>>>> DBEngine.CompactDataBase strDbFile, strDbFileOld
>>>> Par contre, avec l'exemple téléchargé db1.mdb, ça marche au poil.
>>>
>>> Ok.
>>>
>>>> Si je remplace les variables strDbFile et StrDbFileOld par les chemins
>>>> et noms de mon fichier, j'ai alors un message d'erreur d'exécution 3356
>>>> qui me dit que j'ai essayé d'ouvrir une base de données déjà ouverte en
>>>> mode exclusif etc...
>>>
>>> Donc c'est assez simple, ce sont au niveau des valeurs de tes variables
>>> que cela coince, donne les valeurs de tes 2 variables pour voir si tu as
>>> compris le principe.
>>
>> Salut Michel,
>>
>> Sympa de te pencher sur mon pb.
>>
>> Voici le code récupéré de Jessy et qui me pose pb
>> ========== > >> Option Compare Database
>> Option Explicit
>>
>> 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
>>
>> Public Function Compact()
>> Dim acApp As Access.Application
>> Dim strDbPath As String, strDbFile As String
>> Dim strDbFileOld As String
>>
>> strDbPath = CurrentDb.Name
>> strDbFile = Left(strDbPath, Len(strDbPath) - 4)
>> strDbFileOld = Left(strDbFile, Len(strDbFile) - 4) & ".old"
>>
>> Set acApp = GetObject(strDbFile)
>>
>> With acApp
>> .SysCmd acSysCmdSetStatus, "Compactage en cours..."
>> .CloseCurrentDatabase
>> DBEngine.CompactDatabase strDbFile, strDbFileOld
>> ' DBEngine.CompactDatabase "E:Mes DocumentsANCRE 2008ANCRE
>> 060708.mdb", "E:Mes DocumentsANCRE 2008ANCRE 060708.mdb.old"
>> ' Ça, c'est mon instruction pour bipasser celle d'origine.
>> Kill strDbFile
>> Name strDbFileOld As strDbFile
>> .OpenCurrentDatabase strDbFile
>> .SysCmd acSysCmdClearStatus
>> End With
>> Application.Quit
>> End Function
>> ========== > >> En plus de ça, on charge la maco mcrCompact, dont la seule instruction
>> est de lancer Compact()
>> Depuis hier soir, j'ai tenté beaucoup de choses, mais en vain. A un
>> moment, on m'a dit que la fonction GetObject n'était pas définie.
>> Alors, j'ai créé la PublicFunction GetObject(), et, depuis, je récupère
>> dans les deux cas (instr d'origine ou la mienne)le même message qui me
>> dit que j'ai "essayé d'ouvrir une base de données déjà ouverte en mode
>> exclusif par l'utilisateur 'Admin' sur la machine 'FC'. Recommencez
>> lorsque la base de données sera disponible".
>>
>> Comprenne qui pourra... Moi, ça me passe au dessus de la tête.
>> J'espère que ça t'inspirera davantage que moi :-)
>

Bonjour Michel,
> Avant toute chose un extrait issu de l'aide :
>
> DBEngine.CompactDatabase olddb, newdb, locale, options, password
> ...
> Vous devez fermer la base de données olddb pour la compacter.
Je suppose que c'est l'instruction
If Dir(strDbFile) <> "" Then Kill strDbFile
qui s'en charge

> En environnement multi-utilisateur, aucun utilisateur ne peut
> ouvrir la base de données olddb durant son compactage.
> Si la base de données olddb n'est pas fermée ou n'est pas
> utilisable en mode exclusif, une erreur se produit.
Je suis seul utilisateur de la base, et le résultat est le même que je
mette le mode exclusif ou partagé dans les options/avancé
>
> PS:Je viens de tester sur une base il n'y a aucun problème dés l'instant
> que la base que tu veux compacter ne CONTIENT pas le code destiné
> au compactage sinon à voir la remarque de Pierre.
Je pense, moi aussi, que la cause tourne autour de qquechose de ce
genre.
Mais si j'ai bien tout compris, le code développé par Jessy tient
compte de cette contrainte pour permettre précisément de
compacter/sauvegarder la base pendant qu'elle est ouverte.
Comme il dit de faire, j'ai importé la macro "mcrCompact" et le module
"modCompactCurrentDb" dans ma base et j'ai créé un bouton pour lancer
la la fonction "CompactEXE()" pour effectuer le compactage.
Ou bien, alors, je suis complètement à côté de la plaque... :-(

Là, je dois m'absenter pendant qques heures, mais je sens que ce sera
mon os à ronger pour la soirée.
Et merci d'avance pour toutes vos propositions à venir



Pour moi, ce n'est pas possible de compacter une base qui CONTIENT le
code destiné à compacter la base donc le code de jessy ferme la base
qu'il va compacter et donc vu que la base est fermée; pour que le code
puisse continuer à tourner il est forcément ailleurs.
1 2