OVH Cloud OVH Cloud

Compactage auto ds tache planifiée

4 réponses
Avatar
blancmunier
Bonjour,
Sur mon serveur, j'aimerais faire une t=E2che planifi=E9e pour compacter
toutes les bases de donn=E9es du disque O:\
Mais la difficult=E9 vient du fait que de nouvelles bases de donn=E9es
Access se rajoute chaque jour, et je ne voudrait pas cr=E9er une t=E2che
planifi=E9e =E0 chaque base nouvellement cr=E9=E9e.
Qq'un aurait-il d=E9j=E0 programmm=E9 un petit exe permettant de faire
cela (ou qqun aurait-il une id=E9e de la syntaxe VB pour faire ceci ?)
En vous remerciant
Yvan

4 réponses

Avatar
Dan
a écrit dans le message de news:

Bonjour,
Sur mon serveur, j'aimerais faire une tâche planifiée pour compacter
toutes les bases de données du disque O:
Mais la difficulté vient du fait que de nouvelles bases de données
Access se rajoute chaque jour, et je ne voudrait pas créer une tâche
planifiée à chaque base nouvellement créée.
Qq'un aurait-il déjà programmmé un petit exe permettant de faire
cela (ou qqun aurait-il une idée de la syntaxe VB pour faire ceci ?)
En vous remerciant
Yvan

Salut Yvan,

Pourquoi pas une appli recensant tes bases, avec une procédure déclenchée
sur le timer d'un form ouvert au démarrage, qui parcourt la liste des bases
et les compacte les unes après les autres (le timer permet de ne compacter
qu'une seule base à la fois, pour ménager le serveur).
L'appli peut même générer une ligne de commentaire par base : "compactée
avec succès le 13/06/2006"
Dans les tâches planifiées, il suffit ensuite d'ouvrir l'appli.
A+ Dan
Avatar
blancmunier
ah, je croyais qu'on ne pouvait mettre que des exe ds une tache
planifiee.
Je vais essayer de bidouiller ds ce sens.
Merci
Avatar
Dan
C'est bien un Exe qu'il faut mettre :
c:program filesmsaccess.exe.... suivi du nom de la base et des paramètres
de la ligne de commandes...
A+ Dan
Avatar
Bonjour

Je ne sais pas si ça peut aider, mais la procédure ci-dessous vient de me permettre de compacter 87 bases access d'un dossier en
moins de 2 minutes.
Bon, c'est du code à améliorer, notamment si on veut ignorer les messages d'erreur.

Option Compare Database
Option Explicit

Public Function fCompactageBases()
Dim Dossier As String
Dossier = "E:Mes documentsDBAccess2K"
On Error Resume Next
Dim intFile As Integer
intFile = 0
With Application.FileSearch
.LookIn = Dossier
.FileName = "*.mdb"
If .Execute > 0 Then
For intFile = 1 To .FoundFiles.Count
If fCanOpenExclusive(.FoundFiles(intFile)) = True Then
DoEvents
'ExecCmd "Msaccess.exe " & Chr$(34) & .FoundFiles(intFile) & Chr$(34) & " /compact"
Shell "Msaccess.exe " & Chr$(34) & .FoundFiles(intFile) & Chr$(34) & " /compact", vbHide
DoEvents
End If
Next intFile
End If
End With
End Function

Public Function fCanOpenExclusive(ByVal varPath As String) As Boolean
On Error Resume Next
Const FileInUse As Long = 3045
Const FileOpenedExclusively As Long = 3356
Dim dbe As PrivDBEngine
Dim dbs As Dao.Database
Set dbe = New PrivDBEngine
Set dbs = dbe(0).OpenDatabase(varPath, True)
If dbs Is Nothing Then
If (Err.Number = FileInUse Or _
Err.Number = FileOpenedExclusively) Then
fCanOpenExclusive = False
Else
MsgBox "Erreur: " & Err.Number & ": " & vbCrLf & Err.Description
End If
Else
fCanOpenExclusive = True
dbs.Close
End If
Set dbs = Nothing
Set dbe = Nothing
End Function

Une fois finalisé, il n'y aurait plus qu'à planifier l'exécution de ce code dans d'une base dédiée qui se chargera de compacter ses
copines..
a+
--
Arnaud
---------------------------------------------
infos, conseils et liens : http://www.mpfa.info
---------------------------------------------

a écrit dans le message de news:
Bonjour,
Sur mon serveur, j'aimerais faire une tâche planifiée pour compacter
toutes les bases de données du disque O:
Mais la difficulté vient du fait que de nouvelles bases de données
Access se rajoute chaque jour, et je ne voudrait pas créer une tâche
planifiée à chaque base nouvellement créée.
Qq'un aurait-il déjà programmmé un petit exe permettant de faire
cela (ou qqun aurait-il une idée de la syntaxe VB pour faire ceci ?)
En vous remerciant
Yvan