Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

fermeture d'une base par code

3 réponses
Avatar
gminot
boonsoir , j'ai mis un mot de passe sur ma base N° 2 pour éviter les
laisons avec EXcel et autre .

Pour éviter que les utilisateurs tape ce code ( et le connaisse ) ,
j'ouvre ma base 2 par l'intermédiaire d'une base N°1 avec le code
suivant :


Sub OpenPasswordProtectedDB()

'Définit la valeur Static de façon à ce que l'instance de Microsoft
Access
'ne se ferme pas lorsque la procédure est terminée.

Static acc As Access.Application
Dim db As DAO.Database
Dim strDbName As String
strDbName = "C:\Documents and Settings\user\Mes documents\BD2.mdb"
Set acc = New Access.Application
acc.Visible = True
Set db = acc.DBEngine.OpenDatabase(strDbName, False, false,
";PWD=Monmotdepasse")
acc.OpenCurrentDatabase strDbName
db.Close
Set db = Nothing

End Sub


Cela fonctionne correctement mais je souhaiterais fermer la BD1
lorsque BD2 est ouverte .

et je n'ai trouve aucune fonction pour faire cela

quit : me ferme les 2
close : ferme un formulaire ect (un objet en fait)


Avez vous des solutions à ce petit probléme ( mais chiant )



Merci



Gilles

3 réponses

Avatar
gminot
pas d'amateur pour ce probléme qui apparait simple mais!!!!

Merci A plus




(gilles) wrote in message news:...
boonsoir , j'ai mis un mot de passe sur ma base N° 2 pour éviter les
laisons avec EXcel et autre .

Pour éviter que les utilisateurs tape ce code ( et le connaisse ) ,
j'ouvre ma base 2 par l'intermédiaire d'une base N°1 avec le code
suivant :


Sub OpenPasswordProtectedDB()

'Définit la valeur Static de façon à ce que l'instance de Microsoft
Access
'ne se ferme pas lorsque la procédure est terminée.

Static acc As Access.Application
Dim db As DAO.Database
Dim strDbName As String
strDbName = "C:Documents and SettingsuserMes documentsBD2.mdb"
Set acc = New Access.Application
acc.Visible = True
Set db = acc.DBEngine.OpenDatabase(strDbName, False, false,
";PWD=Monmotdepasse")
acc.OpenCurrentDatabase strDbName
db.Close
Set db = Nothing

End Sub


Cela fonctionne correctement mais je souhaiterais fermer la BD1
lorsque BD2 est ouverte .

et je n'ai trouve aucune fonction pour faire cela

quit : me ferme les 2
close : ferme un formulaire ect (un objet en fait)


Avez vous des solutions à ce petit probléme ( mais chiant )



Merci



Gilles


Avatar
Daniel Carollo
Bonsoir Gilles!

Le probleme peut paraitre simple, mais c'est parce que vous ne posez pas la
bonne question.

Pour ce qui est de fermer la base, il est tout a fait normal que les deux
bases se ferment quand vous faites un DoCmd.Quit: la premiere a definit la
deuxieme comme un objet, qui est donc dans son scope. Quand vous faites
disparaitre le contexte dans lequel l'objet a ete cree, il va aussi
disparaitre (static ou pas static). C'est un peu "scier la branche sur
laquelle on est assis"...

Pour contourner ca, il faut demarrer la base numero deux par un processus
qui va demarrer un nouveau contexte. Un Shell fera cela tres bien. Il sera
facile a la base No2 de fermer la premiere sans alors se casser la figure.

Ca c'etait pour la partie simple.

Je suspecte que la vraie raison pour laquelle vous n'avez pas recu de
reponse jusqu'ici est que ce que vous essayez de faire ne sert a rien. Les
protections par mot de passe sont d'une facilite inouie a contourner, et de
plus, si votre base a le mot de passe dans le code, n'importe qui peut aller
le lire...

La seule protection qui soit valable dans un contexte d'utilisation d'Access
est la mise en place de la securite d'utilisateur qui utilise un groupe de
travail autre que system.mdw.

Voila, j'espere que ces elements de reflection vous sont quand meme utiles.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

"gilles" wrote in message
news:
pas d'amateur pour ce probléme qui apparait simple mais!!!!

Merci A plus




(gilles) wrote in message
news:...

boonsoir , j'ai mis un mot de passe sur ma base N° 2 pour éviter les
laisons avec EXcel et autre .

Pour éviter que les utilisateurs tape ce code ( et le connaisse ) ,
j'ouvre ma base 2 par l'intermédiaire d'une base N°1 avec le code
suivant :


Sub OpenPasswordProtectedDB()

'Définit la valeur Static de façon à ce que l'instance de Microsoft
Access
'ne se ferme pas lorsque la procédure est terminée.

