Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Sécurité
Sécurité Le forum qui s'occupe de votre préoccupation de sécuriser l'accès à votre application Access, ainsi qu'à la sécurité des données.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2011, 15h11   #1
Candidat au titre de Membre du Club
 
Inscription : juillet 2011
Messages : 53
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 53
Points : 11
Points : 11
Par défaut sauvergarde copie automatique

Bonjour,

je souhaite enregistrer un copie automatique de ma bdd à chaque fermeture de la bdd. cela afin d'avoir un copie de secours si jamais la bdd utilisé est supprimée.
apres je ne sais pas si il est mieux de faire une copie qui écrase à chaque fois la précendente ou bien de daté ces copies.

Si quelqu'un peut me dire comment mettre en place cette sauvegarde automatique?

merci d'avance
josi1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 16h10   #2
Membre éprouvé
 
Homme Robert LINCE
Conseiller psycho-pédagogique
Inscription : octobre 2007
Messages : 279
Détails du profil
Informations personnelles :
Nom : Homme Robert LINCE
Localisation : Belgique

Informations professionnelles :
Activité : Conseiller psycho-pédagogique
Secteur : Enseignement

Informations forums :
Inscription : octobre 2007
Messages : 279
Points : 478
Points : 478
Bonjour.

La méthode la plus simple utilise l'accès par fso (file system object). Tu peux par exemple créer un formulaire "Fermeture" qui s'ouvre en restant caché à chaque ouverture de ta base. Dans ce formulaire tu insère un code sur l'événement fermeture :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Form_Unload(Cancel As Integer)
Dim StrDateSauv As String
StrDateSauv = str(Int(Date))        'Date actuelle
StrDateSauv = Replace(StrDateSauv, "/", "_")        'Remplacer les / par des -
 
Dim fso As Object, strDest As String                'La base sera copiée et enregistrée dans le répertoire actif
strDest = CurrentProject.Path & "\" & _
          Left(CurrentProject.Name, Len(CurrentProject.Name) - 4) & StrDateSauv & ".bak"
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile CurrentProject.FullName, strDest
Set fso = Nothing
MsgBox "La base de donnée a été sauvegardée dans le répertoire courant."
 
End Sub
Dans cet exemple, tu sauvegardes avec la date du jour, donc les sauvegardes n'écrasent pas celles des jours précédents. Ce qui me semble préférable, mais il faut alors prévoir une gestion des sauvegardes pour ne pas saturer inutilement le répertoire. Tu peux bien sûr adapter en fonction de l'endroit où tu veux placer tes sauvegardes.
J'utilise aussi une méthode beaucoup plus compliquée qui compacte la sauvegarde et invite à indiquer où elle doit être placée, mais dans la plupart des cas, la méthode ci-dessus suffit largement.
Cordialement
RobiPMS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 15h29   #3
Candidat au titre de Membre du Club
 
Inscription : juillet 2011
Messages : 53
Détails du profil
Informations forums :
Inscription : juillet 2011
Messages : 53
Points : 11
Points : 11
Merci pour la réponse, ça fonctionne très bien. Mais je souhaite justement que la copie soit sauvegarder dans un autre dossier et que chaque copie écrase la précédente.
Par contre je ne sais pas dans quel dossier l'utilisateur souhaite enregistrer la copie.
josi1986 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 18h09   #4
Membre éprouvé
 
Homme Robert LINCE
Conseiller psycho-pédagogique
Inscription : octobre 2007
Messages : 279
Détails du profil
Informations personnelles :
Nom : Homme Robert LINCE
Localisation : Belgique

Informations professionnelles :
Activité : Conseiller psycho-pédagogique
Secteur : Enseignement

Informations forums :
Inscription : octobre 2007
Messages : 279
Points : 478
Points : 478
Pour que chaque copie écrase la précedente, tu supprimes simplement la date :
Code :
1
2
strDest = CurrentProject.Path & "\" & _
          Left(CurrentProject.Name, Len(CurrentProject.Name) - 4) & ".bak"
Pour donner à ton utilisateur le choix du dossier, il faut une fonction supplémentaire. Je vais reprendre les codes dans une de mes appli et je le poste dès que c'est prêt.
RobiPMS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 19h02   #5
Membre éprouvé
 
Homme Robert LINCE
Conseiller psycho-pédagogique
Inscription : octobre 2007
Messages : 279
Détails du profil
Informations personnelles :
Nom : Homme Robert LINCE
Localisation : Belgique

