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 :

OUvrir une base de données protégée par mot de passe


Sujet :

VBA Access

  1. #1
    Mut
    Mut est déconnecté
    Membre averti Avatar de Mut
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2003
    Messages : 931
    Points : 307
    Points
    307
    Par défaut OUvrir une base de données protégée par mot de passe
    Bonjour,

    J'ai une base (Base 1) contenant uniquement les données (les tables) d'une application que j'ai protégée par mot de passe.

    J'ai une autre base (Base 2) dans laquelle j'ai lié les tables de la Base1.
    Lorsque je veux accéder à la Base 1 par le biais de la base 2, je dois lui indiquer le mot de passe (par programmation) ce qui me parait logique.

    Mon problème c'est que je n'arrive pas à faire la connexion une seule fois (par exemple à l'ouverture de la base), il faut que je le fasse à chaque ouverture de formulaire, etc...ce que je trouve un peu lourd....

    Il y a t-il un moyen pour que la connexion se fasse à l'ouverture de la base et ce, jusqu'à sa fermeture ?

    PS: voici le code que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set st = DBEngine.Workspaces(0).OpenDatabase("c:\test\test.accdb", False, False, "MS Access;PWD=test")
    Merci

  2. #2
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Points : 105
    Points
    105
    Par défaut
    Bonjour le forum,

    Voici le code que j'utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'Donne acces a la base verrouilée
    Dim db As DAO.Database
    Set db = DBEngine.OpenDatabase("\\adresse de la base\nom table.accdb", False, False, ";pwd=mot de passe")
     
    ....................
     
    'Referme la base 
    db.Close
    en espérant avoir été utile.
    Bonne journée

  3. #3
    Mut
    Mut est déconnecté
    Membre averti Avatar de Mut
    Homme Profil pro
    Inscrit en
    Mars 2003
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Mars 2003
    Messages : 931
    Points : 307
    Points
    307
    Par défaut
    Oui mais tu mets ce code à chaque ouverture de formulaire ?? (dont la source est basée sur une table)

  4. #4
    Membre régulier
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2006
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2006
    Messages : 239
    Points : 105
    Points
    105
    Par défaut
    Dans mon code il figure a chaque operation qui se fait sur la table liée;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Import_xxxx_Click()
    'Donne acces a la base verrouilée
    Dim db As DAO.Database
    Set db = DBEngine.OpenDatabase("\\adresse de la base\nom table.accdb", False, False, ";pwd=mot de passe")
     
    DoCmd.OpenQuery "aQry_Stat"
     
    'Referme la base 
    db.Close

  5. #5
    Membre éprouvé

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Points : 1 266
    Points
    1 266
    Par défaut
    Bonjour,

    Le code que tu utilises ne sert que pour une table.
    Voici un code, pour toutes tes tables, que j'utilise depuis des années et qui fonctionne très bien :

    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
    Public Sub DeleteODBCTableNames()
    'Supprime tout les tables attachées
    'A utiliser à la fermeture de la base de données
     
    On Error GoTo Err
     
        Dim dbs As Database, tdf As TableDef, i As Integer
        Set dbs = CurrentDb
        'Parcours de toutes les tables en commençant par la fin
        For i = dbs.TableDefs.Count - 1 To 0 Step -1
            'Déclaration de la table trouvée
          Set tdf = dbs.TableDefs(i)
     
          'Si c'est une table liée ou interne à la frontale
          'If (tdf.Attributes And dbAttachedODBC Or dbAttachedTable) Then
          'Si c'est une table liée
          If (tdf.Attributes And dbAttachedTable) Then
            'On la supprime
            dbs.TableDefs.Delete (tdf.Name)
          End If
     
        Next i
        'Fermeture de la base en cours
        dbs.Close
        Set dbs = Nothing
     
    Fin: Exit Sub
     
    Err:
        'MsgBox ("Error # " & Str(Err.Number) & " was generated by " & Err.Source & Chr(13) & Err.Description)
        'Resume Exit_DeleteODBCTableNames
        'Si erreur, on continue
        Resume Next
    End Sub
     
    Function MakeLink(PathDorsale As String) As Boolean
    '// Créer les attaches ACCDBà partir de la dorsale
    On Error GoTo Err
     
    'Supprime toutes les tables liées
    Call DeleteODBCTableNames
     
    DoEvents
     
    Dim SQLDb      As DAO.Database
    Dim dbLocal    As DAO.Workspace
    'Dim I          As Long
    Dim tblName    As String
    Dim tdfCurrent As DAO.TableDef
    Dim nbrTable   As Long
    Dim dbOptions As String
    'Mot de passe
    dbOptions = "Ms Access;PWD=MotDePasse"
     
    'Connexion à la dorsale
    Set dbLocal = DBEngine.Workspaces(0)
    Set SQLDb = dbLocal.OpenDatabase(PathDorsale, False, False, dbOptions)
     
    'Nombre de tables dans la dorsale
    nbrTable = SQLDb.TableDefs.Count - 1
     
    'Parcoure les tables de la dorsale
    For i = 0 To nbrTable
      'Nom de la table trouvée dans la boucle
      tblName = SQLDb.TableDefs(i).Name
      'Si ce n'est pas une table system
      If Left(tblName, 1) <> "~" And Left(tblName, 4) <> "Msys" Then
     
        'S'il existe déjà une table liée du même nom
         If tblName <> CurrentDb.TableDefs(i).Name Then
            'On la supprime
            CurrentDb.TableDefs.Delete tblName
         End If
         'Création de la table liée
         Set tdfCurrent = CurrentDb.CreateTableDef(tblName, dbAttachSavePWD)
         tdfCurrent.Connect = dbOptions & ";DATABASE=" & PathDorsale
         'Mise à jour de la création
         tdfCurrent.SourceTableName = tblName
         CurrentDb.TableDefs.Append tdfCurrent
      End If
    Next i
     
    'Fermeture de la dorsale
    SQLDb.Close
    dbLocal.Close
    'retour comme quoi tout s'est bien passée
    MakeLink = True
     
    Fin: Exit Function
     
    Err:
       If Err.Number = 3010 Then 'Objet existe déjà
          Resume Next
       ElseIf Err.Number = 3265 Then
          Resume Next
       Else
          Call MsgBoxErreurSys
          MakeLink = False
          Resume Fin
       End If
    End Function
    Cordialement


    Christophe
    Cordialement

    Christophe

    N'oubliez pas de mettre pour en faire profiter tout le monde.

Discussions similaires

  1. [XL-2007] Connection à une base Access protégée par mot de passe
    Par Monkey_D.Luffy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/09/2010, 12h00
  2. ouvrir automatiquement une macro protégé par mot de passe connu
    Par mapao dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/07/2010, 14h09
  3. Comment se connecter à une base Acces Protégée par mot de passe
    Par walid_kerkoub dans le forum Bases de données
    Réponses: 1
    Dernier message: 12/07/2007, 01h31
  4. Comment ouvrir une base Access protègée par mot de passe
    Par Le Pharaon dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 26/09/2006, 13h53

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