Sauvegardes datées – Supprimer les sauvegardes obsolètes
Dans l’article Sauvegardes datées, il était question d’automatiser des sauvegardes d’un fichier de base de données, en copiant ces sauvegardes dans un dossier précis. Une lectrice m’a demandé comment vider ce dossier de manière à ne conserver que les 3 dernières sauvegardes. Voici comment faire.
Le code
- Vérifiez que votre base de données dispose de la fonction FileList, traitée dans un article précédent. Pour mémoire, cette fonction obtient une liste triée des fichiers d’un dossier Windows.
- Recopiez le code qui suit dans un module standard de votre base (la bonne idée, c’est de compléter le module créé dans l’article Sauvegardes datées, plutôt que d’en créer un nouveau !).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
' --- ' NETTOYAGE DU DOSSIER DE SAUVEGARDE ' --- Sub CleanBackupFolder( _ ByVal strFolder As String, _ ByVal intMaxBackups As Integer, _ Optional ByVal strExtension = "*.accdb") ' Quelques variables... Dim astrFiles() As String Dim lngIndex As Long ' Obtenir la liste triée des fichiers On Error GoTo CleanBackupFolderErr astrFiles = FileList(strFolder, strExtension) ' Si on a moins de x fichiers, on annule If UBound(astrFiles) <= intMaxBackups Then Exit Sub End If ' Supprimer tous les fichiers sauf les x derniers For lngIndex = 1 To UBound(astrFiles) - intMaxBackups Kill astrFiles(lngIndex) Next Exit Sub CleanBackupFolderErr: MsgBox "Erreur : " & Err.Description, vbCritical Exit Sub End Sub |
Pour utiliser cette procédure :
- Généralement, vous aurez lancé une sauvegarde préalable, grâce à la procédure
BackupDB
donnée ici. - Appelez la méthode
CleanBackupFolder
juste après, en lui fournissant le chemin du dossier de sauvegarde, le nombre de sauvegardes à conserver, et optionnellement l’extension de vos fichiers Access.
En résumé, tout ça peut se faire comme ceci :
1 2 |
BackupDB CleanBackupFolder "C:\Users\Hervé\Documents\AccessBackup", 3, "*.accdb" |
Je réponds à moi même, je viens de réussir à réaliser une restauration de données via mon menu principal avec un bouton.
Principe :
1-Je crée mes sauvegardes de la base dorsale dans un dossier « sauvegardes ».
2-Je demande la restauration
3-On supprime la base dorsale en cours en ayant vérifié l’existence du fichier.
4-on propose à l’utilisateur de choisir quelle sauvegarde il souhaite utiliser parmi les 3 existantes dans le dossier « sauvegardes »
5-On copie le fichier sélectionné en lieu et place de l’ancien.
Résultat, tout est transparent, sans redémarrer le programme, on à accès aux données restaurées.
ATTENTION, ceci est seulement valable pour une base fractionnées en 2!!
Excusez moi, j’ai oublié de préciser que je parlais bien d’une restauration d’une sauvegarde de la base dorsale.
Car j’ai réussi à arranger le programme « sauvegardes datées » pour sauvegarder que la base dorsale et non la frontale.
D’où ma question sur la restauration.
A savoir qu’en parallèle, j’ai du code qui permet de vérifier au lancement du programme si les liens entre la frontale et la dorsale est valide sinon le programme propose de renseigner ou se trouve la base dorsale sur le disque dur pour mettre à jour.
Dans ce cas il serait possible via un bouton « restaurer » de supprimer la base dorsale, copier la sauvegarde et la coller en lieu et place de l’ancienne et ainsi remettre les liens à jours au lancement du programme frontal?
Rodger > Ce n’est pas si facile de restaurer les données dans une base existante : la base principale a pu évoluer, et on peut avoir des problèmes de cohérence sur des clefs primaires. Les sauvegardes sont un archivage à un instant t des données, prévues pour être réinstallées intégralement en cas de problème.
Par contre, il est également possible, en mode frontale/dorsale, de modifier les liens vers la dorsale pour faire pointer la base frontale sur une autre dorsale (une sauvegarde).
Bonjour,
On a crée des sauvegardes auto, puis effacé celles trop vieilles, mais l’étape suivante ne serai pas de, via un formulaire, aller chercher une sauvegarde datée puis de la restaurer dans la base de données?
C’est réalisable?
Je demande ça ici car j’avais posé une autre question dans « sauvegardes datées » mais jamais apparue…!
Guillaume > Est-ce que tu as bien repris, dans la base MDB, la fonction
FileList
dont il est question en début d’article ? Le message d’erreur laisse penser qu’elle n’est pas trouvée.Bonjour,
Tout d’abord je vous adresse un grand merci pour ces fonctions très utiles dont vous nous avez révélé le code.
TOut fonctionne, jusqu’au nettoyage des sauvegardes. En effet, j’ai une base de données en .mdb, et votre programme parle de .accdb. Aussi, j’ai essayé de remplacer .accdb par .mdb, mais j’ai toujours une erreur de compilation (« Sub ou Fonction non définie) au niveau du « FileList ».
Auriez-vous une idée de où et de quoi vient ce problème ?
Encore un énorme merci !