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

Modélisation Discussion :

Liaison de tables impossible à cause du mode exclusif


Sujet :

Modélisation

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 198
    Points : 171
    Points
    171
    Par défaut Liaison de tables impossible à cause du mode exclusif
    Bonjour,

    Avec Access 97, j'ai une base de donnée "Appli" en local sur le bureau
    J'ai une autre base "Données_Affaire_1" sur le serveur
    J'ai une troisième base "Données_Affaire_2" sur le serveur

    Au démarrage de la base "Appli", je peux choisir de lier les tables de la base "Données_Affaire_1" ou "Données_Affaire_2". Je le fais en VBA avec le code inspiré du code sur la faq. Les liaisons fonctionnent bien, mais si quelqu'un est déjà connecté via "Appli" sur une des deux bases sur le serveur, je ne peux pas importer les tables de la base ouverte. J'ai le message :
    Vous avez essayé d'ouvrir une base de données déjà ouverte en mode exclusif par l'utilisateur 'Admin' sur la machine 'XXXX'. Recommencer quand la base sera disponible.
    Que faut-il faire pour que je puisse lier les tables quand la base est déjà ouverte ?
    Les "Appli" ayant déjà les bonnes tables chargée (par exemple, 2 "Appli" connectés en même temps sur "Données_Affaire_1") fonctionnent normalement. Aucune base n'est protégée par mot de passe.

    Edit de ce matin : J'ai liée les tables en passant par l'interface d'Access (Nouvelle table > lier) et je n'ai pas ce problème. Il semble donc que ça vient du code vba. Je continue de chercher...

    Merci pour votre aide,

    Jean-Marc

  2. #2
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 020
    Points : 24 553
    Points
    24 553
    Par défaut
    Bonjour,

    As-tu vérifier que l'une des personnes qui utilise la base n'est pas réglé sur Ouverture Exclusive ?

    Il n'y a pas de moyen d'ouvrir une base déjà ouverte en mode exclusif, à part de déconnecter l'utilisateur.

    Cordialement,

  3. #3
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 198
    Points : 171
    Points
    171
    Par défaut
    Merci pour ta réponse
    J'ai trouvé le problème et je l'ai contourné. Cela provenait de la première partie du code donné dans la faq:
    1) Ouverture de la base distante pour lister ses tables et mise en mémoire de leurs noms
    2) Fermeture de la base distante
    3) Création des tables dans la base locale et liaisons

    Ca plantait au point 1 lors de l'ouverture.

    Ce que j'ai fait, comme ce sont toujours les même tables que je lie,
    1) j'ai listé à l'aide de cette requête les tables liées dans ma base locale, en filtrant le nom de la base distante qui m'intéresse.
    2) je mets les noms de ces tables dans un tableau
    3) Après suppression des tables liées, création des nouvelles tables et liaison avec la nouvelle base distante.

    Comme ça, pas besoin d'ouvrir la base distante, et pas de conflit !
    J'aurais pu mettre les noms des tables à lier en dur dans mon code, mais ça aurait été moins élégant, surtout que mon appli est appelée à évoluer...


    Pour ma culture perso, comment règle t-on l'ouverture d'une base en mode exclusif ?


    Jean-Marc

  4. #4
    Rédacteur/Modérateur
    Avatar de loufab
    Homme Profil pro
    Entrepreneur en solutions informatiques viables et fonctionnelles.
    Inscrit en
    Avril 2005
    Messages
    12 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Entrepreneur en solutions informatiques viables et fonctionnelles.
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2005
    Messages : 12 020
    Points : 24 553
    Points
    24 553
    Par défaut
    Directement dans la fenêtre ouvrir de chaque poste. Attenant au bouton il y a une flèche.

    Egalement dans les options d'Access.

    Il y a aussi ce code pour l'attachement des tables :

    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
    Function AttacheTable(strDataMdb, Pref As Variant)
    ' attache les tables du fichier specifié par mdb
    ' Pref = ajoute un préfixe au table
     
    On Error GoTo Err_LinkTables:       ' gestion des erreurs
     
    Dim dbExt As Database         ' base distante
    Dim dbLoc As Database         ' base locale
    Dim tdfExt As TableDef        ' liste tables distantes
    Dim tdfCurrent As TableDef    ' liste tables locales
     
    Dim strTblName As String       ' nom de la table
    Dim flgAddTable As Boolean
     
    Set dbExt = OpenDatabase(strDataMdb)
    Set dbLoc = CurrentDb
     
    For Each tdfExt In dbExt.TableDefs  ' chaque table distante
     
        strTblName = tdfExt.Name                            ' nom de la table
     
        ' saute les tables systèmes (MSys)
        If tdfExt.Attributes = 0 Then ' que les tables
     
            '-- Attempt to open the current link
            On Error Resume Next
     
     
            Set tdfCurrent = dbLoc.TableDefs(strTblName)           ' ouvre la table locale
     
            flgAddTable = Err.Number                               ' vrai/Faux
     
            On Error GoTo Err_LinkTables
            '-- Si il y a une erreur propose plusieurs solutions
            '-- sinon update le link.
     
            If flgAddTable Then         ' vrai
     
                Set tdfCurrent = dbLoc.CreateTableDef(strTblName)
                tdfCurrent.SourceTableName = strTblName
                tdfCurrent.Connect = ";DATABASE=" & strDataMdb
     
                CurrentDb.TableDefs.Append tdfCurrent
            Else
                tdfCurrent.Connect = ";DATABASE=" & strDataMdb
                tdfCurrent.RefreshLink
     
            End If
     
        End If
    Next
     
    Set dbExt = Nothing
     
    AttacheTable = True     'attache réussi
     
    Exit Function
     
    Err_LinkTables:
     
    If Err = "3078" Then Resume Next   ' 3078 "tentative d'attachement sur une Query"
     
    ' passe au doc suivant
     
    If Err = "3044" Or Err = "3024" Then    ' 3024 "Fichier introuvable." et 3044 "Chemin non valide"
       strDataMdb = openfiles("*.mdb", CurDir, "Ouvrir " & strDataMdb, strDataMdb)
       If IsEmpty(strDataMdb) Then
          MsgBox "Certaines tables ne sont pas attachées, l'application ne fonctionnera pas correctement !", , "Titre"
          GoTo AttacheEchouée:
       End If
       Resume Next
    End If
     
    If Err = "91" Then GoTo AttacheEchouée:         ' 91 "Pas de document Table Access dans ce fichier"
     
    If Err = "3343" Then GoTo AttacheEchouée:       ' 3343 Format de base de données non reconnu.
     
    AttacheEchouée:
    AttacheTable = Error  ' l'attachement à échoué
     
    End Function
    Tu balances le nom du mdb et il attache toutes les tables, si elles sont présentes il raffraichit le lien.

    Openfiles est la fonctionnalité d'affichage de la fenêtre Ouvrir. Tu peux la trouver dans la FAQ.

    Cordialement,

  5. #5
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 198
    Points : 171
    Points
    171
    Par défaut
    OK, merci pour le code.
    D'après ce que je comprends, il n'est pas nécessaire d'effacer une table pour lui donner un nouveau lien. Je vais essayer ça, peut être que mon code gagnera en rapidité. Mais pour 18 tables, je doute. Toutefois, cette solution est plus jolie.

    kenavo,

    Jean-Marc

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

Discussions similaires

  1. liaison des tables impossible avec le gestionnaire
    Par emulamateur dans le forum VBA Access
    Réponses: 1
    Dernier message: 12/01/2012, 18h24
  2. [AC-2007] Liaison des tables impossible en runtime 2007
    Par pied9 dans le forum Runtime
    Réponses: 5
    Dernier message: 17/06/2010, 21h57
  3. [AC-2007] Lier table - Impossible en mode exclusif
    Par francois78 dans le forum VBA Access
    Réponses: 4
    Dernier message: 27/01/2010, 21h16
  4. Réponses: 1
    Dernier message: 19/08/2009, 16h42
  5. Table Excel liée en mode exclusif ?
    Par Chajj dans le forum Modélisation
    Réponses: 4
    Dernier message: 03/08/2007, 09h25

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