Static acc As Access.Application
Dim db As DAO.Database
Dim strDbName As String
strDbName = "C:Documents and SettingsuserMes documentsBD2.mdb"
Set acc = New Access.Application
acc.Visible = True
Set db = acc.DBEngine.OpenDatabase(strDbName, False, false,
";PWD=Monmotdepasse")
acc.OpenCurrentDatabase strDbName
db.Close
Set db = Nothing

End Sub


Cela fonctionne correctement mais je souhaiterais fermer la BD1
lorsque BD2 est ouverte .

et je n'ai trouve aucune fonction pour faire cela

quit : me ferme les 2
close : ferme un formulaire ect (un objet en fait)


Avez vous des solutions à ce petit probléme ( mais chiant )



Merci



Gilles




Avatar
gminot
Bonsoir Daniel,

Merci de ta réponse mon but n'est pas de faire une sécurité totale
mais juste retirer aux utilisateurs de 1 er niveau de faire des
extractions simples des tables .

Concernant la sécurité avec par exemple un bd2.mdw me semble pas
évident et de plus une personne en interne avec son user et son PW
fait les extractions que je veux éviter ( sinon je leur interdit
l'acces aux tables mais ils ne pourront plus utiliser la base ) .

ou alors je n'ai pas compris la finesse de cette securite par
utilisateur

D'autre part pour se connecter à la base l'utilisateur renseigne un
mot de passe qui permet surtout de l'identifier et un autre mot de
passe pour se connecter à l'AS400 ( via ODBC par client access .
dailleurs je t'ai eu pour refaire tomber ce mdp par Wlogon que je n'ai
toujours pas traiter de facon satisfaisante) alors si je lui en
demande encore un pour l'ouverture de la base
cela devient lourd et surtout je souhaite qu'il ne connaisse pas ce
dernier .


Bon je te remercie si tu avais une idée générale , je reste preneur


Merci de ton aide


A plus







"Daniel Carollo" wrote in message news:<Oy#...
Bonsoir Gilles!

Le probleme peut paraitre simple, mais c'est parce que vous ne posez pas la
bonne question.

Pour ce qui est de fermer la base, il est tout a fait normal que les deux
bases se ferment quand vous faites un DoCmd.Quit: la premiere a definit la
deuxieme comme un objet, qui est donc dans son scope. Quand vous faites
disparaitre le contexte dans lequel l'objet a ete cree, il va aussi
disparaitre (static ou pas static). C'est un peu "scier la branche sur
laquelle on est assis"...

Pour contourner ca, il faut demarrer la base numero deux par un processus
qui va demarrer un nouveau contexte. Un Shell fera cela tres bien. Il sera
facile a la base No2 de fermer la premiere sans alors se casser la figure.

Ca c'etait pour la partie simple.

Je suspecte que la vraie raison pour laquelle vous n'avez pas recu de
reponse jusqu'ici est que ce que vous essayez de faire ne sert a rien. Les
protections par mot de passe sont d'une facilite inouie a contourner, et de
plus, si votre base a le mot de passe dans le code, n'importe qui peut aller
le lire...

La seule protection qui soit valable dans un contexte d'utilisation d'Access
est la mise en place de la securite d'utilisateur qui utilise un groupe de
travail autre que system.mdw.

Voila, j'espere que ces elements de reflection vous sont quand meme utiles.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

"gilles" wrote in message
news:
pas d'amateur pour ce probléme qui apparait simple mais!!!!

Merci A plus




(gilles) wrote in message
news:...

boonsoir , j'ai mis un mot de passe sur ma base N° 2 pour éviter les
laisons avec EXcel et autre .

Pour éviter que les utilisateurs tape ce code ( et le connaisse ) ,
j'ouvre ma base 2 par l'intermédiaire d'une base N°1 avec le code
suivant :


Sub OpenPasswordProtectedDB()

'Définit la valeur Static de façon à ce que l'instance de Microsoft
Access
'ne se ferme pas lorsque la procédure est terminée.

Static acc As Access.Application
Dim db As DAO.Database
Dim strDbName As String
strDbName = "C:Documents and SettingsuserMes documentsBD2.mdb"
Set acc = New Access.Application
acc.Visible = True
Set db = acc.DBEngine.OpenDatabase(strDbName, False, false,
";PWD=Monmotdepasse")
acc.OpenCurrentDatabase strDbName
db.Close
Set db = Nothing

End Sub


Cela fonctionne correctement mais je souhaiterais fermer la BD1
lorsque BD2 est ouverte .

et je n'ai trouve aucune fonction pour faire cela

quit : me ferme les 2
close : ferme un formulaire ect (un objet en fait)


Avez vous des solutions à ce petit probléme ( mais chiant )



Merci



Gilles