Comment créer et supprimer des relations entre tables ?

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

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