Comment créer et supprimer des relations entre tables ?

    From The Document Foundation Wiki
    < Macros‎ | Base


    Description

    L'exemple donné ici montre comment créer et supprimer des relations entre la table FournisseursProduits et les tables de référence Produits et Fournisseurs.

    copie d'écran relations
    Tables à relier

    La macro commence par supprimer les index existants puis :

    • Définit la clé primaire de la table FournisseursProduits.
    • Ajoute la relation vers table Fournisseurs
    • Ajoute la relation vers table Produits

    La gestion d'index passe par la méthode createDataDescriptor[1] permettant de définir le nom de la colonne concernée, le type[2] d'index, l'intégrité référentielle[3].

    Pour les clés externes (vers Produits et Fournisseurs) il sera nécessaire de préciser :

    • la table "visée"
    • la colonne clé
    • et éventuellement les régles de mise à jour en cascade.

    Code

    sub PysCreerRelation
    
    dim oConnection as object, oDesc as object, oDescCol as object, oTable as object, oCol as object
    dim i as long
    
    oConnection = ThisDatabaseDocument.DataSource.getConnection("","") 
    
    oTable = oConnection.Tables.getByName("FournisseursProduits")
    
    ' Suppression des index déjà définis
    for i = oTable.keys.count - 1 to 0 step -1
    	oTable.keys.dropByIndex(i)
    next i
    
    ' Création de la clé primaire pour la table
    
    oCol = oTable.columns.getByName("IDFournisseursProduits")
    
    ' Création du descripteur pour la clé primaire
    oDesc = oTable.Keys.createDataDescriptor
    oDesc.Type = com.sun.star.sdbcx.KeyType.PRIMARY
    oDesc.Columns.appendByDescriptor(oCol)
    
    ' Ajout à l'index
    oTable.Keys.appendByDescriptor(oDesc)
    
    ' Création de la relation vers table Fournisseur
    
    set oDesc = nothing
    
    ' Création du descripteur pour la clé externe
    oDesc = oTable.Keys.createDataDescriptor
    
    ' Création du descripteur pour la propriété RelatedColumn
    oDescCol = oDesc.Columns.createDataDescriptor
    oDescCol.Name = "RéfFournisseur"
    oDescCol.Type = com.sun.star.sdbcx.KeyType.FOREIGN
    oDescCol.RelatedColumn = "RéfFournisseur"
    
    
    oDesc.Type = com.sun.star.sdbcx.KeyType.FOREIGN
    oDesc.ReferencedTable = "Fournisseurs"
    oDesc.UpdateRule = com.sun.star.sdbc.KeyRule.NO_ACTION
    oDesc.DeleteRule = com.sun.star.sdbc.KeyRule.NO_ACTION
    oDesc.Columns.appendByDescriptor(oDescCol)
    
    ' Ajout à l'index
    oTable.Keys.appendByDescriptor(oDesc)
    
    ' Création de la relation vers table Produits
    
    set oDesc = nothing
    
    ' Création du descripteur pour la clé externe
    oDesc = oTable.Keys.createDataDescriptor
    
    ' Création du descripteur pour la propriété RelatedColumn
    oDescCol = oDesc.Columns.createDataDescriptor
    oDescCol.Name = "RéfProduit"
    oDescCol.Type = com.sun.star.sdbcx.KeyType.FOREIGN
    oDescCol.RelatedColumn = "RéfProduit"
    
    
    oDesc.Type = com.sun.star.sdbcx.KeyType.FOREIGN
    oDesc.ReferencedTable = "Produits"
    oDesc.UpdateRule = com.sun.star.sdbc.KeyRule.NO_ACTION
    oDesc.DeleteRule = com.sun.star.sdbc.KeyRule.NO_ACTION
    oDesc.Columns.appendByDescriptor(oDescCol)
    
    ' Ajout à l'index
    oTable.Keys.appendByDescriptor(oDesc)
    
    end sub

    Document exemple

    Notes