[fr-users] Re: Supprimer/créer des relations entre tables par macro
Il y a une erreur dans le codage qui néanmoins ne déclenche pas une message si l'on l'exécute: En deux cas il y a la ligne: pierre-yves samyn wrote oDescCol.Type = com.sun.star.sdbcx.KeyType.FOREIGN Cette constante n'est pas correcte pour une colonne, on aura besoin d'une constante du type com.sun.star.sdbc.DataType La valeur de la constante est 3, donc le „Type“ de la colonne en ton cas est DECIMAL. En essayant de créer une *nouvelle* table je suis arrivé aux mêmes instructions. Il y a seulement une chose à observer dans cette situation: On doit (avec LibreOffice 4.2 au moins) d'abord créer la table (avec le PRIMARY KEY, ça fonctionne), et puis ajouter la FOREIGN KEY à l'objet table. Mon exemple (testé avec MySQL/MariaDB): tableDescr = tables.createDataDescriptor tableDescr.Name = textmodule keyDescr = tableDescr.Keys.createDataDescriptor keyDescr.Name = Primary Key keyDescr.Type = com.sun.star.sdbcx.KeyType.PRIMARY colDescr = tableDescr.Columns.createDataDescriptor colDescr.Name = seg colDescr.Type = com.sun.star.sdbc.DataType.CHAR colDescr.Precision = 4 tableDescr.Columns.appendByDescriptor(colDescr) keyDescr.Columns.appendByDescriptor(colDescr) colDescr = tableDescr.Columns.createDataDescriptor colDescr.Name = textno colDescr.Type = com.sun.star.sdbc.DataType.TINYINT colDescr.Precision = 6 tableDescr.Columns.appendByDescriptor(colDescr) keyDescr.Columns.appendByDescriptor(colDescr) colDescr = tableDescr.Columns.createDataDescriptor colDescr.Name = textdefinition colDescr.Type = com.sun.star.sdbc.DataType.VARCHAR colDescr.Precision = 255 tableDescr.Columns.appendByDescriptor(colDescr) tableDescr.Keys.appendByDescriptor(keyDescr) ' this creates the table: tables.appendByDescriptor(tableDescr) ' Now create the foreign Key: table = tables.getByName(textmodule) keyDescr2 = table.Keys.createDataDescriptor keyDescr2.Name = FK_textmodule_segment keyDescr2.Type = com.sun.star.sdbcx.KeyType.FOREIGN keyDescr2.DeleteRule = com.sun.star.sdbc.KeyRule.RESTRICT keyDescr2.UpdateRule = com.sun.star.sdbc.KeyRule.RESTRICT keyDescr2.ReferencedTable = segment colDescr2 = keyDescr2.Columns.createDataDescriptor colDescr2.Name = seg 'column in this table colDescr2.Type = com.sun.star.sdbc.DataType.CHAR colDescr2.Precision = 4 colDescr2.relatedColumn = segment 'column of the referenced table keyDescr2.Columns.appendByDescriptor(colDescr2) table.Keys.appendByDescriptor(keyDescr2) Seulement le nom du clé n'est oas arrivé à la base de données, il y a un nom généré: textmodule_ibfk_1 Gerhard -- View this message in context: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4128918.html Sent from the Users mailing list archive at Nabble.com. -- Envoyez un mail à users+unsubscr...@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
[fr-users] Re: Supprimer/créer des relations entre tables par macro
Bonjour Pierre-Yves, Bien sûr, le programme fonctionne, indépendant de la base de données. Mais l'utilisation de la constante /com.sun.star.sdbcx.KeyType.FOREIGN/ est incorrecte dans le context d'une colonne. Comme la constante simplement est une nombre INTEGER, le programme fonctionne et crée une colonne de type DECIMAL, parce que la constante /com.sun.star.sdbc.DataType.DECIMAL/ a aussi bien la valeur 3. Ça peut être ce que tu voulais, mais il serait mieux d'utliser la constante DataType en ce cas. Peut-être j'aurais dû utiliser un autre mot que erreur mais le français n'est pas ma langue maternelle. Mes excuses si ça t'a offensé! L'indication de MySQL/MariaDB veut seulement dire que je ne sais pas si tout fonctionne avec ce code pour une autre machine. Mon point, cependant, est qu'il est nécessaire de créer la table avec/tables.appendByDescriptor**/avant de définir le foreign key (je ne connais pas la traduction). Cordialement Gerhard Am 13.11.2014 19:07, schrieb pierre-yves samyn [via Document Foundation Mail Archive]: Bonjour Gerhard Weydt wrote Il y a une erreur dans le codage qui néanmoins ne déclenche pas une message si l'on l'exécute: ... Mon exemple (testé avec MySQL/MariaDB): Je n'ai pas testé avec MySQL/MariaDB. Le programme fonctionne avec une base intégrée au format HSQL (ce qui était la question me semble-t-il). Je pense d'ailleurs que depuis mars LibreStefan a eu le temps de le tester... Pour info. mes sources : http://api.libreoffice.org/docs/idl/ref/interfacecom_1_1sun_1_1star_1_1sdbcx_1_1XDataDescriptorFactory.html#af61495d9431ea7757d0c4557d8766c70 http://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1sdbcx_1_1Key.html http://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1sdbcx_1_1Key.html#a0c41ab1135fb338045777af3367d99c3 http://api.libreoffice.org/docs/idl/ref/namespacecom_1_1sun_1_1star_1_1sdbcx_1_1KeyType.html Pierre-Yves If you reply to this email, your message will be added to the discussion below: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4128925.html To unsubscribe from Supprimer/créer des relations entre tables par macro, click here http://nabble.documentfoundation.org/template/NamlServlet.jtp?macro=unsubscribe_by_codenode=4102110code=Z2VyaGFyZC53ZXlkdEB0LW9ubGluZS5kZXw0MTAyMTEwfDk2NTI2MTYxMw==. NAML http://nabble.documentfoundation.org/template/NamlServlet.jtp?macro=macro_viewerid=instant_html%21nabble%3Aemail.namlbase=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespacebreadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml -- View this message in context: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4128929.html Sent from the Users mailing list archive at Nabble.com. -- Envoyez un mail à users+unsubscr...@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
Re: [fr-users] Re: Supprimer/créer des relations entre tables par macro
Suite... Peut-être j'aurais dû utiliser un autre mot que erreur mais le français n'est pas ma langue maternelle. Mes excuses si ça t'a offensé! Aucun problème, je ne suis pas senti offensé :) Erreur est tout à fait correct... et je te félicite pour ton français, surtout quand je compare avec ma pratique des langues étrangères :) Cependant je ne te comprends pas très bien sur ce point : Mais l'utilisation de la constante /com.sun.star.sdbcx.KeyType.FOREIGN/ est incorrecte dans le context d'une colonne. Comme la constante simplement est une nombre INTEGER, le programme fonctionne et crée une colonne de type DECIMAL La question initiale, et donc ma réponse, ne porte pas sur la création d'une table (ou l'ajout de colonne à une table) mais sur la gestion des relations sur des tables existantes. Le programme ne crée aucune colonne. Cordialement Pierre-Yves -- Envoyez un mail à users+unsubscr...@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
[fr-users] Re: Supprimer/créer des relations entre tables par macro
Bonsoir Pierre-Yves, c'est correct, le programme ne crée pas des colonnes d'une table, mais il crée un élément d'une clé externe (j'ai trouvé la traduction dans ton codage!). Ici l'extrait pertinent du code: 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 J'appelle ça aussi une colonne, et je pense que les auteurs d'UNO pensaient ainsi, comme ils ont fourni la méthode createDataDescriptor pour l'objet *Columns* de l'objet *Keys*. Et pour un DataDescriptor d'une colonne le type est décrit par une constante com.sun.star.sdbc.DataType : On peut ou utiliser une telle constante ou la valeur numérique, mais utiliser une constante devenant d'un autre contexte est déroutant. Je n'ai pas supposé que tu aies utilisé la constante avec intention, mais que c'était une erreur de copier-coller qu'on ne remarque pas, parce que tout fonctionne. Mais pour un lecteur qui essaie de comprendre ton codage l'emploi de la constante correcte est très utile, parce qu'il comprend une documentation. Mon intention était de rendre ce point plus clair. Du reste je dois dire que j'étais très heureux de trouver ton exemple. J'avais cherché assez longtemps pour trouver les commandes correctes, et apparemment je n'ai utilisé les mots-clé corrects pour le trouver qu'après que j'eusse trouvé la solution, à l'exception de l'ordre création de la table et puis création de l'index. Ton exemple me confirmait que j'étais sur le bon chemin. Cordialement Gerhard Am 13.11.2014 19:50, schrieb pierre-yves samyn [via Document Foundation Mail Archive]: Suite... Peut-être j'aurais dû utiliser un autre mot que erreur mais le français n'est pas ma langue maternelle. Mes excuses si ça t'a offensé! Aucun problème, je ne suis pas senti offensé :) Erreur est tout à fait correct... et je te félicite pour ton français, surtout quand je compare avec ma pratique des langues étrangères :) Cependant je ne te comprends pas très bien sur ce point : Mais l'utilisation de la constante /com.sun.star.sdbcx.KeyType.FOREIGN/ est incorrecte dans le context d'une colonne. Comme la constante simplement est une nombre INTEGER, le programme fonctionne et crée une colonne de type DECIMAL La question initiale, et donc ma réponse, ne porte pas sur la création d'une table (ou l'ajout de colonne à une table) mais sur la gestion des relations sur des tables existantes. Le programme ne crée aucune colonne. Cordialement Pierre-Yves -- Envoyez un mail à [hidden email] /user/SendEmail.jtp?type=nodenode=4128931i=0 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 If you reply to this email, your message will be added to the discussion below: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4128931.html To unsubscribe from Supprimer/créer des relations entre tables par macro, click here http://nabble.documentfoundation.org/template/NamlServlet.jtp?macro=unsubscribe_by_codenode=4102110code=Z2VyaGFyZC53ZXlkdEB0LW9ubGluZS5kZXw0MTAyMTEwfDk2NTI2MTYxMw==. NAML http://nabble.documentfoundation.org/template/NamlServlet.jtp?macro=macro_viewerid=instant_html%21nabble%3Aemail.namlbase=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespacebreadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml gjbiffba.png (33K) http://nabble.documentfoundation.org/attachment/4128940/0/gjbiffba.png -- View this message in context: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4128940.html Sent from the Users mailing list archive at Nabble.com. -- Envoyez un mail à users+unsubscr...@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
[fr-users] Re: Supprimer/créer des relations entre tables par macro
Bonjour LibreStefan wrote J'aimerais savoir (car je n'ai rien trouvé avec Xray et sur le net) s'il était possible de supprimer des relations entre tables par macro ? Xray ne peut pas donner d'info puisque les relations sont définies par du SQL. Tu peux décompresser un odb et voir le fichier script dans le sous-dossier database (instructions CONSTRAINT FOREIGN KEY REFERENCES). Cordialement Pierre-Yves -- View this message in context: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4102116.html Sent from the Users mailing list archive at Nabble.com. -- Envoyez un mail à users+unsubscr...@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
[fr-users] Re: Supprimer/créer des relations entre tables par macro
une fois de plus merci. Mais, il me semble que tu peux créer des tables/des champs par macro. d'où ma supputation de pouvoir supprimer/créer des relations par macros ! -- View this message in context: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4102120.html Sent from the Users mailing list archive at Nabble.com. -- Envoyez un mail à users+unsubscr...@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
[fr-users] Re: Supprimer/créer des relations entre tables par macro
Suite... LibreStefan wrote Mais, il me semble que tu peux créer des tables/des champs par macro. d'où ma supputation de pouvoir supprimer/créer des relations par macros ! Ben... je ne crois pas avoir dit le contraire mais j'ai été un peu court dans mes explications... Les macros peuvent exécuter du SQL donc il devrait suffire de passer les instructions correspondantes (données précédemment et dont tu peux trouver l'explication sur les sites dédiés au sql). Cela dit, je n'ai pas essayé donc pas d'exemple à te passer là tout de suite... Tu peux déjà vérifier ta syntaxe en interactif via Outils Sql Cordialement Pierre-Yves -- View this message in context: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4102121.html Sent from the Users mailing list archive at Nabble.com. -- Envoyez un mail à users+unsubscr...@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
[fr-users] Re: Supprimer/créer des relations entre tables par macro
P-Y-S ce n'était pas une attaque :). je vais regarder -- View this message in context: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4102123.html Sent from the Users mailing list archive at Nabble.com. -- Envoyez un mail à users+unsubscr...@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
[fr-users] Re: Supprimer/créer des relations entre tables par macro
Simple pour toi ... moi je comprends rien :) -- View this message in context: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4102126.html Sent from the Users mailing list archive at Nabble.com. -- Envoyez un mail à users+unsubscr...@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
Re: [fr-users] Re: Supprimer/créer des relations entre tables par macro
Le 19/03/2014 11:13, LibreStefan a écrit : Simple pour toi ... moi je comprends rien :) -- View this message in context: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4102126.html Sent from the Users mailing list archive at Nabble.com. Re-bonjour LibreStefan Il suffit de consulter la page : https://fr.libreoffice.org/assistance/ qui explique en détail (et certainement bien mieux que moi) le fonctionnement, ce qui en soit, n'est pas plus compliqué que d'utiliser le formulaire d'assistance ;-) Bien cordialement -- Philippe CLEMENT -- Envoyez un mail à users+unsubscr...@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
[fr-users] Re: Supprimer/créer des relations entre tables par macro
c'est bon j'ai trouvé comment faire avec les infos de P.Y.S -- View this message in context: http://nabble.documentfoundation.org/Supprimer-creer-des-relations-entre-tables-par-macro-tp4102110p4102143.html Sent from the Users mailing list archive at Nabble.com. -- Envoyez un mail à users+unsubscr...@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
[fr-users] Re: Supprimer/créer des relations entre tables par macro
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+unsubscr...@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