Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/03/2011, 17h53   #1
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Par défaut Ouvrir une base sécurisée en VBA

Bonjour,
J'ai développé une application sous ACCESS scindée en 2 parties (dorsale/frontale). La dorsale est sécurisée par un workgroup et par une macro AutoExec qui éxécute cette fonction :
Code :
1
2
3
4
5
6
7
8
9
10
11
Function Startup()
        Dim monparam                                    ' déclare la variable
        monparam = Command()                            ' affecte la valeur
 
        If Not (UCase(monparam) Like "*ADMIN*") Then                
            DoCmd.RunCommand acCmdWindowHide            ' cache la base de données
            DoCmd.ShowToolbar "Database", acToolbarNo   ' cache la barre d'outil Database
            MsgBox ("Vous n'avez pas l'autorisation pour accéder à cette base de données")
            Application.Quit
        End If
End Function
Donc pour l'instant la seule possibilité pour mes administrateurs d'ouvrir la dorsale est d'utiliser un raccourci vers ACCESS dont la cible est :
"C:\Program Files\Microsoft Office\OFFICE11\MSACCESS.EXE" "J:\monChemin\MaBase.mdb" /wrkgrp "\\monAutreChemin\maSecurite.mdw" /user "monLogin" /pwd "MonPassword" /cmd "ADMIN"

Plutôt que de leur coller un raccourci sur leur bureau, j'aurai voulu qu'ils aient, via l'interface d'administration de la frontale, la possibilité d'ouvrir la dorsale.
J'ai trouvé cette méthode :
Code :
1
2
3
4
5
6
7
Private Sub btn_menuDorsale_Click()
 
    Static ac As Access.Application: Set ac = New Access.Application
    ac.Visible = True
    ac.OpenCurrentDatabase ("L:\monChemin\maBase.mdb")
 
End Sub
mais comme je m'en doutais, il me demande mon nom d'utilisateur et mon mot de passe (quand je suis dans le groupe de travail). Si je ne suis pas dans le groupe de travail (ce qui est le cas de mes administrateurs), j'ai ce message :
Citation:
Envoyé par Access
Erreur d'exécution '7866':

Impossible d'ouvrir la base de données car celle-ci est manquante, ou a été ouverte par un autre utilisateur en mode exclusif .
Alors j'ai bien entendu parler ici et là de l'objet Shell (comme sur ce TOPIC) mais j'aurais besoin d'aide car c'est une première pour moi.

Si quelqu'un a des liens intéressants ou des conseils pour pouvoir ouvrir ma dorsale via le code VBA de ma frontale (tout en mettant en paramètre le workgroup, le login, le mot de passe et le paramètre /cmd), je suis intéressé

Merci
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/03/2011, 19h18   #2
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonsoir,

Voici un exemple :
Code :
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
Dim strACC As String, strWKGP As String, strDB As String
Dim strUser As String, strPwd As String, strCmd As String
Dim strShellCmd As String
 
' Chemin vers exécutable msaccess.exe
strACC = Application.SysCmd(acSysCmdAccessDir) & "MSACCESS.EXE"
 
' Base de données à ouvrir
strDB = "J:\monChemin\MaBase.mdb"
 
' Workgroup : Récupérer celui en cours
'strWKGP = Application.SysCmd(acSysCmdGetWorkgroupFile)
'             ou en choisir un
strWKGP = "\\monAutreChemin\maSecurite.mdw"
 
' Utilisateur : Récupérer celui en cours
'strUser = Application.CurrentUser()
'               ou en choisir un
strUser = "monLogin"
 
' Facultatif : Mot de passe utilisateur
strPwd = "MonPassword"
 
' Facultatif : Commutateur de ligne de commande cmd
strCmd = "ADMIN"
 
' Ligne de commande
strShellCmd = """" & strACC & """ """ & strDB & """ /WRKGRP """ & strWKGP & """ /User " & strUser
If Len(strPwd) > 0 Then strShellCmd = strShellCmd & " /Pwd " & strPwd
If Len(strCmd) > 0 Then strShellCmd = strShellCmd & " /cmd """ & strCmd & """"
 
' Exécution ligne de commande
Shell strShellCmd, vbNormalFocus
A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 25/03/2011, 10h06   #3
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Bonjour LedZep,

C'est plus qu'un exemple ! C'est la solution
Je n'en attendais pas tant et je t'en remercie beaucoup.

Mon problème est donc résolu. Mais juste pour que j'arrive à comprendre un petit détail : Pourquoi y'a-t-il 3 guillemets doubles autour de chaque sous-chaîne dans strShellCmd ? J'avais galéré à cause de ça dans du VBA Excel pour définir le format de cellule d'une feuille de classeur.....J'ai du mal à comprendre .

EDIT : je crois avoir compris. C'est une règle que je ne connaissais pas
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/03/2011, 18h34   #4
Rédacteur
 
Avatar de LedZeppII
 
Homme
Maintenance données produits
Inscription : décembre 2005
Messages : 3 939
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Maintenance données produits
Secteur : Distribution

Informations forums :
Inscription : décembre 2005
Messages : 3 939
Points : 6 278
Points : 6 278
Bonjour,
Citation:
Envoyé par paidge Voir le message
je crois avoir compris. C'est une règle que je ne connaissais pas
Oui, c'est ça.
Ça vient de la syntaxe Visual Basic.
Pour mettre un guillemet double (") dans une expression chaîne de caractères, elle-même délimitée par des guillemets doubles, il faut le doubler ("").

Cette règle s'applique aussi aux expressions chaîne de caractère SQL, délimitées par des guillemets doubles.

A+
LedZeppII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 16h23   #5
Membre éclairé
 
Homme Pierre-Jean
Développeur informatique
Inscription : février 2010
Messages : 306
Détails du profil
Informations personnelles :
Nom : Homme Pierre-Jean
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : février 2010
Messages : 306
Points : 330
Points : 330
Envoyer un message via MSN à paidge
Bonjour à tous.

Je me permets de relancer le sujet (je suis tombé dessus en cherchant sur google lol :p) car j'ai changé ma méthode de sécurisation. Abandonné le système de groupe de travail ! Je me suis dit que ça allait être galère pour celui ou celle qui reprendrait mon boulot dans qqes années (sait-on jamais). Donc j'ai juste mis un mot de passe sur la dorsale. J'aurais aimé faire la même chose que ci-dessus mais il n'y a plus de groupe de travail (ni d'utilisateur donc) ; juste un mot de passe.

Si quelqu'un a la méthode, cela m'intéresse

Merci.

EDIT : LoooooooL ! Je suis trop bête La réponse était dans mon premier post !!!!
Code :
1
2
3
4
5
6
7
Private Sub btn_menuDorsale_Click()
 
    Static ac As Access.Application: Set ac = New Access.Application
    ac.Visible = True
    ac.OpenCurrentDatabase ("L:\monChemin\maBase.mdb")
 
End Sub
La méthode OpenCurrentDatabase possède deux arguments facultatifs :
Citation:
Envoyé par Aide VBA
expression.OpenCurrentDatabase(CheminFichier, Exclusif, MotPasse)
Problème résolu
paidge est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h02.


 
 
 
 
Partenaires

Hébergement Web