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 :

Fichier batch pour mise à jour d'une base


Sujet :

VBA Access

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut Fichier batch pour mise à jour d'une base
    Bonjour

    Ma base frontale est hébergée sur chaque PC tandis que la dorsale est en réseau. Chaque fois que je mets à jour la frontale, je lance une routine qui compare la version que je viens de créer à celle de chaque poste. Ainsi, à l'ouverture de la base, si la version est différente, je lance le fichier script MAJ_CCVDB.vbs. C'est le seul code que j'ai pu trouver facilement

    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
     
    '####################################################################
    '#  Permet l'installation d'une bdd d'un réseau vers user connectés #
    '####################################################################
     
    'instance
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set net = CreateObject("Wscript.Network")
    Set WshShell = WScript.CreateObject("WScript.Shell")
     
    'Test si fichier éxistant sur serveur.
    If fso.FileExists ("\\Chu06nas1\n06ane2\CCV DataBase.mdb") 			Then
     
    	msgbox "Cliquez sur OK pour continuez. La copie de la base va prendre une dizaine de secondes"
     
        'Copie du Fichier du serveur vers le pc utilisateurs
    		fso.CopyFile "\\Chu06nas1\n06ane2\CCV DataBase.mdb","C:\CCV DataBase\CCV DataBase.mdb"
     
    	msgbox "La base à été mise à jour avec succés"
     
     
    WshShell.Run """C:\Program Files\Microsoft Office\Office\MSACCESS.EXE"" ""C:\CCV DataBase\CCV DataBase.mdb"""
     
     
     
    Else
     
        'Avertissement si fichier non éxistant
        msgbox "Problème rencontré lors de la connexion au serveur.", vbExclamation, "Mise à Jour"
     
    End If
    Mais le vbs me pose 2 problèmes: il faut que l'utilisateur valide des autorisations pour exécuter le fichier (ce qui l'oblige à cliquez plusieurs fois, sans trop comprendre ce qui lui ai demandé et il n'y a pas de barre d'avancement de la copie de fichier, mais une dizaine de seconde pendant lesquelles il ne se passe rien.
    Pensez-vous qu'il existe un autre code plus simple (batch ou exe) ou que je sois en mesure de faire ? Merci d'avance.

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 345
    Points : 23 805
    Points
    23 805
    Par défaut
    Personnelement j'utilise Setup Generator c'est un outils gratuit qui te permets de générer un .exe d'installation avec quelques beaux écrans très professionnels et une barre de progression.

    Losrque je détecte une nouvelle version j'affiche un message à l'utilisateur qui le préviens que la BD va se fermer et que la mise à jour va commencer. Il se rertouve ensuite face à un écran qui lui demande de confirmer l'installation et le processus démare.

    Seul contrainte il installe seulement C:\Program Files ce qui peut poser un pb si tes utilisateurs ne sont pas admin de leurs machine. Je crois que la version payante te laisse choisir le lieux de l'instal mais ce n'est pas certain.

    Ici le code qui lance l'installation.

    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
        If Not versionOK Then
     
            Dim mess As String
            mess = "La version " & NUM_VERSION_APPLICATION & " n'est plus valide."
            mess = mess & vbNewLine & "Vous allez devoir installer une nouvelle version."
            mess = mess & vbNewLine
            mess = mess & vbNewLine & "L'application va se fermer et lancer le programme d'installation."
            MsgBox mess, vbInformation
     
            Shell "cmd /c """ & cheminInstallation & """"
     
            If Not (EstDev() And MODE_DEBUG) Then
                DoCmd.Quit
            End If
       End if
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    Merci pour l'astuce mais effectivement, j'ai une restriction d'installation en program files. Mais l'idée me séduit et je vais essayer de trouver le bon logiciel;
    Néanmoins, je reste preneur d'un petit fichier .bat ou autre.

  4. #4
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut,

    Moi je fais cela depuis Access, ta bdd t'ouvre une autre bdd qui vient écraser ta bse cliente puis tu réouvre ta bdd cliente.

    sinon en soft tu as Inno Setup (2tutos à ce sujet) :

    http://thierryaim.developpez.com/tut...tup/isdistrib/
    http://thierryaim.developpez.com/tut...osetup/iscode/


    Dolphy

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    Justement, par quel mécanisme la nouvelle bdd vient écraser l'ancienne ? Parce que c'est ce que je fais par un copier coller. Comment une base qui se fait écraser peut déclencher du code sans passer par un autre programme ? La nouvelle base est d'abord copiée puis doit détruire l'ancienne et prendre son nom ? Je peux avoir quelques précisions s'il te plait ? Merci d'avance

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2007
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 22
    Points : 30
    Points
    30
    Par défaut
    Salut

    Comme l'indique dolphy35, une solution peut être d'utiliser une base tierce. J'avais fait un truc comme ça pour un ancien travail mais je n'ai plus le code disponible. L'idée était la suivante:

    Par exemple, on a une frontale ClientV1.0.0.mdb à mettre à jour vers ClientV1.0.1.mdb On va utiliser une base tierce Clientupdate.mdb

    1- ClientV1.0.0.mdb ouvre ClientUpdate.mdb et se ferme
    Voir la FAQ http://access.developpez.com/faq/?pa...ss#OuvrBddForm

    2- ClientUpdate.mdb écrase ClientV1.0.0.mdb avec clientV1.0.1.mdb, l'ouvre et se ferme
    Voir le tuto http://warin.developpez.com/access/fichiers/ pour la gestion des fichiers.

    Ce schéma de base doit être adaptée aux spécificités de chaque cas concrets (dans mon exemple, à cause du changement de nom, il faudrait aussi "mettre à jour" d'éventuels raccourcis ou items du menu démarrer... ou ne pas changer le nom du fichier, ça semble plus simple :p ).


    Bon courage

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Août 2005
    Messages : 525
    Points : 194
    Points
    194
    Par défaut
    Suis-je stupide ! je n'avais pas pensé à passer par une base tierce. Je pense que cela va résoudre tous mes problèmes. Je ne mets pas résolu le temps de faire la manip mais je suis sûr que cela va aller.
    Merci pour vos précieux conseils.

  8. #8
    Expert éminent sénior
    Avatar de Dolphy35
    Homme Profil pro
    Responsable Systemes d'Information
    Inscrit en
    Octobre 2004
    Messages
    4 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable Systemes d'Information
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 373
    Points : 11 218
    Points
    11 218
    Par défaut
    Salut,

    Voici le code nécessaire pour gérer la mise à jour :

    Le principe est d'ouvrir le formulaire d'une autre base se trouvant dans le même dossier, cette base effectue une copie du serveur vers le dossier du PC client, du fait qu'il est le même nom la nouvelle écrase la précédente. Juste avant la copie je renomme la bdd actuelle en changeant l'extension pour mettre bck à la place de mdb, ceci permet d'avoir la version - 1 si problème.

    1 - Copie se code dans un nouveau module de ta base cliente et ta base de MAJ.

    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
    Option Compare Database
     
    Private Declare Function apiSetForegroundWindow Lib "user32" _
                Alias "SetForegroundWindow" _
                (ByVal hwnd As Long) _
                As Long
     
    Private Declare Function apiShowWindow Lib "user32" _
                Alias "ShowWindow" _
                (ByVal hwnd As Long, _
                ByVal nCmdShow As Long) _
                As Long
     
    Private Const SW_MAXIMIZE = 3
    Private Const SW_NORMAL = 1
    '
     
     
    Function MAJ_Base()
     
    'Fonction permettant la montée de version de la base.
    '1-Ouverture base MAJ (contient toutes les cdes DOS).
    '2-Fermeture de cette base.
    '3-Exécution MAJ.
    '4-Fermeture de la Base MAJ
    '5-Ouverture de celle-ci (nouvelle version).
     
        ' Initialise la chaîne au chemin d'accès à la base de données.
        ' Crée une nouvelle instance de Microsoft Access.
     
            Set objAccess = New Access.Application
            With objAccess
                lngRet = apiSetForegroundWindow(.hWndAccessApp)
                lngRet = apiShowWindow(.hWndAccessApp, SW_NORMAL)
                'le premier appel à  ShowWindow semble rester sans effet
                lngRet = apiShowWindow(.hWndAccessApp, SW_MAXIMIZE)
                .OpenCurrentDatabase CurrentProject.Path & "\MAJ.mdb"
                .DoCmd.OpenForm "frmMAJ" ', , , , , , Application.CurrentDb.Name
            End With
        DoCmd.Quit
     
    End Function
    Mais le nom de ta base sur cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .OpenCurrentDatabase CurrentProject.Path & "\MAJ.mdb"
    le nom du Formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .DoCmd.OpenForm "frmMAJ" ', , , , , ,
    2 - Il te suffit de créer ton code dans la base de mise à jour, renommer l'ancienne base, tester la présence sur le serveur de la nouvelle bdd, effectue la copie avec animation sur un formulaire pour signaler qu'un travail est en cours, une fois la copie finie il te suffit d'appeler le même code que précédemment pour ouvrir la base cliente sur le poste sur le formulaire de démarrage.

    Si tu veux rendre plus professionnel ta bdd, tu créer un champ bool qui est à 1 et lors de l'aafichage du form de démarrage tu test ce champ pour afficher un message de bienvenue dans le nouvelle version avec quelques ligne pour expliquer les nouvelles fonctions et tu met le champ à 0 ensuite ce qui fait qu'au prochain démarrage pas de message.

    3 - pour appeler la fonction il te suffit de mettre :
    Tu devrais t'en sortir avec cela.


    Dolphy

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 23/08/2014, 13h12
  2. [Débutant] Petit conseil pour mise à jour d'une base de données
    Par Nixeus dans le forum C#
    Réponses: 3
    Dernier message: 01/12/2011, 11h56
  3. Réponses: 4
    Dernier message: 05/08/2009, 14h00
  4. Réponses: 7
    Dernier message: 13/08/2007, 13h15
  5. Réponses: 3
    Dernier message: 18/07/2007, 17h20

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