[fr-users] Re: Supprimer/créer des relations entre tables par macro

2014-11-13 Par sujet Gerhard Weydt
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

2014-11-13 Par sujet Gerhard Weydt
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

2014-11-13 Par sujet Gerhard Weydt
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