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:
ca me jette avec une erreur 3057 au niveau du
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 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 Functionest-ce du au fait que la table soité liée ou bien manque-t-il une info ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part db.Relations.Append rel
Merci d'avance.
Partager