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

VBA Access Discussion :

Sauvegarder et donc fermer la base dorsale à partir de la frontale


Sujet :

VBA Access

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 49
    Points
    49
    Par défaut Sauvegarder et donc fermer la base dorsale à partir de la frontale
    Bonjour,

    Je n'arrive pas à automatiser la sauvegarde de ma base dorsale

    Voilà ce que j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Dim strCurrent, strDest As Variant
    'On indique l'endroit, et quelle base copier
        strCurrent = "D:\BD\ZH\Tables.mdb"
    'On indique ou aller copier et sous quel nom
    strDest = "D:\BD\ZH\SauveTables.mdb"
    'on ferme la base dorsale (je le re-ouvre pour pouvoir recuperer le numéro de fichier)
    Dim intFichier As Integer
    intFichier = FreeFile
    Open strCurrent For Input As intFichier
    Close intFichier
    'on copie la base
    FileCopy strCurrent, strDest
    Mais cela ne marche pas, après de nombreux bugs et erreurs (70 : permission refusée), maintenant, ca ne declenche plus rien ... et ca n'a pas l'air de fermer ma base Tables.mdb

    Je m'y prends surement mal, ... merci pour toutes suggestions !

    Julie

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Petite question, pourquoi veux-tu fermer ta base dorsale ?

    Philippe

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 49
    Points
    49
    Par défaut
    Bonjour Philippe,

    Je veux fermer la dorsale car l'aide indique que
    "Si vous appliquez l'instruction FileCopy à un fichier ouvert, une erreur se produit."
    Julie

  4. #4
    Débutant  
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 745
    Points : 202
    Points
    202
    Par défaut
    Pour ma par j'ai mis en place un procédure avec un fichier vbs tout simplement

    il me compacte la base me la copier dans un nouveau dossier et me garde les 180 derniere base quand on dépasse les 180 il supprime la plus ancienne

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    'compacte base
     
    Dim jro, fso
    Dim strBD, strBDCPCT, strBDBAK, ErrNum, ErrDesc, ErrFile
    Dim strBDwoExt, strBDext, pos
     
    strBD = "D:\aa\bb\ACCESBASESTAGNE\BASETABLE\APPSA.mdb"
     
    ' Coupe nom complet en nom + extension
    pos = InStrRev(strBD, ".")
    If pos < 1 Then pos = Len(strBD) + 1
    strBDwoExt = Left(strBD, pos - 1)
    strBDext = Mid(strBD, pos, Len(strBD) + 1 - pos)
     
    ' Crée nom base compactée, nom base sauvegardée
    strBDCPCT = strBDwoExt & "Cpct" & strBDext
    strBDBAK = strBDwoExt & ".bak" & strBDext
     
    ' Supprime base compactée si existe
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(strBDCPCT) Then fso.DeleteFile strBDCPCT
     
    ' Compacte base dans base compactée
    Set jro = CreateObject("jro.JetEngine")
    ErrNum = 0
    On Error Resume Next
    ' Si mot de passe, ajouter ;Jet OLEDB:Database Password=
    ' Pour spécifier format base compactée ajouter ;Jet OLEDB:Engine Type=
    '	4 pour jet 3.x
    '       5 pour Jet 4.0
    jro.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strBD , _
     		    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strBDCPCT 
    ErrNum = Err.Number: ErrDesc = Err.Description
    On Error GoTo 0
     
    ' Si pas d'erreur renomme base en base sauvegardée
    '                 renomme base compactée en base
    If ErrNum = 0 Then
       If fso.FileExists(strBDBAK) Then fso.DeleteFile strBDBAK
       fso.MoveFile strBD, strBDBAK
       fso.MoveFile strBDCPCT, strBD
    else
       Set ErrFile = fso.CreateTextFile(strBDwoExt & "ERR.txt", True, False)
       ErrFile.Write FormatDateTime(Now, 2) & "  " & FormatDateTime(Now, 3) & _
                     "  Erreur " & CStr(ErrNum) & " : " & ErrDesc
       ErrFile.Close
    End If
     
     
     
     
     
     
     
    'copier base + efface les plus ancienne
     
    Function FileCp (strSourceFile, strTargetFile)
       Const OverwriteExisting = True
       Set objFSO = CreateObject("Scripting.FileSystemObject" )
       If Not objFSO.FileExists(strSourceFile) Then
          MsgBox "Fichier " & strSourceFile & " introuvable", vbExclamation
          Exit Function
       End If
       objFSO.CopyFile strSourceFile , strTargetFile, OverwriteExisting
       Set objFSO = Nothing
     
    End Function
     
          FileCp "D:\aa\bb\ACCESBASESTAGNE\BASETABLE\APPSA.mdb", "D:\aa\bb\ACCESBASESTAGNE\BASETABLE\Sauve base journaliere\"& "APPSA "& Right(Date, 4) & " " & Mid(Date,4,2) & " " & Left(Date,2) & ".mdb"
     
     
     
     
    Dim Fso2
    Dim Directory 
    Dim Modified
    Dim Files 
    Set Fso2 = CreateObject("Scripting.FileSystemObject" )
    Set Directory = Fso2.GetFolder("D:\aa\bb\ACCESBASESTAGNE\BASETABLE\Sauve base journaliere" )
    Set Files = Directory.Files 
     
    For Each Modified in Files
    If DateDiff("D", Modified.DateLastModified, Now) > 180 Then Modified.Delete
    Next
     
     
     
     
     
    'suppression base bak crée pour rien
    Dim fso5
     
    'instanciation
    Set FSO5 = CreateObject("Scripting.FileSystemObject")
     
    'Suppression du fichier
    Set Ftxt = fso5.GetFile("APPSA.bak.mdb")   'Fichier origine
    Ftxt.delete

    sa repond a tes question?

  5. #5
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    salut à tous,

    Citation Envoyé par Julie!!!
    "Si vous appliquez l'instruction FileCopy à un fichier ouvert, une erreur se produit."
    je pensais comme toi, mais il est possible de copier avec fso.CopyFile
    tu trouveras dans cette discution sur la sauvegarde automatique un autre code de notre ami francishop.

    merci popofpopof pour le tien. je jetterais un oeil dessus car je n'ai pas fini d'étudier la question pour mes besoins.

    toutefois Julie!!!, j'ai le souvenir d'avoir réussi à produire: "permission refusée" avec "CopyFile" dans une circonstance très particulière.
    pour éviter cela, je n'ai pas trouvé d'autre solution que de faire sauter le partage du fichier. (en envoyant préalablement une notification aux postes concernés)
    il est aussi possible de mettre en place une gestion d'erreur et différer la copie.


  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Mars 2006
    Messages
    1 350
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 350
    Points : 1 701
    Points
    1 701
    Par défaut
    Bonsoir à tous,

    Les demandes semblent similaires, donc même motif, même punition :

    http://www.developpez.net/forums/d60...r/#post3749871

    Cordialement.

    Ps : Un salut particulier à l'ami Vodiem, pour qui les journées semblent démarrer de bonne heure.. Si ce n'est se finir?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 55
    Points : 49
    Points
    49
    Par défaut Résolu


    Bonjour,

    J'ai testé le code de la solution de francishop et ça marche.

    Merci à tous

    Julie

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2013, 09h59
  2. [AC-2007] Sauvegarder la base dorsale
    Par Petit Rasta dans le forum VBA Access
    Réponses: 5
    Dernier message: 08/11/2010, 10h33
  3. Sauvegarde base Sybase à partir d'un poste client
    Par patgabjoe dans le forum Sybase
    Réponses: 0
    Dernier message: 04/11/2009, 18h20
  4. Sauvegarde base dorsale avec incrément par jour
    Par Marcopololo dans le forum VBA Access
    Réponses: 11
    Dernier message: 01/11/2008, 08h38
  5. [VBA] Bouton Sauvegarde de base dorsale
    Par wazodnuit dans le forum Access
    Réponses: 6
    Dernier message: 05/08/2006, 04h43

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