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

Fermer une base attachée (back end)

6 réponses
Avatar
Michel Boivin
Je travaille avec une base de données comportant plusieurs
tables attachées. J'utilise fréquemment la structure suivante:

dim db as dao.database
dim rstX as dao.recordset

set db = opendatabase("c:\tabase.mdb")
set rstX = db.openrecordset ("taTableExterne")
....
db.close

J'ai toutefois un problème. Je veux compacter cette base en quittant mon
application. Quoique j'utilise systématiquement la commande db.close après
chaque utilisation, lorsque je viens pour procéder à la compaction en
quittant l'application, j'obtiens un message d'erreur suivant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

J'aimerais bien savoir ce que je dois faire pour fermer cette base attachée
(autre que la commande db.close) et la compacter en quittant mon application.

Toute aide sera bienvenue.

6 réponses

Avatar
JeanYves \(au pro\)
BIEN LE BONJOUR,

Il faut détacher les tables "attachées" avant decompacter.

DoCmd.DeleteObject acTable, "taTableExterne"

A+
JY

"Michel Boivin" a écrit dans le
message de news:
Je travaille avec une base de données comportant plusieurs
tables attachées. J'utilise fréquemment la structure suivante:

dim db as dao.database
dim rstX as dao.recordset

set db = opendatabase("c:tabase.mdb")
set rstX = db.openrecordset ("taTableExterne")
....
db.close

J'ai toutefois un problème. Je veux compacter cette base en quittant mon
application. Quoique j'utilise systématiquement la commande db.close
après
chaque utilisation, lorsque je viens pour procéder à la compaction en
quittant l'application, j'obtiens un message d'erreur suivant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

J'aimerais bien savoir ce que je dois faire pour fermer cette base
attachée
(autre que la commande db.close) et la compacter en quittant mon
application.

Toute aide sera bienvenue.



Avatar
Michel Boivin
Merci Jean-Yves pour cette suggestion.

J'ai procédé aux essais et la méthode suggérée ne suffit pas. En effet, je
«détache» avec succès toutes les tables attachées par l'une ou l'autre des
commandes suivantes:

Base01.TableDefs.Delete varTablesLiéesEnCours(I)

Ou encore

DoCmd.DeleteObject acTable, varTablesLiéesEnCours(I)

mais lorsqu'on arrive à l'instruction de compactage, j'obtiens le même
message d'erreur qu'auparavant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

Si j'ajoute, après avoir détaché les tables, mais avant la commande de
compaction l'instruction suivante de fermer la base attachée:

Base02.close

j'obtiens le message suivant:

«Variable objet ou variable de bloc With non définie» malgré le fait que
Base02 ait été préalablement dimensionnée comme une DAO.Database.

J'ai tenté à plusieurs reprises de réaliser ce compactage en sortant de
l'application, toujours sans succès. J'aimerais bien cette fois-ci y
parvenir, avec votre aide...




BIEN LE BONJOUR,

Il faut détacher les tables "attachées" avant decompacter.

DoCmd.DeleteObject acTable, "taTableExterne"

A+
JY

"Michel Boivin" a écrit dans le
message de news:
Je travaille avec une base de données comportant plusieurs
tables attachées. J'utilise fréquemment la structure suivante:

dim db as dao.database
dim rstX as dao.recordset

set db = opendatabase("c:tabase.mdb")
set rstX = db.openrecordset ("taTableExterne")
....
db.close

J'ai toutefois un problème. Je veux compacter cette base en quittant mon
application. Quoique j'utilise systématiquement la commande db.close
après
chaque utilisation, lorsque je viens pour procéder à la compaction en
quittant l'application, j'obtiens un message d'erreur suivant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

J'aimerais bien savoir ce que je dois faire pour fermer cette base
attachée
(autre que la commande db.close) et la compacter en quittant mon
application.

Toute aide sera bienvenue.








Avatar
JeanYves \(au pro\)
Michel

D'aprés tes explications je pense que tu n'essais pas de compacter la ou les
bases dans lesquelles se trouvent les tables attachées, ce que j'avais cru
comprendre initialement, mais tu essais de compacter la base sur laquelle tu
te trouves actuellement qui, par conséquent, est ouverte.

