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

Compacter base attachée

6 réponses
Avatar
ejc
Bonjour,
Tout est dans l'objet...
Comment compacter la base attachée à partir de l'appli. frontale ?
1-Ne pas attacher les tables (Hum...)
2-Compacter
3-Attacher les tables
Il y a-t-il une autre façon de procéder ? Je n'ai rien trouvé à ce propos...
Merci d'avance,
ejc

6 réponses

Avatar
MINOT gilles
On 31 août, 08:40, "ejc" <~ wrote:
Bonjour,
Tout est dans l'objet...
Comment compacter la base attachée à partir de l'appli. frontale ?
1-Ne pas attacher les tables (Hum...)
2-Compacter
3-Attacher les tables
Il y a-t-il une autre façon de procéder ? Je n'ai rien trouvé à c e propos...
Merci d'avance,
ejc



tu colle ce code dans un module

Public Function fCompactBase(strBase As String)

Dim srcDstName As String

srcDstName = strBase & ".tmp"
DBEngine.CompactDatabase strBase, srcDstName
Kill strBase
Name srcDstName As strBase

End Function


puis tu cree un bouton en rappelant la fonction

call fCompactBase("C:moncheminmabase.mdb")

tous les tables attachées doivent etre fermée
Avatar
3stone
Salut,

MINOT gilles wrote:
tu colle ce code dans un module

Public Function fCompactBase(strBase As String)

Dim srcDstName As String

srcDstName = strBase & ".tmp"
DBEngine.CompactDatabase strBase, srcDstName
Kill strBase
Name srcDstName As strBase

End Function


puis tu cree un bouton en rappelant la fonction

call fCompactBase("C:moncheminmabase.mdb")

tous les tables attachées doivent etre fermée




Rendons à César... ;-)

