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 :

[Access]Détection automatique et ouverture d'une application en client/serveur


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut [Access]Détection automatique et ouverture d'une application en client/serveur
    Bonjour,

    Je développe sous access 2003 en client/serveur. Ma base est située sur le serveur et les interfaces sur les postes clients.
    J'ai un petit souci: après avoir fait évolué l'interface, il me faut informer tous les utilisateurs qu'un nouvel interface est disponible. Généralement, ils en font une copie en local et écrasent l'ancienne version.
    Je voudrais savoir s'il est possible, lorsqu'un utilisateur double-clique sur un raccourci :
    - de vérifier s'il n'existe pas une nouvelle version sur le serveur,
    - si oui, la copier en local (écrasant ainsi l'ancienne),
    - ouvrir le nouvel interface.
    J'ai beau foirefouiller un peu partout, mais je ne trouve pas mon bonheur.
    En vous remerciant d'avance.
    Bon's

  2. #2
    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
    Bonjour et bienvenue sur le Forum,

    Récemment on m'a demandé de faire une mise à jour automatique sur base Frontale/Dorsale;

    -Je possède deux tables, une table liée et une autre intégrée à la Frontale, au démarrage je fais une comparaison entre le deux tables si divergence j'affiche un message pour prévenir l'utilisateur.
    Ensuite je ferme la bdd Frontale et j'ouvre une autre bdd de mise à jour qui vient copier la bdd dispo sur le serveur à la place de la Frontale, à lz fin de la MAJ je ferme la bdd de mise à jour pour ouvrir la bdd Frontale à jour => le tout en vba pour automatiser l'ensemble.

    - Une autre solution tu peux faire la copie du srveur vers le poste utilisateur par un fichier batch.

    - Une autre, au lieu du fichier batch tu fais un fichier vbs, je préfère le fichier vbs car tu peux générer des messages, je m'en sers pour installer les bdd sur les postes utilisateurs, j'envoi le fichier par mail => ce fichier créer un dossier dans l'ID de la personne connectée et place un raccourci sur son bureau.

    Dis-nous ce que tu veux faire exéctement à fin que l'on puisse t'aider.

    Dolphy

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Salut Dolphy,
    Je tiens avant tout à te remercier pour ta réponse éclair. J’avais oublié de préciser dans mon post que la plupart des utilisateurs ont un RUNTIME (pour des raisons économiques sans doute).
    Pour être plus précis, je suis souvent amené à faire évoluer la bdd frontale. Lorsque c’est chose faite, je dois prévenir chacun des utilisateurs qu’une nouvelle version de l’interface (que nous appellerons MaFrontale.mdb) est disponible dans un répertoire d’échange du serveur (lequel est accessible à tous). Alors, ils la copient en local (\Mes documents), écrasant ainsi l’ancienne bdd frontale.
    Est-il possible (par exemple) que sur un double –clic sur le raccourci de la frontale :
    -un control soit préalablement effectué dans le répertoire d’échange. S’il y existe le fichier MaFrontale.mdb, le copier dans mon répertoire local.
    - Ouvrir la nouvelle bdd frontale MaFrontale.mdb.
    - Si ce fichier n’existe pas dans le répertoire d’échange, ouvrir l’ancienne bdd frontale.
    Une telle opération (transparente pour l’utilisateur) est-elle possible ?
    Mes explications te semblent-elles plus claires à présent ?
    Si une telle procédure s’avère irréalisable, quelle approche me conseillerais-tu ?
    Mille fois merci pour l’aide précieuse que tu m’apportes.
    Bon’s

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 47
    Points : 52
    Points
    52
    Par défaut
    Salut,

    Il me semble que l'execution d'un batch sur ton raccourci serait approprié. je ne connais pas les commandes mais il doit bien y avoir un test d'existence de fichier ou alors une comparaison de taille ou de date afin de copier ou non la nouvelle bdd.

  5. #5
    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,

    Citation Envoyé par Mig21
    Salut,
    Il me semble que l'execution d'un batch sur ton raccourci serait approprié. je ne connais pas les commandes mais il doit bien y avoir un test d'existence de fichier ou alors une comparaison de taille ou de date afin de copier ou non la nouvelle bdd.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If not exist C:\Users\Dolphy\Documents\Access\test.txt Copy C:\Users\Dolphy\Documents\test.txt C:\Users\Dolphy\Documents\Access\test.txt
    Si le fichier test.txt n'éxiste pas dans le dossier ...\Access je copie le fichier test.txt situé dans mes documents pour le placer dans le dossier Access.




    @ Bon's

    J'ai été confronté par ce problème et je n'ai pas trouvé l'astuce, le problème est que tu ne pas excuter tout le code de ta frontale => l'action de copier du serveur vers le poste de l'utilisateur nécéssite que la bdd Frontale soit fermée, c'est pour cela que l'action de copier du serveur vers poste UTI je passe par une autre bdd.
    Le 2ème bdd se situe dans le même répertoire que la Frontale, lorsque je lance la mise à jour j'éxécute un code qui ferme la Frontale et ouvre la bdd de MAJ, celle-ci copie du serveur vers le poste UTI et ensuite je ré-ouvre la bdd Frontale, ceci est automatisée du fait c'et transparent pour l'uti. En gros ma bdd Frontale fait 30Mo et cela prend 20s .

    Ceci est réalisable également avec un fichier vbs à la place de la bdd MAJ.

    dis moi ce que tu préfère et je t'expliquerai mon code.

    Dolphy

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Dolphy35
    Salut,



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If not exist C:\Users\Dolphy\Documents\Access\test.txt Copy C:\Users\Dolphy\Documents\test.txt C:\Users\Dolphy\Documents\Access\test.txt
    Si le fichier test.txt n'éxiste pas dans le dossier ...\Access je copie le fichier test.txt situé dans mes documents pour le placer dans le dossier Access.




    @ Bon's

    J'ai été confronté par ce problème et je n'ai pas trouvé l'astuce, le problème est que tu ne pas excuter tout le code de ta frontale => l'action de copier du serveur vers le poste de l'utilisateur nécéssite que la bdd Frontale soit fermée, c'est pour cela que l'action de copier du serveur vers poste UTI je passe par une autre bdd.
    Le 2ème bdd se situe dans le même répertoire que la Frontale, lorsque je lance la mise à jour j'éxécute un code qui ferme la Frontale et ouvre la bdd de MAJ, celle-ci copie du serveur vers le poste UTI et ensuite je ré-ouvre la bdd Frontale, ceci est automatisée du fait c'et transparent pour l'uti. En gros ma bdd Frontale fait 30Mo et cela prend 20s .

    Ceci est réalisable également avec un fichier vbs à la place de la bdd MAJ.

    dis moi ce que tu préfère et je t'expliquerai mon code.

    Dolphy
    @ Dolphy,

    Comme toi, ma préférence va à l'utilisation d'un fichier VBS. Car si en prime, je peux générer des messages... Que demander de plus ? Je salive déjà.

  7. #7
    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
    re,

    Voici un exemple de code à mettre dans un fichier vbs :

    Code vbs : 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
    '####################################################################
    '#                      Création Dolphy35                           #
    '#  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 ("\\NOMPC\Fichier\MaBase.mdb")    Then
     
        'Copie du Fichier du serveur vers le pc utilisateurs
      fso.CopyFile "\\NOMPC\Fichier\MaBase.mdb","C:\Documents and Settings\" & net.username & "\Fichier\"
     
        'Ouvre le fichier copié  
      intReturn = WshShell.Run("C:\Documents and Settings\" & net.username & "\Fichier\MaBase.mdb" , 1, TRUE)
    Else
        'Avertissement si fichier non éxistant
        msgbox "Problème rencontré lors de la connexion au serveur.", vbExclamation, "Mise à Jour"
     
    End If

    Tu mets ce code en renseignant le nom du serveur et nom de la base dans un document notepad et tu enregistre avec l'extension vbs.

    Dolphy

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Dolphy35
    re,

    Voici un exemple de code à mettre dans un fichier vbs :

    Code vbs : 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
    '####################################################################
    '#                      Création Dolphy35                           #
    '#  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 ("\\NOMPC\Fichier\MaBase.mdb")    Then
     
        'Copie du Fichier du serveur vers le pc utilisateurs
      fso.CopyFile "\\NOMPC\Fichier\MaBase.mdb","C:\Documents and Settings\" & net.username & "\Fichier\"
     
        'Ouvre le fichier copié  
      intReturn = WshShell.Run("C:\Documents and Settings\" & net.username & "\Fichier\MaBase.mdb" , 1, TRUE)
    Else
        'Avertissement si fichier non éxistant
        msgbox "Problème rencontré lors de la connexion au serveur.", vbExclamation, "Mise à Jour"
     
    End If

    Tu mets ce code en renseignant le nom du serveur et nom de la base dans un document notepad et tu enregistre avec l'extension vbs.

    Dolphy
    @ Dolphy,

    Tu es trop fort !!! Je le testerai demain au boulot et je te chanterai ma joie. Je vais même commencer dès ce soir. Mille fois merci Dolphy.
    Tra-la-la-la-la-la-lère .....

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    @ Hi Dolphy,

    J'ai effectué un test sur mon PC.
    Dans un répertoire "C:\Mes logiciels\Serveur\", j'ai mis une base que l'ai appelé "BD_TEST.mdb".
    Dans un autre répertoire "C:\Documents and Settings\mon_nom\Fichier\", j'ai l'ancienne bdd frontale du même nom (BD_TEST.mdb).
    J'ai modifié le fichier VBS de manière à prendre en compte le répertoire d'origine et celui de destination, comme suit :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Set fso = CreateObject("Scripting.FileSystemObject")
    chemin_complet_base = "c:\Mes logiciels\Serveur\BD_TEST.mdb"
    Set net = CreateObject("Wscript.Network")
    Set WshShell = WScript.CreateObject("WScript.Shell")
     
    'Test si fichier éxistant sur serveur.
    If fso.FileExists (chemin_complet_base) 			Then
     
        'Copie du Fichier du serveur vers le pc utilisateurs
    		fso.CopyFile chemin_complet_base ,"C:\Documents and Settings\" & net.username & "\Fichier\"
     
        'Ouvre le fichier copié		
    		intReturn = WshShell.Run("C:\Documents and Settings\" & net.username & "\Fichier\BD_TEST.mdb" , 1, TRUE)
    End If
    Clic droit sur le fichier vbs et sélection du sous-menu "Ouvrir avec l’Invite de commandes" et le résultat est le suivant :
    - la base est copiée depuis le répertoire d’origine vers le répertoire de destination.
    - Par contre, son ouverture ne se fait pas …

    Lorsque j’ouvre le fichier Test.vbs à l’aide de Windows Script host, j’ai un message d’erreur concernant la ligne 13 : "Le fichier spécifié est introuvable". Code : 80070002 ; Source : (null).
    La ligne est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    intReturn = WshShell.Run("C:\Documents and Settings\" & net.username & "\Fichier\BD_TEST.mdb" , 1, TRUE)
    Ce qui est absurde puisque je l’ai juste sous les yeux. Et son répertoire est correctement saisi lui aussi.

    Au fait, à quoi correspondent ces paramètres en ligne 13 (1 et TRUE) ?

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    @ Dolphy,

    ça y est ! J'y suis arrivé. J'ai rentré le script suivant (pour ceux que ça pourrait intéresser) :

    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
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set net = CreateObject("Wscript.Network")
    Set WshShell = WScript.CreateObject("WScript.Shell")
    Set appAccess = Wscript.CreateObject("Access.Application")
     
    chemin_complet_base = "c:\Mes logiciels\Serveur\BD_TEST.mdb"
    chemin_complet_interface = "C:\Tests\BD_TEST.mdb"
    repertoire_destination = "C:\Tests\"
     
    'Test si fichier éxistant sur serveur.
    If fso.FileExists (chemin_complet_base) Then
     
       'Copie du Fichier du serveur vers le pc utilisateurs
       fso.CopyFile chemin_complet_base ,repertoire_destination
     
       ' Affichage de l'application
       appAccess.Visible = TRUE
       ' Ouverture dans la fenêtre ACCESS, de la base copiée.
       appAccess.OpenCurrentDatabase chemin_complet_interface
    End If
    Un double-clic sur le fichier .vbs et le tour est joué.
    Et ça marche du feu de Dieu.
    Mille fois merci Monsieur Dolphy.

  11. #11
    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,



    heureux de t'avoir dépanné

    Dolphy

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Salut Dolphy,

    Ce qui est dommage, c’est que je n’arrive pas à avoir Access en plein écran lors de l'ouverture d'une base.
    J’ai créé une macro dans la nouvelle base fontale avec les actions :
    - exécute le code suivant :

    Code vba : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Function Agrandir_fenetre_Base()
    Set objAccess = New Access.Application
    lngRet = apiSetForegroundWindow(objAccess.hWndAccessApp)
    lngRet = apiShowWindow(objAccess.hWndAccessApp, SW_MAXIMIZE)
    End Function
    - puis ouvre le formulaire1

    Bien sûr, les 2 fonctions sont déclarées dans le module.

    Lorsque je lance l’appli depuis la nouvelle bdd frontale, tout se passe bien. Par contre, depuis le fichier de script vbs, ACCESS reste toute petite. J’ai comme l’impression qu’il est nécessaire de rajouter quelques lignes de script dans le fichier vbs pour avoir le plein écran.
    Qu’en penses-tu ?

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    La solution:

    Il suffit de faire sauter "New" dans la 1ère ligne de la fonction. Cela donnerait alors :
    Set objAccess = Access.Application

    Cette fonction reprend un bout de code que Kloun et toi aviez déposé sur le forum.
    http://www.developpez.net/forums/arc...p/t-97131.html

    C'est fun. Merci pour tout.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2013
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 13
    Points : 17
    Points
    17
    Par défaut Mettre à jour la base frontale en VBA
    Citation Envoyé par Dolphy35 Voir le message
    Bonjour et bienvenue sur le Forum,

    Récemment on m'a demandé de faire une mise à jour automatique sur base Frontale/Dorsale;

    -Je possède deux tables, une table liée et une autre intégrée à la Frontale, au démarrage je fais une comparaison entre le deux tables si divergence j'affiche un message pour prévenir l'utilisateur.
    Ensuite je ferme la bdd Frontale et j'ouvre une autre bdd de mise à jour qui vient copier la bdd dispo sur le serveur à la place de la Frontale, à lz fin de la MAJ je ferme la bdd de mise à jour pour ouvrir la bdd Frontale à jour => le tout en vba pour automatiser l'ensemble.

    - Une autre solution tu peux faire la copie du srveur vers le poste utilisateur par un fichier batch.

    - Une autre, au lieu du fichier batch tu fais un fichier vbs, je préfère le fichier vbs car tu peux générer des messages, je m'en sers pour installer les bdd sur les postes utilisateurs, j'envoi le fichier par mail => ce fichier créer un dossier dans l'ID de la personne connectée et place un raccourci sur son bureau.

    Dis-nous ce que tu veux faire exéctement à fin que l'on puisse t'aider.

    Dolphy
    Bonjour Dolphy,

    Bravo pour les solutions que tu as proposé.

    Je vais essayer ta méthode en VBA Access afin d'éviter de changer la méthode d'ouverture de l'appli.
    Je pense utiliser une table lié pour passer les infos entre la BDD frontale et la BDD MAJ.

    Est-ce la meilleure méthode ?

    Merci pour vos conseils
    Chris

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

Discussions similaires

  1. [Débutant] Transformer une application en client/serveur
    Par JOLIE MIMI dans le forum Framework .NET
    Réponses: 3
    Dernier message: 02/01/2014, 20h38
  2. Conseils pour une application Java ( client/serveur )
    Par Jose.N70 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 01/08/2012, 16h42
  3. Windev Création/conversion d'une application en client/serveur
    Par dewind dans le forum Langages de programmation
    Réponses: 0
    Dernier message: 04/02/2012, 16h22
  4. Réponses: 0
    Dernier message: 20/09/2010, 21h56
  5. Réponses: 1
    Dernier message: 19/09/2008, 09h29

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