Effectivement on ne peut pas compacter une base ouverte mais ACCESS (à
partir de Access2000) offre la possibilité de compacter systématiquement une
base à sa fermeture.

Il suffit de cocher l'option "compacter lors de la fermeture" que tu
trouveras dans le menu "Outils" - "Options" onglet "Général".

Dans ce cas il est inutile de détacher les tables des autres bases et c'est
la base frontale qui sera compacté et pas les bases annexes.

J'espère avoir compris et répondu

@+

JY


"Michel Boivin" a écrit dans le
message de news:
Merci Jean-Yves pour cette suggestion.

J'ai procédé aux essais et la méthode suggérée ne suffit pas. En effet,
je
«détache» avec succès toutes les tables attachées par l'une ou l'autre des
commandes suivantes:

Base01.TableDefs.Delete varTablesLiéesEnCours(I)

Ou encore

DoCmd.DeleteObject acTable, varTablesLiéesEnCours(I)

mais lorsqu'on arrive à l'instruction de compactage, j'obtiens le même
message d'erreur qu'auparavant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

Si j'ajoute, après avoir détaché les tables, mais avant la commande de
compaction l'instruction suivante de fermer la base attachée:

Base02.close

j'obtiens le message suivant:

«Variable objet ou variable de bloc With non définie» malgré le fait que
Base02 ait été préalablement dimensionnée comme une DAO.Database.

J'ai tenté à plusieurs reprises de réaliser ce compactage en sortant de
l'application, toujours sans succès. J'aimerais bien cette fois-ci y
parvenir, avec votre aide...




BIEN LE BONJOUR,

Il faut détacher les tables "attachées" avant decompacter.

DoCmd.DeleteObject acTable, "taTableExterne"

A+
JY

"Michel Boivin" a écrit dans le
message de news:
Je travaille avec une base de données comportant plusieurs
tables attachées. J'utilise fréquemment la structure suivante:

dim db as dao.database
dim rstX as dao.recordset

set db = opendatabase("c:tabase.mdb")
set rstX = db.openrecordset ("taTableExterne")
....
db.close

J'ai toutefois un problème. Je veux compacter cette base en quittant
mon
application. Quoique j'utilise systématiquement la commande db.close
après
chaque utilisation, lorsque je viens pour procéder à la compaction en
quittant l'application, j'obtiens un message d'erreur suivant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

J'aimerais bien savoir ce que je dois faire pour fermer cette base
attachée
(autre que la commande db.close) et la compacter en quittant mon
application.

Toute aide sera bienvenue.










Avatar
Jessy Sempere [MVP]
Bonjour

Non, il n'est pas utile de supprimer les attaches de tables, il faut juste
que tes tables ne soient pas ouverte.

Sinon essais juste en rajoutant en plus de db.close, la synthaxe set db =
nothing
Cette synthaxe permet de libérer ta variable objet et donc de fermer la base
à laquelle elle était liée.

@+
Jessy Sempere - Access MVP

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

"Michel Boivin" a écrit dans le
message de news:
Merci Jean-Yves pour cette suggestion.

J'ai procédé aux essais et la méthode suggérée ne suffit pas. En effet,
je
«détache» avec succès toutes les tables attachées par l'une ou l'autre des
commandes suivantes:

Base01.TableDefs.Delete varTablesLiéesEnCours(I)

Ou encore

DoCmd.DeleteObject acTable, varTablesLiéesEnCours(I)

mais lorsqu'on arrive à l'instruction de compactage, j'obtiens le même
message d'erreur qu'auparavant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

Si j'ajoute, après avoir détaché les tables, mais avant la commande de
compaction l'instruction suivante de fermer la base attachée:

Base02.close

j'obtiens le message suivant:

«Variable objet ou variable de bloc With non définie» malgré le fait que
Base02 ait été préalablement dimensionnée comme une DAO.Database.

J'ai tenté à plusieurs reprises de réaliser ce compactage en sortant de
l'application, toujours sans succès. J'aimerais bien cette fois-ci y
parvenir, avec votre aide...




BIEN LE BONJOUR,

Il faut détacher les tables "attachées" avant decompacter.

DoCmd.DeleteObject acTable, "taTableExterne"

A+
JY

