Macros

From The Document Foundation Wiki
< Macros‎ | Base
Jump to: navigation, search

Comment créer et supprimer des relations entre tables ?

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.
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

Notes :