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 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152
| Function MajLienODBC(PathBaseAModifier As String, TitreTableAModifier As String, connect As String, TitreTableSource As String) As Boolean
Dim db As DAO.Database
Dim tbl As DAO.TableDef
Dim temp As Boolean
Dim tables As DAO.TableDef
Dim relation As DAO.relation
Dim rel As DAO.relation
Dim chp As DAO.Field
Dim a As DAO.Property
MajLienODBC = False
temp = False
Debug.Print PathBaseAModifier
' Ouverture de la base de données
Set db = DBEngine.OpenDatabase(PathBaseAModifier)
For Each tables In db.TableDefs
If tables.Name = TitreTableAModifier Then
temp = True
Exit For
End If
Next
' Création d'un nouvel objet TableDef.
Set tbl = db.CreateTableDef(TitreTableAModifier & "_piou", dbAttachSavePWD)
' Définition des propriétés pour créer le lien
Debug.Print tbl.Name & ":" & connect
tbl.connect = "ODBC;" & connect
' tbl.RefreshLink
tbl.SourceTableName = TitreTableSource
'Ajout de la nouvelle table
db.TableDefs.Append tbl
db.TableDefs.Refresh
If temp Then
'Création des relations identiques à l'ancienne table
For Each relation In db.Relations
If relation.table = TitreTableAModifier Then
Set rel = db.CreateRelation(tbl.Name & relation.ForeignTable, tbl.Name, relation.ForeignTable)
rel.Attributes = relation.Attributes
Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
chp.ForeignName = relation.Fields(0).ForeignName
rel.Fields.Append chp
db.Relations.Append rel
db.Relations.Refresh
End If
If relation.ForeignTable = TitreTableAModifier Then
Set rel = db.CreateRelation(relation.table & tbl.Name, relation.table, tbl.Name)
rel.Attributes = relation.Attributes
Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
chp.ForeignName = relation.Fields(0).ForeignName
rel.Fields.Append chp
'Debug.Print rel.Name
db.Relations.Append rel
End If
Next
'Suppression des relations de l'ancienne table
For Each relation In db.Relations
If relation.table = TitreTableAModifier Or relation.ForeignTable = TitreTableAModifier Then
db.Relations.Delete relation.Name
End If
Next
'Suppression de l'ancienne table
db.TableDefs.Delete TitreTableAModifier
'Renommage de la nouvelle table
db.TableDefs(TitreTableAModifier & "_piou").Name = TitreTableAModifier
db.TableDefs(TitreTableAModifier).connect = "ODBC;" & connect
db.TableDefs(TitreTableAModifier).RefreshLink
Debug.Print db.TableDefs(TitreTableAModifier).connect
MajLienODBC = True
End If
db.Close
Exit Function
fin:
End Function
Function MajTableliee(PathBaseAModifier As String, TitreTableAModifier As String, pathlien As String, TitreTableSource As String) As Boolean
Dim db As DAO.Database
Dim tbl As DAO.TableDef
Dim temp As Boolean
Dim tables As DAO.TableDef
Dim relation As DAO.relation
Dim rel As DAO.relation
Dim chp As DAO.Field
Dim a As DAO.Property
If pathlien <> "a_faire" Then
MajTableliee = False
temp = False
' Ouverture de la base de données
Set db = DBEngine.OpenDatabase(PathBaseAModifier)
For Each tables In db.TableDefs
If tables.Name = TitreTableAModifier Then
temp = True
Exit For
End If
Next
' Création d'un nouvel objet TableDef.
Set tbl = db.CreateTableDef(TitreTableAModifier & "_piou")
' Définition des propriétés pour créer le lien
tbl.connect = "MS ACCESS;DATABASE=" & pathlien
tbl.SourceTableName = TitreTableSource
'Ajout de la nouvelle table
Debug.Print PathBaseAModifier
Debug.Print pathlien
db.TableDefs.Append tbl
db.TableDefs.Refresh
If temp Then
'Création des relations identiques à l'ancienne table
For Each relation In db.Relations
If relation.table = TitreTableAModifier Then
Set rel = db.CreateRelation(tbl.Name & relation.ForeignTable, tbl.Name, relation.ForeignTable)
rel.Attributes = relation.Attributes
Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
chp.ForeignName = relation.Fields(0).ForeignName
rel.Fields.Append chp
db.Relations.Append rel
db.Relations.Refresh
End If
If relation.ForeignTable = TitreTableAModifier Then
Set rel = db.CreateRelation(relation.table & tbl.Name, relation.table, tbl.Name)
rel.Attributes = relation.Attributes
Set chp = rel.CreateField(relation.Fields(0).Name) ' Fournit le nom du champ clé externe.
chp.ForeignName = relation.Fields(0).ForeignName
rel.Fields.Append chp
'Debug.Print rel.Name
db.Relations.Append rel
End If
Next
'Suppression des relations de l'ancienne table
For Each relation In db.Relations
If relation.table = TitreTableAModifier Or relation.ForeignTable = TitreTableAModifier Then
db.Relations.Delete relation.Name
End If
Next
'Suppression de l'ancienne table
db.TableDefs.Delete TitreTableAModifier
'Renommage de la nouvelle table
db.TableDefs(TitreTableAModifier & "_piou").Name = TitreTableAModifier
MajTableliee = True
End If
db.Close
Exit Function
Else
MajTableliee = True
End If
End Function |
Partager