"Michel Boivin" a écrit dans le
message de news:
Je travaille avec une base de données comportant plusieurs
tables attachées. J'utilise fréquemment la structure suivante:

dim db as dao.database
dim rstX as dao.recordset

set db = opendatabase("c:tabase.mdb")
set rstX = db.openrecordset ("taTableExterne")
....
db.close

J'ai toutefois un problème. Je veux compacter cette base en quittant
mon
application. Quoique j'utilise systématiquement la commande db.close
après
chaque utilisation, lorsque je viens pour procéder à la compaction en
quittant l'application, j'obtiens un message d'erreur suivant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

J'aimerais bien savoir ce que je dois faire pour fermer cette base
attachée
(autre que la commande db.close) et la compacter en quittant mon
application.

Toute aide sera bienvenue.










Avatar
Michel Boivin
Merci à vous deux (Jean-Yves et Jessy) pour ces conseils.

D'abord, Jean-Yves tu avais bien compris, j'essaie effectivement de
compacter la base qui contient les tables attachées et non pas celle où je me
trouve.

D'autre part, le conseil de Jessy (set db = nothing) avait aussi été essayé
sans succès.

Je suis vraiment très déçu de ne pas réussir à l'occasion de cette tentative
(plusieurs autres tentatives avaient aussi été abandonnées).

Pour être bien certain, si j'avais laissé un Recordset ouvert à quelque part
dans mon application, n'est-il pas vrai qu'en fermant la base, ce Recordset
(basé sur une table attachée) serait aussi fermé automatiquement ? Si non,
il faudrait que je revoie systématiquement mon code pour bien m'assurer que
chacun des Recordsets utilisés a effectivement été spécifiquement fermé, ce
qui sera exigeant puisque mon application doit contenir au delà d'une
trentaine de Recordsets répartis un peu partout dans un module et des
formulaires !


Bonjour

Non, il n'est pas utile de supprimer les attaches de tables, il faut juste
que tes tables ne soient pas ouverte.

Sinon essais juste en rajoutant en plus de db.close, la synthaxe set db =
nothing
Cette synthaxe permet de libérer ta variable objet et donc de fermer la base
à laquelle elle était liée.

@+
Jessy Sempere - Access MVP

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

"Michel Boivin" a écrit dans le
message de news:
Merci Jean-Yves pour cette suggestion.

J'ai procédé aux essais et la méthode suggérée ne suffit pas. En effet,
je
«détache» avec succès toutes les tables attachées par l'une ou l'autre des
commandes suivantes:

Base01.TableDefs.Delete varTablesLiéesEnCours(I)

Ou encore

DoCmd.DeleteObject acTable, varTablesLiéesEnCours(I)

mais lorsqu'on arrive à l'instruction de compactage, j'obtiens le même
message d'erreur qu'auparavant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

Si j'ajoute, après avoir détaché les tables, mais avant la commande de
compaction l'instruction suivante de fermer la base attachée:

Base02.close

j'obtiens le message suivant:

«Variable objet ou variable de bloc With non définie» malgré le fait que
Base02 ait été préalablement dimensionnée comme une DAO.Database.

J'ai tenté à plusieurs reprises de réaliser ce compactage en sortant de
l'application, toujours sans succès. J'aimerais bien cette fois-ci y
parvenir, avec votre aide...




BIEN LE BONJOUR,

Il faut détacher les tables "attachées" avant decompacter.

DoCmd.DeleteObject acTable, "taTableExterne"

A+
JY

"Michel Boivin" a écrit dans le
message de news:
Je travaille avec une base de données comportant plusieurs
tables attachées. J'utilise fréquemment la structure suivante:

dim db as dao.database
dim rstX as dao.recordset

set db = opendatabase("c:tabase.mdb")
set rstX = db.openrecordset ("taTableExterne")
....
db.close

J'ai toutefois un problème. Je veux compacter cette base en quittant
mon
application. Quoique j'utilise systématiquement la commande db.close
après
chaque utilisation, lorsque je viens pour procéder à la compaction en
quittant l'application, j'obtiens un message d'erreur suivant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

J'aimerais bien savoir ce que je dois faire pour fermer cette base
attachée
(autre que la commande db.close) et la compacter en quittant mon
application.

Toute aide sera bienvenue.















Avatar
Jessy Sempere [MVP]
Bonjour

