IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

[Relations] Ajouter une relation avec table liée


Sujet :

VBA Access

  1. #1
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 653
    Points : 34 373
    Points
    34 373
    Par défaut [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 : 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 Function
    ca me jette avec une erreur 3057 au niveau du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 653
    Points : 34 373
    Points
    34 373
    Par défaut
    comme je passe toujours à côté des choses simples, il s'agissait en fait de la propriété attributes qui n'avait pas à prendre la valeur imposée.

    voici le bon code
    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 = 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
                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 & "_N").Name = TitreTableAModifier
     
        End If
     
        db.Close
        MajLienODBC = True
     
     
    End Function

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment ajouter une relation
    Par rvzip64 dans le forum Linq
    Réponses: 1
    Dernier message: 30/06/2009, 16h24
  2. Réponses: 0
    Dernier message: 12/03/2009, 16h16
  3. Héritage avec tables liées à une autre base
    Par b_steph_2 dans le forum Access
    Réponses: 13
    Dernier message: 27/02/2007, 11h17
  4. Réponses: 3
    Dernier message: 05/01/2007, 10h44
  5. Mettre une relation 1,1 entre 2 tables
    Par borgfabr dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/05/2005, 17h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo