[Relations] Ajouter une relation avec table liée
Bonjour tout le monde,
mon défi du jour est de trouver comment créer une relation d'une ancienne table, la copier dans une nouvelle, et supprimer l'ancienne...
voici le code, en grande partie tiré de la FAQ Access:
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
| 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
'On Error GoTo fin
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 & "_N")
' Définition des propriétés pour créer le lien
tbl.Connect = Connect
tbl.SourceTableName = TitreTableSource
'Ajout de la nouvelle table
db.TableDefs.Append tbl
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 = dbRelationDeleteCascade + dbRelationUpdateCascade
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
End If
If relation.ForeignTable = TitreTableAModifier Then
Set rel = db.CreateRelation(relation.table & tbl.Name, relation.table, tbl.Name)
rel.Attributes = dbRelationDeleteCascade + dbRelationUpdateCascade
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 & "_N").Name = TitreTableAModifier
End If
db.Close
MajLienODBC = True
End Function |
ca me jette avec une erreur 3057 au niveau du
Code:
db.Relations.Append rel
est-ce du au fait que la table soité liée ou bien manque-t-il une info ?
Merci d'avance.