Ok, sinon, il est conseillé de libérer toutes les variables objets que tu
peux créer dans ton code y compris les recordset même si en théorie, ces
variables seront libérer lors de la fermeture de ta base.

Sinon pour compacter la base de donnée en cours, regardes ceci :
http://access.jessy.free.fr/index.html?Menu&Page=CompactDb

--
@+
Jessy Sempere - Access MVP

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

"Michel Boivin" a écrit dans le
message de news:
Merci à vous deux (Jean-Yves et Jessy) pour ces conseils.

D'abord, Jean-Yves tu avais bien compris, j'essaie effectivement de
compacter la base qui contient les tables attachées et non pas celle où je
me
trouve.

D'autre part, le conseil de Jessy (set db = nothing) avait aussi été
essayé
sans succès.

Je suis vraiment très déçu de ne pas réussir à l'occasion de cette
tentative
(plusieurs autres tentatives avaient aussi été abandonnées).

Pour être bien certain, si j'avais laissé un Recordset ouvert à quelque
part
dans mon application, n'est-il pas vrai qu'en fermant la base, ce
Recordset
(basé sur une table attachée) serait aussi fermé automatiquement ? Si
non,
il faudrait que je revoie systématiquement mon code pour bien m'assurer
que
chacun des Recordsets utilisés a effectivement été spécifiquement fermé,
ce
qui sera exigeant puisque mon application doit contenir au delà d'une
trentaine de Recordsets répartis un peu partout dans un module et des
formulaires !


Bonjour

Non, il n'est pas utile de supprimer les attaches de tables, il faut
juste
que tes tables ne soient pas ouverte.

Sinon essais juste en rajoutant en plus de db.close, la synthaxe set db >> nothing
Cette synthaxe permet de libérer ta variable objet et donc de fermer la
base
à laquelle elle était liée.

@+
Jessy Sempere - Access MVP

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

"Michel Boivin" a écrit dans le
message de news:
Merci Jean-Yves pour cette suggestion.

J'ai procédé aux essais et la méthode suggérée ne suffit pas. En
effet,
je
«détache» avec succès toutes les tables attachées par l'une ou l'autre
des
commandes suivantes:

Base01.TableDefs.Delete varTablesLiéesEnCours(I)

Ou encore

DoCmd.DeleteObject acTable, varTablesLiéesEnCours(I)

mais lorsqu'on arrive à l'instruction de compactage, j'obtiens le même
message d'erreur qu'auparavant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'. Recommencez
lorsque la base de données sera disponible»

Si j'ajoute, après avoir détaché les tables, mais avant la commande de
compaction l'instruction suivante de fermer la base attachée:

Base02.close

j'obtiens le message suivant:

«Variable objet ou variable de bloc With non définie» malgré le fait
que
Base02 ait été préalablement dimensionnée comme une DAO.Database.

J'ai tenté à plusieurs reprises de réaliser ce compactage en sortant de
l'application, toujours sans succès. J'aimerais bien cette fois-ci y
parvenir, avec votre aide...




BIEN LE BONJOUR,

Il faut détacher les tables "attachées" avant decompacter.

DoCmd.DeleteObject acTable, "taTableExterne"

A+
JY

"Michel Boivin" a écrit dans
le
message de news:
Je travaille avec une base de données comportant plusieurs
tables attachées. J'utilise fréquemment la structure suivante:

dim db as dao.database
dim rstX as dao.recordset

set db = opendatabase("c:tabase.mdb")
set rstX = db.openrecordset ("taTableExterne")
....
db.close

J'ai toutefois un problème. Je veux compacter cette base en
quittant
mon
application. Quoique j'utilise systématiquement la commande
db.close
après
chaque utilisation, lorsque je viens pour procéder à la compaction
en
quittant l'application, j'obtiens un message d'erreur suivant:

«Vous avez essayé d'ouvrir une base de données déjà ouverte en mode
exclusif
par l'utilisateur 'Admin' sur la machine 'MICHEL-TECRA-A4'.
Recommencez
lorsque la base de données sera disponible»

J'aimerais bien savoir ce que je dois faire pour fermer cette base
attachée
(autre que la commande db.close) et la compacter en quittant mon
application.

Toute aide sera bienvenue.