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

Sécurité Discussion :

mise à jour base frontale à l'ouverture [AC-2007]


Sujet :

Sécurité

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 291
    Points
    291
    Billets dans le blog
    1
    Par défaut mise à jour base frontale à l'ouverture
    Bonjour,

    En parcourant le forum, j'ai trouvé une info intéressante dans le sujet ci-dessous:

    http://www.developpez.net/forums/d79...ontal-serveur/

    concernant la mise à jour d'une base frontale sur les postes clients à l'ouverture (abordé par Dolphy35)

    Mes bases sont scindées en dorsale (sur serveur) et frontales sur les clients mais il est vrai que la mise à jour est parfois fastidieuse (oubli de ma part de faire la modif sur tous les postes)

    j'aimerai donc savoir comment procéder pour faire une MAJ automatique

    merci

  2. #2
    Rédacteur/Modérateur

    Avatar de Heureux-oli
    Homme Profil pro
    Contrôleur d'industrie
    Inscrit en
    Février 2006
    Messages
    21 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Contrôleur d'industrie
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 21 087
    Points : 42 926
    Points
    42 926
    Par défaut
    Salut,

    Si tu as les droits admin sur le réseau, j'utilise une méthode assez simple.
    J'ai dans une table la liste des machines présentes sur mon domaine.
    Je peux choisir ou non les machines avec une case à cocher, mais c'est facultatif.

    La version originale de la DB se trouve sur ma machine, mais elle n'est originale qu'avant la copie.

    Ensuite avec FileSystemObject, je copie sur toutes les machines qui ont leur nom dans la table l'application.

    http://warin.developpez.com/access/fichiers/
    J'ai pas encore de décodeur, alors, postez en clair ! Comment mettre une balise de code ?
    Débutez en VBA

    Mes articles


    Dans un MP, vous pouvez me dire que je suis beau, ... mais si c'est une question technique je ne la lis pas ! Vous êtes prévenus !

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Bonjour

    Le souci avec cette méthode, je trouve, est que les utilisateurs doivent être déconnectés, et que , comme tu le dis, il faut être admin. Perso je travail au service qualité et ne suis pas admin, j'ai donc du trouver une autre méthode, certe un peu plus complexe (pas tant que ca au final).

    En gros, dans la back (base dorsale) jai une table "Version_back" qui est liée dans les frontales, et dans chaque frontale jai une table "Version_front" qui est la seule non liée. ces table ne contiennent qu'un enregistrement (1,0 par ex) au format nombre, représentant la version (suis je trop explicite ? ..)
    A l'ouverture de la frontale, un test auto permet de détecter la différence de version.

    Si une maj est détectée je lance un .vbs (fourni avec la frontale par ex, ou sur un serveur) qui va attendre que l'ancienne version se ferme (test du .laccdb) pour copier la nouvelle version, puis redémarrer la nouvelle base !

    Cela ne prend que quelque secondes et est transparent pour l'utilisateur.

  4. #4
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut Les mises à jour
    Bonjour,

    Je m'insère ici pour filer une alternative

    Sur le domaine où j'ai expérimenté les mises à jour :

    personne n'est admin les utilisateurs sont juste dans le groupe "utilisateurs avec pouvoir"
    les mises à jour se font au login dans le script général avec un vbs
    le vbs fait ensuite un log des machines qui ont la MàJ


    on pourrait ajouter l'obligation de faire la mise à jour avec un N° de version stocké dans la base centrale, chose que je ne fait pas car les utilisateurs attendent tjs les MàJ avec frénésie puisque c'est eux qui en font la demande.

    a+

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    euu si j'ai bien compris c'est exactement la solution que je proposai mis à part que je n'ai
    pas à faire de log des poste mis à jour étant donné que la maj est automatique au lancement de la base

  6. #6
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut les MàJ
    Bonjour,

    A l'ouverture de la frontale, un test auto permet de détecter la différence de version
    Ce que je propose, Niko c'est au login de l'utilisateur ou dans la registry pas de base à ouvrir.

    Ceci dit je suis en train de tester une version d'auto-update, car ce souci d'auto-update m'a pris la tête.
    Le frontal détecte une mise à jour il se ferme copie la nouvelle base et se relance.

    Cette possibilité est basée sur un script incroyable trouvé sur le net mais on m'a interdit de filer des url externes dans les posts hier.
    a+


    a+

  7. #7
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut Les mises à jour la suite
    Bonjour,

    Très très bonne nouvelle ça marche nickel, avec base centrale sur le réseau et frontaux compilés.

    Pas de script, pas de login, pas de base lanceur juste le frontal courant et un répertoire où se trouve le nouveau frontal.

    a+

  8. #8
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Salut,

    Peux tu décrire plus précisément ton processus de maj ?
    Je suis en train de tester actuellement une auto maj à partir d'un vbs très simple que j'ai cree, pour l'instant ca fonctionne à merveille, mais à titre comparatif ta solution m'interesse.

    Merci

  9. #9
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut La suite
    Bonjour,

    En pièce attachée la doc et le code.

    Bonne tiens nous informé si des pépins.
    a+
    Images attachées Images attachées

  10. #10
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut rectif
    Bonsoir,

    une petite rectif une ligne à ajouter dans le premier test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    ' accdb pour 2007 et mdb pour <= 2003
    If right(Application.CurrentProject.Name, 5) <> "accdb" Then
        If VerificationMaJ <> "Aucun" Then
            MsgBox "Une mise à jour est à faire !" + vbCrLf + "Le programme va devoir redémarrer.", vbInformation, "Attention"
            Restart
        End If
    End If
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        If VerificationMaJ <> "Aucun" Then
            MsgBox "Une mise à jour est à faire !" + vbCrLf + "Le programme va devoir redémarrer.", vbInformation, "Attention"
            Restart
        End If
    Sinon on peut tuer le frontal en cours de developpement

    a+

  11. #11
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Ah ok ! C'est en effet bcp plus compliqué, je suis désolé mais perso je n'ai pas le niveau pour pouvoir comprendre, et donc commenter ou débuger en cas de soucis.
    Je prefere utiliser un code que je comprends
    Afin de simplifier les choses, je connais l'emplacement de ma frontale, qui est la meme sur tous les poste (C:\Basemetrologie). Mais en modifiant légerement le code on pourrait trouver le chemin si inconnu.

    J'ai également une table version dans chaque base, avec uniquement le champs indiquant la version, on peut aussi très simplement y associer une date et d'autres informations si nécessaire.

    Lorsque je désire mettre la base à jour, je copie le frontale modifié avec le bon numero de version dans l'emplacement de la base dorsale (qui sera de ce faite accessible par tout le monde), puis je modifie en dur le numéro de version dans la dorsale : pour les utilisatuers, à la prochaine ouverture de leur frontale elle se mettra à jour. (on peut aussi imaginer un timer qui verifie le champ régulierement)

    Voici le code que j'utilise :

    -code à mettre en haut d'un module (ou du sub concerné)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hWnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
    - Code à mettre dans l'évènement "sur activation" du formulaire d'ouverture de la base (par 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
     
    Private Sub Form_Current()
    On Error GoTo err_form_current
     
    Dim version As Recordset 'table version dans base frontale
    Dim version_back As Recordset ' table version dans base dorsale
    Dim Fichier As String, Chemin As String
     
    Set version = CurrentDb.OpenRecordset("Version")
    Set version_back = CurrentDb.OpenRecordset("Version_back")
     
    If version!champ1 < version_back!champ1 Then 'si la version en cours (base frontale) est périmée on lance la maj
        MsgBox "La base n'est plus à jour, une mise à jour automatique va  s'effectuer"
        Chemin = "C:\Basemetrologie\" 'chemin de la base, qui est ici connu
        Fichier = "C:\Basemetrologie\maj.vbs" ' chemin du .vbs
        ShellExecute 0, "open", Fichier, vbNullString, Chemin, 1 'on lance le .vbs
        Application.Quit acQuitSaveAll 'on ferme access
    Else
        If version!champ1 > version_back!champ1 Then
            MsgBox "Une erreur de version est apparue, prévenez l'administrateur de la base"
            Application.Quit acQuitSaveNone
        End If
     
    End If
     
    err_res:
    Exit Sub
     
    err_form_current:
    MsgBox Err.Number & vbCrLf & Err.Description
    Resume err_res
    End Sub
    - Et le code du .vbs à placer dans le rep de la frontale ( ou autre en fonction du besoin)
    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
     
    dim chemin
    dim fichier
     
    Set objFSO = CreateObject("Scripting.FileSystemObject")  
    set obj = createobject("wscript.shell")
     
    ldfPath = "C:\Basemetrologie\metrologie.laccdb"
    SourcePath ="\\nasgenana\Commun\BasesDeDonnees\metrologie.accdr" 'emplacement de la frontale à jour
    DestPath = "C:\Basemetrologie\metrologie.accdr"'emplacement de la frontale à mettre à jour
     
    n=0
    '-------------------
    Do 
    	  Wscript.Sleep(1000) ' histoire de ne pas trop surcharger le proc.
    	  n=n+1
     
    Loop Until (Not objFSO.FileExists(ldfPath)) or (n>15)
    ' des que le .laccdb disparait, c'est que la base est fermée, on peut lancer la copie
    if n>15 then 
    	msgbox "Erreur relative à la fermeture de la base, délai trop long"
    else
    	objFSO.CopyFile  SourcePath,DestPath,True
    	msgbox "Mise à jour effectuée avec succès !"
        obj.Run DestPath,,false'on relance la nouvelle base à jour !
    End if
    Voila, j'avoue que le niveau n'est pas très haut, mais ca marche !
    Je suis ouvert à tout commentaire

  12. #12
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut La solution
    Bonjour,

    Un petit commentaire à propos de ta solution.

    La solution que tu proposes impose des emplacements physiques en dur et de plus dans le code du frontal, pour ma part c'est ne pas gérable.

    Aucun des sites sur lesquels j'interviens ne se ressemblent, je ne peux pas imposer des unités logiques ou une arborescence à ces clients. De plus certains bossent avec TSE et ces gens ont le même frontal mais avec des noms différents !!

    Je dois donc penser à une mise à jour adaptable sur tous les sites avec un minimum d'information.

    A propos de l'alternative N° 2 qui a été testée positivement par d'autres membres du forum, j'ai ajouté des explications.

    http://www.developpez.net/forums/d81...rnative-n-2-a/

    C'est vrai que le script trouvé sur un blog est relativement complexe mais ce n'est pas grave car l'essentiel pour les mises à jour se trouve dans le code que je propose à titre d'exemple. J'ai pour ma part un code un peu différent.
    La solution est en prod actuellement sur 2 sites.

    a+

  13. #13
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Oui c'est ce que je disais précédemment, c'est une option pour un petit site, étant donné que mon .vbs est placé dans le même rèp que la frontale, en dur pour accélérer l'accès (j'ai remarqué une nette différence de rapidité d'accès).
    Après je ne pense pas que ce soit très compliqué de récupérer le chemin de la frontale en cours, et de l'insérer dans le code, qu'en pense tu ?

  14. #14
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut Aggiornamenti (Italien)
    Ciao !

    Non ce n’est pas complexe de récupérer un nom de fichier dans un répertoire.

    Mais j’ai 3 soucis :
    1 Lorsque la base rame un peu les utilisateurs envoient du Crt+alt+del et tuent le frontal on se retrouve avec 2 ou voir plus de frontaux.
    2 Les utilisateurs TSE utilisent le même répertoire avec des noms de frontal différent mais identiques dans le fonctionnement
    3 J’ai plusieurs applis avec des extensions accdb dans le même dossier

    Donc je connais le nom du frontal quand il est en cours d’utilisation.
    D’où l’idée d’un « BootStrap »,
    C’est-à-dire que l’on construit le fichier exécutable de mise à jour avec le frontal qui par la suite le lance et se ferme pour permettre la mise à jour.

    Je pense que pour cette problématique il n’y a pas d’idées qui soient meilleures que d’autres chacun utilise dans son contexte la solution qui lui parait la plus adaptée.

    Quand j’ai demandé de l’aide à un grand gourou access il m’a renvoyé vers une solution qui existe depuis 9 ans et qui ne plait pas du tout, c’est AutoFE.


    A+

  15. #15
    Membre régulier
    Inscrit en
    Septembre 2009
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 126
    Points : 73
    Points
    73
    Par défaut
    Hello

    1 - Un ctrl alt sup referme le frontal mais ne le supprime pas, donc si il n'as pas été mis à jour, lorsque tu le relance il se mettra à jour automatiquement, aucun risque de doublon ( surtout dans le même rep c 'est impossible).

    2 - Pour les utilisateurs de TSE si j'ai bien compris seul le nom change. il suffit de créer deux frontaux à mettre à jour. Chacun contiendra le nom approprié de la maj.

    3 - Je ne vois pas ou est le problème d'avoir plusieurs applis en accdb, c'est mon cas et cela ne pose aucun soucis.

    A moins que je n'ai mal compris je ne vois pas trop ou est le probleme.

  16. #16
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 291
    Points
    291
    Billets dans le blog
    1
    Par défaut
    Ayant moi même lancé ce sujet, je n'ai par la suite pas continuer à débattre (parfois le code me dépasse n'étant pas informaticien!)
    J'ai trouvé une autre solution qui n'est pas fondamentalement différente mais qui ne repose pas sur le versionning et est complètement transparent pour l'utilisateur:
    Principe :
    -la dorsale et la frontale sont stockée sur le réseau
    -je lance un script vbs qui consiste à rapatrier systématiquement la frontale du réseau (dernière version à utiliser) sur le pc de l'utilisateur
    -ce script teste entre autre si le lecteur réseau est bien le bon, détruit éventuellement une frontale déjà présente sur le pc de l'utilisateur et ouvre la base copiée
    Evidemment, ce n'est pas parfait : pour des grosses bases de plusieurs 10aines ou plus de Mo, ce n'est pas envisageable
    voici le code vbs
    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
     
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    if oFSO.DriveExists("Y")  then 
    	Set oDrv = oFso.GetDrive("Y")
    		msgbox oDrv.ShareName
    		if oDrv.ShareName = "\\192.168.1.40\commun_qualite" then  
    		Set MonFic = oFSO.GetFile("Y:\EIL\Base_saisie\madb.accdb")
    			if oFSO.FileExists("c:\madb.accdb") then 
    			oFSO.DeleteFile ("c:\madb.accdb"),true
    			MonFic.Copy "c:\madb.accdb", True
    			Else MonFic.Copy "c:\madb.accdb", True
    			End if
    		Else Wscript.Quit
    		End if
    Else Wscript.Quit	
    End if
    set madb=oFSO.getfile("c:\madb.accdb")
    application =  "C:\Program Files\Microsoft Office\Office12\MSACCESS.EXE"
    Set objShell = CreateObject("WScript.Shell") 	        
    objShell.Run Chr(34) & application & Chr(34) & " " & Chr(34) & madb & Chr(34) 
    WScript.Sleep 1000
    Set objAccess = GetObject(,"Access.Application")	
    Set objdb = objAccess.Currentdb
    msgbox objAccess.CurrentDb.Name
     
    Set objAccess =Nothing
    Set objdb = Nothing
    Set objShell = Nothing
    Vos avis sont les bienvenus!!

  17. #17
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 626
    Points : 726
    Points
    726
    Par défaut les mises à jour
    Bonjour on reprend tout,

    Ce que l’on veut :

    -Des mises à jour automatisées
    -On ne veut pas de chemin de mise à jour en dur dans le code, comme « \\monserveur\frontal\frontal.accdb »
    -Détecter la mise à jour au lancement du frontal
    -Que l’utilisateur ne puisse pas même en changeant le nom du frontal éviter la mise à jour
    -Que la mise à jour ne change pas le nom du frontal utilisé
    -pas de script externe
    l'eau et le gaz quoi

    Et tout ce qui figure dans la liste est issu des remarques sur ma première contribution pour ce genre de demande.

    Si c’est bien cela une contribution existe et elle fonctionne nickel :
    http://www.developpez.net/forums/d81...rnative-n-2-a/

    Ce n'est pas complexe mais je peux refaire une contribution plus détaillée pour filer un coup de paluche

    Ps : le seul hic c’est les utilisateurs qui ne ferment jamais le frontal mais cela peut se résoudre en faisant un test toutes les n heures sur le formulaire d’accueil par exemple

  18. #18
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 291
    Points
    291
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    je veux tenter l'aventure MAJ auto (que j'avais laissé tomber mais là il faut que m'y mettes parce que je vais être en galère!!) avec le code de naphta:

    mon soucis : la MAJ a lieu 2 fois de suite (donc la nouvelle version est bien détectée)....mais je n'ai aucune mise à jour effective???

    Avez-vous déjà rencontré ce pb?

    j'ai changé dans le code ce que j'estimais m'être propre, ai-je oublié qqc?

    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    ' Licence to http://creativecommons.org/licenses/by/3.0/
    Option Compare Database
    Option Explicit
     
    Private Const TIMEOUT = 60
     
    Public Sub Restart(Optional Compact As Boolean = False)
        ' L'option Compact pour un compactage !!
        Dim scriptpath As String
     
        scriptpath = Application.CurrentProject.FullName & ".dbrestart.bat"
        MsgBox scriptpath
     
        If Dir(scriptpath, vbNormal) <> "" Then
            If DateAdd("s", TIMEOUT * 2, FileDateTime(scriptpath)) < Date Then
                Kill scriptpath
            Else
                Application.Quit acQuitSaveAll
                Exit Sub
            End If
        End If
     
        Dim s As String
        s = s & "SETLOCAL ENABLEDELAYEDEXPANSION" & vbCrLf
        s = s & "SET /a counter=0" & vbCrLf
        s = s & ":CHECKLOCKFILE" & vbCrLf
        s = s & "ping 0.0.0.255 -n 1 -w 100 > nul" & vbCrLf
        s = s & "SET /a counter+=1" & vbCrLf
        s = s & "IF ""!counter!""==""" & TIMEOUT & """ GOTO CLEANUP" & vbCrLf
        s = s & "IF EXIST ""%~f2.%4"" GOTO CHECKLOCKFILE" & vbCrLf
     
        If VerificationMaJ <> "Aucun" Then
            s = s & "COPY " & VerificationMaJ & " " & Application.CurrentProject.FullName & vbCrLf
        End If
     
        If Compact Then
            s = s & """%~f1"" ""%~f2.%3"" /compact" & vbCrLf
        End If
     
        s = s & "start "" "" ""%~f2.%3""" & vbCrLf
        s = s & ":CLEANUP" & vbCrLf
        s = s & "del %0"
     
        Debug.Print s
        ' Enregistrement du script construit plus haut
        Dim intFile As Integer
        intFile = FreeFile()
        Open scriptpath For Output As #intFile
        Print #intFile, s
        Close #intFile
     
        Dim dbname As String, ext As String, lockext As String, accesspath As String
        Dim idx As Integer
     
        accesspath = SysCmd(acSysCmdAccessDir) & "msaccess.exe"
     
        ' Retrouve l'extension du frontal
        For idx = Len(CurrentProject.FullName) To 1 Step -1
            If Mid(CurrentProject.FullName, idx, 1) = "." Then Exit For
        Next idx
        dbname = Left(CurrentProject.FullName, idx - 1)
        ext = Mid(CurrentProject.FullName, idx + 1)
     
        '  En fonction du frontal on détermine l'extension du fichier de verrouillage
        If Left(ext, 2) = "ac" Then
            lockext = "laccdb"
        Else
            lockext = "ldb"
        End If
     
        ' Appel du script
        s = """" & scriptpath & """ """ & accesspath & """ """ & dbname & """ " & ext & " " & lockext
         Shell s, vbHide
     
        ' Ferme l'appli
       Application.Quit acQuitSaveAll
    End Sub
     
    Function VerificationMaJ() As String
    'Fonction de test existence si oui compare les dates
    'La fonction retourne l'emplacement et le nom du nouveau fichier
    Dim EmplacementFrt As String
    Dim ladateLocal
    Dim ladateFrontalMaJ
     
    Dim rst As New ADODB.Recordset
     
    rst.Open "tbl_version", CurrentProject.Connection, adOpenStatic, adLockReadOnly
    rst.MoveFirst
    ladateLocal = rst!version_date
    EmplacementFrt = Nz(rst!version_namefrontal)
    rst.Close: Set rst = Nothing
     
    If FichierExiste(EmplacementFrt) = True Then
        'Recherche la date sur Frontal MàJ
        ladateFrontalMaJ = donneladate(EmplacementFrt)
        Else
        'Le fichier de MàJ n'existe pas
        VerificationMaJ = "Aucun"
        Exit Function
    End If
     
     
    If ladateFrontalMaJ > ladateLocal Then
        VerificationMaJ = EmplacementFrt
        Else
        VerificationMaJ = "Aucun"
    End If
    End Function
     
    Function donneladate(kelbase)
    'Connexion au frontal et interrogation de la date
        Dim conn, strConnect, rs
        Dim leSQL As String
        Set conn = CreateObject("ADODB.Connection")
        strConnect = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & kelbase & ";Persist Security Info=False;"
        conn.Open strConnect
        leSQL = "SELECT tbl_version.version_date FROM tbl_version"
        Set rs = conn.Execute(leSQL)
        rs.MoveFirst
        donneladate = rs(0)
        conn.Close
        Set conn = Nothing
    End Function
     
    Function FichierExiste(leFichier As String) As Boolean
    ' Le fichier existe ?
        Dim filesys
        Set filesys = CreateObject("Scripting.FileSystemObject")
        If filesys.FileExists(leFichier) Then
            FichierExiste = True
        End If
    End Function
    Function MAJauto()
     
    'Vérification de l'éxistance du fichier et contrôle de la date
        If VerificationMaJ <> "Aucun" Then
            MsgBox "Une mise à jour du frontal est disponible !" + vbCrLf + "Le programme va se fermer puis redémarrer." + vbCrLf + "Veuillez patienter", vbInformation, "Attention"
            Restart
        End If
     
    End Function

  19. #19
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2007
    Messages : 503
    Points : 291
    Points
    291
    Billets dans le blog
    1
    Par défaut

    j'ai trouvé : ma base me servant de test était sur le bureau, je l'ai mis sur C:
    et ça roule
    un problème de rafraichissement certainement?!

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

Discussions similaires

  1. Mise à jour Base frontal/Dorsale Multiuser
    Par galak007 dans le forum VBA Access
    Réponses: 3
    Dernier message: 15/12/2010, 21h57
  2. Réponses: 5
    Dernier message: 27/03/2007, 16h55
  3. Mises à jour base Oracle -> base SQL server
    Par fbo33 dans le forum Oracle
    Réponses: 21
    Dernier message: 20/11/2006, 11h05
  4. Mise à jour base access->mysql impossible... :-(
    Par pako69 dans le forum Administration
    Réponses: 4
    Dernier message: 26/09/2005, 14h51
  5. [SQL server][TDbRichEdit] Mise à jours base de donnée
    Par Revan012 dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/06/2004, 12h12

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