Date: prev next · Thread: first prev next last
2014 Archives by date, by thread · List index


Suite...


LibreStefan wrote
c'est bon j'ai trouvé comment faire avec les infos de P.Y.S

Ok, super... :)

Cela dit, comme je l'indiquais je n'avais pas encore travaillé là-dessus et
j'ai
"accepté" un peu vite le fait qu'on ne trouvait pas avec Xray.

M'étant penché rapidement sur l'API je m'aperçois qu'il devrait y avoir 
tout ce qu'il faut pour éviter de passer par le SQL (ce qui devrait éviter
les problèmes de portabilité d'un moteur à un autre).

Du coup, ni une ni deux, ci-dessous un exemple illustrant comment
supprimer les index (clé primaire et relations existantes) pour la table 
FournisseursProduits de la base jointe. Puis bien sûr, recréation...

Comme l'autre fois, le code ci-dessous est "minimal" : aucun contrôle
n'est fait (y a-t-il des données ? gestion des erreurs, etc.). Ce genre de
question ne serait pas à se poser si les index étaient créés lors de la
création de la table...

Le programme manipulant la base (et ma connaissance du truc étant plus
que récente) il va de soi que je te conseille de travailler sur des copies
et 
non une base de production...

GestionRelations.odb
<http://nabble.documentfoundation.org/file/n4102167/GestionRelations.odb>  

Cordialement
Pierre-Yves (ci-dessous le 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

oCol = oTable.columns.getByName("RéfFournisseur")

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

oCol = oTable.columns.getByName("RéfProduit")

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



--
View this message in context: 
http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4102167.html
Sent from the Users mailing list archive at Nabble.com.

-- 
Envoyez un mail à users+unsubscribe@fr.libreoffice.org pour savoir comment vous désinscrire
Les archives de la liste sont disponibles à http://listarchives.libreoffice.org/fr/users/
Tous les messages envoyés sur cette liste seront archivés publiquement et ne pourront pas être 
supprimés

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.