Comment créer et supprimer des relations entre tables ?
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
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.
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
- ↑ Voir la documentation de l'API
- ↑ Voir la documentation de l'API
- ↑ Voir la documentation de l'API