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