Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Modélisation
Modélisation Le forum qui vous aide à résoudre vos questions relatives à la modélisation (tables et relations) de votre base de données sous Access. Pour les états et les formulaires, postez dans le forum IHM.
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 03/11/2007, 02h27   #1
Membre habitué
 
Inscription : février 2005
Messages : 186
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 186
Points : 114
Points : 114
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 :
Citation:
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
OtObOx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2007, 09h30   #2
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 098
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 098
Points : 11 624
Points : 11 624
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,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2007, 11h47   #3
Membre habitué
 
Inscription : février 2005
Messages : 186
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 186
Points : 114
Points : 114
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
OtObOx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2007, 14h36   #4
Rédacteur/Modérateur

 
Avatar de loufab
 
Homme Fabrice CONSTANS
Ingénieur développement logiciels
Inscription : avril 2005
Messages : 7 098
Détails du profil
Informations personnelles :
Nom : Homme Fabrice CONSTANS
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : avril 2005
Messages : 7 098
Points : 11 624
Points : 11 624
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 :
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,
__________________
Classe MELA(CRUD) Opérateur IN et zone de liste
MsGraph et VBA - 1e Partie 2e partie
Entête d'états-Opérateur LIKE-Evénements formulaires-Cours 2010
Complément :Générateur de msgbox
Visitez mon Blog
Les questions techniques par MP ne sont pas lues et je ne pratique pas l'extispicine
loufab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/11/2007, 18h35   #5
Membre habitué
 
Inscription : février 2005
Messages : 186
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 186
Points : 114
Points : 114
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
OtObOx 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 04h43.


 
 
 
 
Partenaires

Hébergement Web