Bonjour,

Est il possible de lier les tables d'une base dans une autre via un module dans une troisième.
J'ai une Base1 qui contient 3 tables. Je voudrais lier ces tables dans une Base3 via un module lancé depuis une Base2 (oui c'est un peu sioux mais bon..)

J'ai essayé de m'inspirer du code présent dans la FAQ mais j'ai une anomalie au niveau de la ligne en gras: "Mise à jour Impossible. La base de données ou l'objet est en lecture seule".
La base est fermée et n'est pas (a priori) en lecture seule.

D'avance merci.

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
Dim strCheminBd As String
Dim strCheminBd2 As String
Dim strConnect As String
Dim strConnect2 As String
Dim strNomsTables() As String
Dim strTemp As String
Dim i As Integer
Dim oDb As DAO.Database
Dim oDbSource As DAO.Database
Dim oTbl As DAO.TableDef
Dim oTblSource As DAO.TableDef

'Définit mot passe, nom table, chemin base de données
strMotPasse = ""
strCheminBd = "G:\TEST1.mdb"

'Définit la chaine de connexion permettant la liaison des tables
strConnect = "MS Access;pwd=" & strMotPasse & ";DATABASE=G:\TEST1.mdb"
strConnect2 = "MS Access;pwd=" & strMotPasse & ";DATABASE=G:\TEST3.mdb"

'Instancie l'objet Database de la base courante
Set oDb = DBEngine.OpenDatabase(strCheminBd2, True, True, strConnect2)


'Instancie l'objet Database de la base protégée
Set oDbSource = DBEngine.OpenDatabase(strCheminBd, True, True, strConnect)
 
'Parcours l'ensemble des tables de la base de données protégée
'et stocke leur nom
For Each oTblSource In oDbSource.TableDefs
    'ignore les tables system
    If (oTblSource.Attributes And dbSystemObject) = 0 Then
        strTemp = strTemp & oTblSource.Name & "|"
    End If
Next
'Ferme la base de données sources (impératif pour la liaison)
oDbSource.Close: Set oDbSource = Nothing

'parcours le tableau de noms de tables
strNomsTables = Split(Left(strTemp, Len(strTemp) - 1), "|")
For i = 0 To UBound(strNomsTables)
  'Crée une nouvelle table dans la base de données courante
  Set oTbl = oDb.CreateTableDef(strNomsTables(i))
  'Lie les deux tables
  oTbl.Connect = strConnect
  oTbl.SourceTableName = strNomsTables(i)
  'Ajoute la table à la base de données
  oDb.TableDefs.Append oTbl
Next i
 
'Rafraichit la liste des tables
oDb.TableDefs.Refresh

End Sub