http://access.fr.free.fr/articles.php?lng=fr&pg0

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
ejc
Bonjour,
Merci pour les infos (mais je savais faire - j'ai même rajouter un peu de
code pour aller chercher le nom de la base attachée). Le pb. c'est que je
veux faire ça à partir de l'application frontale, donc la base à compacter -
partagée sur le réseau - est "ouverte" par un ou plusieurs utilisateurs (et
ça engendre l'erreur n°3356). Il faut donc rajouter un peu de code
(traitement de l'erreur...)
A+
ejc


"ejc" <~ a écrit dans le message de news:

Bonjour,
Tout est dans l'objet...
Comment compacter la base attachée à partir de l'appli. frontale ?
1-Ne pas attacher les tables (Hum...)
2-Compacter
3-Attacher les tables
Il y a-t-il une autre façon de procéder ? Je n'ai rien trouvé à ce
propos...
Merci d'avance,
ejc



Avatar
3stone
Salut,

Non, on ne sait/peut pas compacter une base ouverte!

Pour éviter l'erreur, tu peux même t'assurer que personne
n'est "accroché", car tu dois pouvoir l'ouvrir en mode exclusif :
http://www.3stone.be/access/articles.php?lng=fr&pgi

au besoin, tu déconnectes les récalcitrants...
http://www.3stone.be/access/articles.php?lng=fr&pgq

PS: Le lien que je t'ai donné sert justement à compacter
une base "externe", dont les tables sont liées, donc...

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)



ejc wrote:
Bonjour,
Merci pour les infos (mais je savais faire - j'ai même rajouter un
peu de code pour aller chercher le nom de la base attachée). Le pb.
c'est que je veux faire ça à partir de l'application frontale, donc
la base à compacter - partagée sur le réseau - est "ouverte" par un
ou plusieurs utilisateurs (et ça engendre l'erreur n°3356). Il faut
donc rajouter un peu de code (traitement de l'erreur...)
A+
ejc


"ejc" <~ a écrit dans le message de news:

Bonjour,
Tout est dans l'objet...
Comment compacter la base attachée à partir de l'appli. frontale ?
1-Ne pas attacher les tables (Hum...)
2-Compacter
3-Attacher les tables
Il y a-t-il une autre façon de procéder ? Je n'ai rien trouvé à ce
propos...
Merci d'avance,
ejc




Avatar
MINOT gilles
On 1 sep, 14:10, "3stone" wrote:
Salut,

Non, on ne sait/peut pas compacter une base ouverte!

Pour éviter l'erreur, tu peux même t'assurer que personne
n'est "accroché", car tu dois pouvoir l'ouvrir en mode exclusif :http:/ /www.3stone.be/access/articles.php?lng=fr&pgi

au besoin, tu déconnectes les récalcitrants...http://www.3stone.be/ac cess/articles.php?lng=fr&pgq

PS: Le lien que je t'ai donné sert justement à compacter
     une base "externe", dont les tables sont liées, donc...

--
A+
Pierre (3stone) Access MVP
Perso:http://www.3stone.be/
MPFA:http://www.mpfa.info/ (infos générales)



ejc wrote:
> Bonjour,
> Merci pour les infos (mais je savais faire - j'ai même rajouter un
> peu de code pour aller chercher le nom de la base attachée). Le pb.
> c'est que je veux faire ça à partir de l'application frontale, donc
> la base à compacter - partagée sur le réseau -  est "ouverte" p ar un
> ou plusieurs utilisateurs (et ça engendre l'erreur n°3356). Il faut
> donc rajouter un peu de code (traitement de l'erreur...)
> A+
> ejc

> "ejc" <~ a écrit dans le message de news:
>
>> Bonjour,
>> Tout est dans l'objet...
>> Comment compacter la base attachée à partir de l'appli. frontale ?
>> 1-Ne pas attacher les tables (Hum...)
>> 2-Compacter
>> 3-Attacher les tables
>> Il y a-t-il une autre façon de procéder ? Je n'ai rien trouvé à ce
>> propos...
>> Merci d'avance,
>> ejc- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -



et à Dieu ce qui est à Dieu... ;-)
Avatar
ejc
Bonjour à tous,
j'ai écrit le code suivant : (j'ai rien inventé de nouveau ; sinon César va
faire la gueule !) en tout début d'ouverture de l'appli. frontale
'.......
Public Sub CompacterTables()
Dim OldBase As String, NewBase As String
OldBase = fctNomCompletBaseAttachée() ' voir ci-dessous
NewBase = fctRépertoireBaseAttachée & "New" & fctNomBaseAttachée
'0. Au cas où...
If Dir(NewBase) <> "" Then Kill NewBase
'1. Compactage dans une nouvelle base
On Error GoTo Err_CompacterTables
DBEngine.CompactDatabase OldBase, NewBase
'2. Suppression de la base originale
Kill OldBase
'3. Renommer la base compactée avec le nom de la base originale
Name NewBase As OldBase
Exit_CompacterTables:
Exit Sub
Err_CompacterTables:
'MsgBox Err.Description
On Error GoTo 0
Resume Exit_CompacterTables
End Sub
'.....
'Fonctions utilisées pour connaître le chemin actuel des tables attachées
ACCESS
Public Function fctNomCompletBaseAttachée() As String
Dim NbTables As Byte, I As Byte, Lg As Byte, NomComplet As String, Pos As
Byte
NbTables = BaseActive.TableDefs().Count
For I = 0 To NbTables - 1
If BaseActive.TableDefs(I).Attributes = dbAttachedTable Then
NomComplet = BaseActive.TableDefs(I).Connect: Lg = Len(NomComplet):
Pos = InStr(1, NomComplet, "=")
fctNomCompletBaseAttachée = Mid(NomComplet, Pos + 1, Lg - Pos)
I = NbTables 'Pour forcer la sortie
End If
Next I
End Function
'......
Public Function fctRépertoireBaseAttachée() As String
'Ex :
BaseActive.TableDefs("UneTable").Connect=>;DATABASE=C:$GTTablesTablesAffaire.mdb
Dim I As Integer, NomComplet As String, Lg As Integer, Pos As Byte
NomComplet = fctNomCompletBaseAttachée()
Lg = Len(NomComplet)
For I = Lg To 1 Step -1
Pos = InStr(I, NomComplet, "")
If Pos <> 0 Then
fctRépertoireBaseAttachée = Mid(NomComplet, 1, Pos)
Exit For
End If
Next I
End Function
'.....
Public Function fctNomBaseAttachée() As String
Dim I As Integer, NomComplet As String, Lg As Integer, Pos As Byte
NomComplet = fctNomCompletBaseAttachée()
Lg = Len(NomComplet)
For I = Lg To 1 Step -1
Pos = InStr(I, NomComplet, "")
If Pos <> 0 Then
fctNomBaseAttachée = Right(NomComplet, Lg - Pos)
Exit For
End If
Next I
End Function
'.....
La base attachée est bien compactée sans message d'erreur pour le PREMIER
UTILISATEUR.
En fait, ça me suffit...
A+

Et j
"ejc" <~ a écrit dans le message de news:

Bonjour,
Tout est dans l'objet...
Comment compacter la base attachée à partir de l'appli. frontale ?
1-Ne pas attacher les tables (Hum...)
2-Compacter
3-Attacher les tables
Il y a-t-il une autre façon de procéder ? Je n'ai rien trouvé à ce
propos...
Merci d'avance,
ejc