Informations professionnelles :
Activité : Conseiller psycho-pédagogique
Secteur : Enseignement

Informations forums :
Inscription : octobre 2007
Messages : 279
Points : 478
Points : 478
D'abord, rendons à César ...
Le code que j'utilise pour le choix du répertoire vient de la FAQ et voici le lien
http://access.developpez.com/faq/?pa...Rep#select_rep
Merci à Nightfall et Arkham46.
Dans les déclarations du formulaire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
' Variables utilisées pour la sélection d'un répertoire 
Private Const BIF_RETURNONLYFSDIRS = 1
Private Const BIF_DONTGOBELOWDOMAIN = 2
 
Private Declare Function SHBrowseForFolder Lib "shell32" (lpbi As BrowseInfo) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32" (ByVal pidList As Long, _
    ByVal lpBuffer As String) As Long
Private Declare Function lstrcat Lib "kernel32" Alias "lstrcatA" (ByVal lpString1 As String, _
    ByVal lpString2 As String) As Long
 
Private Type BrowseInfo
    hwndOwner As Long
    pIDLRoot As Long
    pszDisplayName As Long
    lpszTitle As Long
    ulFlags As Long
    lpfnCallback As Long
    lParam As Long
    iImage As Long
End Type
Ensuite la fonction qui permet de choisir un répertoire :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Function SelectFolder(Titre As String, Handle As Long) As String
' Fonction qui permet de sélectionner un répertoire en particulier
 
    Dim lpIDList As Long
    Dim strBuffer As String
    Dim strTitre As String
    Dim tBrowseInfo As BrowseInfo
 
    strTitre = Titre
    With tBrowseInfo
        .hwndOwner = Handle
        .lpszTitle = lstrcat(strTitre, "")
        .ulFlags = BIF_RETURNONLYFSDIRS + BIF_DONTGOBELOWDOMAIN
    End With
 
    lpIDList = SHBrowseForFolder(tBrowseInfo)
 
    If (lpIDList) Then
        strBuffer = String(260, vbNullChar)
        SHGetPathFromIDList lpIDList, strBuffer
        SelectFolder = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
    End If
End Function
Enfin ta fonction de sauvegarde:
Code :
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
31
32
Private Sub Form_Unload(Cancel As Integer)
Dim NomRepertSauv As String     'Le nom du répertoire où la sauvegarde doit aller
Dim NbrNomRepertSauv As Integer 'Le nombre de caractères du nom du répertoire de sauvegarde
Dim fso As Object, strDest As String
 
'Sélection du répertoire où doit se faire la sauvegarde
NomRepertSauv = SelectFolder("Sélectionnez le répertoire où la sauvegarde doit être placée :", Me.hwnd)
 
'Si il n'y a pas de \, alors il n'y a pas de répertoire courant sélectionné
If (InStr(NomRepertSauv, "\") = 0) Then
MsgBox "Vous n'avez pas désigné de répertoire où la sauvegarde doit être placée. Un fichier nommé xxxxxxxxx.bak va être créé dans votre répertoire courant."
DoCmd.Close
strDest = CurrentProject.Path & "\" & Left(CurrentProject.Name, Len(CurrentProject.Name) - 4) & ".bak"
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile CurrentProject.FullName, strDest
Set fso = Nothing
DoCmd.OpenForm "Gestion"
DoCmd.Hourglass False
Exit Sub
Else
'Si le répertoire ne se termine pas par \, on le rajoute
NbrNomRepertSauv = Len(NomRepertSauv)
If (InStr(NbrNomRepertSauv - 1, NomRepertSauv, "\") = 0) Then NomRepertSauv = NomRepertSauv + "\"
 
strDest = NomRepertSauv & Left(CurrentProject.Name, Len(CurrentProject.Name) - 4) & ".bak"
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile CurrentProject.FullName, strDest
Set fso = Nothing
MsgBox "La base de données a été sauvegardée dans le répertoire que vous avez choisi. Son emplacement est " & StrDest
End If
 
End Sub
J'ai géré, comme tu vois, le fait que l'utilisateur ne choisisse pas de répertoire : dans ce cas, une copie est quand même faite dans le répertoire courant.

Adapte ça comme ça te convient!
Cordialement
RobiPMS est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h54.


 
 
 
 
Partenaires

Hébergement Web