IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Access Discussion :

Sauvegarde automatique ?


Sujet :

Access

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 62
    Points : 38
    Points
    38
    Par défaut Sauvegarde automatique ?
    Bonsoir à tous,

    Ma application est partagée et j'ai donc mis sur chaque poste l'application sans les données et la base de données principale qui contient les données sur le serveur.

    J'aimerais que lorsque l'utilisateur quitte l'application une sauvegarde automatique de ma base de données (qui se trouve sur le serveur !) se fasse et copie le fichier sur le poste de cet utilisateur.

    Je voyais cela comme ceci;
    (Evènement appelé sur le click d'un bouton pour quitter l'application)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     On Error GoTo Hanle
     
     'Déclarer deux variables string pour les emplacements
    Dim sEmplacementInitial As String, sEmplacementFinal As String
     
    sEmplacementInitial = GetLinkedDBName("NomTable")
    sEmplacementFinal = CurrentProject.Path & "\" & "NomBaseCopy.mdb"
     
     'Copie du fichier et Quit
    FileCopy sEmplacementInitial, sEmplacementFinal
    DoEvents
    Application.Quit
     
    Exit_Hanle:
        Exit Sub
    Hanle:
        Call HandleReseau
        Resume Exit_Hanle
    Mais il y a une erreur
    "Permission refusée"
    .
    J'imagine que puisque le fichier à copier est ouvert, il ne peut le copier!

    Alors, comment contourner le problème ??? :

    Merci de votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    Un moyen efficace consite à utiliser l'API SHFileOperation associée à sa structure SHFILEOPSTRUCT...

    Il te faut toutefois envisager de générer un algo capable de déceler le nom du dernier nom créé car cette API réagi comme dans l'explorateur, à savoir, faire une "Copie de MaBDD.mdb" puis "Copie 1 de MaBDD.mdb" et ainsi de suite... Mais aussi vérifier avec une fonction appropriée que la base n'est pas ouverte en mode exclusif...

    Par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
        lngFlags = FOF_SIMPLEPROGRESS Or FOF_FILESONLY Or FOF_RENAMEONCOLLISION
     
        With tyFILEOP
            .wFunc = FO_COPY
            .hwnd = hWndAccessApp
            .pFrom = strSavedFile & vbNullChar
            .pTo = strCopiedFile & vbNullChar
            .fFlags = lngFlags
        End With
     
        On Error GoTo L_ErrUnableToBackup
        lngRet = apiSHFileOperation(tyFILEOP)
    L'erreur 70 n'est alors pas soulevée...

    Argy

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 62
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Merci argyronet pour ta réponse; mais je n'ai pas saisi l'utilisation de ton code exemple. Pourrais-tu me préciser où l'insérer ? : Car j'ai un peu de mal avec les API...

  4. #4
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Bon, voici un exemple...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Private Type SHFILEOPSTRUCT
            hwnd As Long
            wFunc As Long
            pFrom As String
            pTo As String
            fFlags As Integer
            fAnyOperationsAborted As Long
            hNameMappings As Long
            lpszProgressTitle As String '  only used if FOF_SIMPLEPROGRESS
    End Type
     
    Private Const FO_COPY As Long = &H2
     
    Private Declare Function apiSHFileOperation Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long
     
     
    Private Sub CreateCopy()
     
    Dim tyFILEOP As SHFILEOPSTRUCT
    Dim strSavedFile As String
    Dim strCopiedFile As String
    Dim hWndAccessApp As Long
    Dim lngFlags As Long
    Dim lngRet As Long
     
        strSavedFile = "Ma BDD en cours.mdb"
        strCopiedFile = "Ma BDD à copier.mdb"
        hWndAccessApp = Application.hWndAccessApp
     
        lngFlags = FOF_SIMPLEPROGRESS Or FOF_FILESONLY Or FOF_RENAMEONCOLLISION
     
        With tyFILEOP
            .wFunc = FO_COPY
            .hwnd = hWndAccessApp
            .pFrom = strSavedFile & vbNullChar
            .pTo = strCopiedFile & vbNullChar
            .fFlags = lngFlags
        End With
     
        lngRet = apiSHFileOperation(tyFILEOP)
     
        If lngRet = 0 Then
          MsgBox "Copie effectuée avec succès !", 64
        End If
    End Sub
    Tu colles cela dans un module et tu l'appelles sur l'événement de ton choix...

    Argy

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 62
    Points : 38
    Points
    38
    Par défaut
    Salut argyronet,

    J'ai mis ton code exemple dans un module; mais en le compilant il me dit que les variables suivantes ne sont pas déclarées :

    FOF_SIMPLEPROGRESS Or FOF_FILESONLY Or FOF_RENAMEONCOLLISION
    Quel type doivent prendre ces variables ???
    Je sais que je t'en demande beaucoup ; mais je nage concernant le code que tu as fait !!!

    Merci de ton aide et de tes précieuses explications.

  6. #6
    Rédacteur/Modérateur
    Avatar de argyronet
    Homme Profil pro
    Panseur de bobos en solutions ETL
    Inscrit en
    Mai 2004
    Messages
    5 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Panseur de bobos en solutions ETL
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 5 128
    Points : 12 185
    Points
    12 185
    Billets dans le blog
    5
    Par défaut
    Oui, désolé, j'ai omis de te donner les constantes...
    Les voici, tu les colles juste en dessous de FO_COPY:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Const FOF_FILESONLY As Long = &H80
    Private Const FOF_RENAMEONCOLLISION As Long = &H8
    Private Const FOF_SIMPLEPROGRESS As Long = &H100
    Argy

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 62
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Merci pour tout argyronet ! Ca marche parfaitement !

    J'essaierais de prendre du temps pour comprendre l'utilisation des API car j'ai des lacunes dans ce domaine...

    Merci encore pour le temps que tu as consacré et à bientôt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faire une sauvegarde automatique ?
    Par Neal Morse dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/12/2005, 19h29
  2. Créer une copies de sauvegarde automatiquement
    Par alexander dans le forum Administration
    Réponses: 5
    Dernier message: 19/03/2005, 23h03
  3. Sauvegarder automatiquement un mail envoyé par asp
    Par Immobilis dans le forum ASP
    Réponses: 7
    Dernier message: 27/10/2004, 14h11
  4. Sauvegarde automatique
    Par Saguez dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/09/2004, 21h03
  5. sauvegarde automatique
    Par bourvil dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/11/2003, 14h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo