#1 Thu 05 August 2010 14:20
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
[SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Bonjour,
j'ai un job avec deux composants msgbox. Les variables contenant les résultats s'appellent respectivement: tMsgBox_1_RESULT et tMsgBox_2_RESULT
dans les paramètres du composant tELTOracleOutput, pour le champ "Clauses WHERE",
je cherche à donner les critères suivants:
WHERE
mot_cle LIKE ((String)globalMap.get("tMsgBox_1_RESULT"))
AND
mot_cle_com LIKE ((String)globalMap.get("tMsgBox_2_RESULT"))
;
Alors que j'écris mes critères de la manière suivante:
"where
mot_cle like '((String)globalMap.get("tMsgBox_1_RESULT"))'
and
mot_cle_com like '((String)globalMap.get("tMsgBox_2_RESULT"))'
;"
Il me retourne l'erreur suivante:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
String literal is not properly closed by a double-quote
at demo_oracle.msgbox_0_1.msgbox.tELTOracleMap_1Process(msgbox.java:681)
at demo_oracle.msgbox_0_1.msgbox.tMsgBox_1Process(msgbox.java:549)
at demo_oracle.msgbox_0_1.msgbox.tOracleConnection_1Process(msgbox.java:311)
at demo_oracle.msgbox_0_1.msgbox.runJobInTOS(msgbox.java:914)
at demo_oracle.msgbox_0_1.msgbox.main(msgbox.java:808)
J'ai essayé de réécrire ma clause de diverses manières. Aucun effet.
Comment écrire correctement la clause where pour le composant tELTOracleOutput?
Merci
Cdlt
Luc
Hors ligne
#2 Thu 05 August 2010 14:48
- mcoudert
- Participant actif
- Lieu: Toulouse
- Date d'inscription: 16 Oct 2006
- Messages: 83
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Bonjour,
Vous devriez essayer avec cette syntaxe :
Code:
"where mot_cle like '"+ ((String)globalMap.get("tMsgBox_1_RESULT")) +"' and mot_cle_com like '"+ ((String)globalMap.get("tMsgBox_2_RESULT")) +"';"
A voir s'il ne faut pas echapper les simples quotes..
Mathieu
Hors ligne
#3 Thu 05 August 2010 14:49
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Bonjour,
C'est normal le parser comprend ta requête comme ceci :
du texte : "where mot_cle like '((String)globalMap.get("
puis une variable tMsgBox_1_RESULT
puis du texte "))' and mot_cle_com like '((String)globalMap.get("
puis une variable tMsgBox_2_RESULT
puis du texte : "))';"
D'où l'erreur car pour concaténer deux string il faut utiliser le symbol "+" d'autre part si tu veux utiliser une variable dans ta requête, il faut d'abord sortir de ta chaine puis concaténer ta variable :
Code:
"where mot_cle like '"+((String)globalMap.get("tMsgBox_1_RESULT"))+"' and mot_cle_com like '"+((String)globalMap.get("tMsgBox_2_RESULT"))+"' ;"
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#4 Thu 05 August 2010 17:17
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Merci,
la clause s'écrit correctement à présent.
A l'exécution du job, dans les commentaires d'éxécution (onglet "exécuter"), la requête s'écrit alors normalement [1] avec les valeurs attribuées aux variables. Les valeurs de variables sont bien transmises dans une bonne syntaxe. Merci.
Auparavant, dans la chaîne, j'utilise un composant tELTOracleMap car c'est obligatoire. Celui-ci fait une requête SELECT qui s'incorpore à la requête DELETE. Cela est sans incidence puisque en exécutant la requête dans sqltools ou Toad, celle-ci marche normalement :
[1]:
DELETE FROM (SELECT metadonnees.MSLINK , metadonnees.INTITULE_DONNEE , metadonnees.RESUME , metadonnees.TIP , metadonnees.RESSOURCE_COUPLEE , metadonnees.LANGUE_DONNEE , metadonnees.CATEG_ISO , metadonnees.MOT_CLE , metadonnees.VOC_CONTROLE_ORIGINE , metadonnees.X_MIN , metadonnees.X_MAX , metadonnees.Y_MAX , metadonnees.Y_MIN , metadonnees.ETENDUE_TEMPORELLE , metadonnees.PUBLICATION , metadonnees.DER_REVISION , metadonnees.CREATION , metadonnees.GENEALOGIE , metadonnees.RESOLUTION_SPATIALE , metadonnees.SPECIFICATION , metadonnees.DEGRE_CONFORMITE , metadonnees.ACCES_UTILISATION , metadonnees.RESTRICTIONS_PUBLIC , metadonnees.PARTIE_RESPONSABLE , metadonnees.ROLE_RESPONSABLE , metadonnees.POINT_CONTACT_MD , metadonnees.DATE_MD , metadonnees.LANGUE_MD , metadonnees.CODE_INSEE , metadonnees.CATEG_INSPIRE , metadonnees.P_RESP_ADRESS , metadonnees.P_RESP_VILLE , metadonnees.P_RESP_CP , metadonnees.P_RESP_PAYS , metadonnees.P_RESP_MAIL , metadonnees.PT_CONTACT_ADRESS , metadonnees.PT_CONTACT_VILLE , metadonnees.PT_CONTACT_CP , metadonnees.PT_CONTACT_PAYS , metadonnees.PT_CONTACT_MAIL , metadonnees.VOC_DATE , metadonnees.SPECIFICATION_DATE , metadonnees.SYSTEME_REFERENCE , metadonnees.MOT_CLE_COM , metadonnees.MOT_CLE_2 , metadonnees.MOT_CLE_SYN , metadonnees.LOCALISATEUR_DONNEE , metadonnees.AGENCE , metadonnees.CHEMIN_PHYSIQUE , metadonnees.SEQUENCE FROM metadonnees) METADONNEES WHERE mot_cle like 'eau pluviale' and mot_cle_com like 'TORCY';
Cependant, à l'éxécution du job dans TOS, la requête delete ne s'éxécute pas à cause d'une erreur
ORA-09111: caractère non-valide!
Exception in component tELTOracleOutput_1
java.sql.SQLException: ORA-00911: caractère non valide
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:966)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1170)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3339)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3423)
at demo_oracle.msgbox_0_1.msgbox.tELTOracleMap_2Process(msgbox.java:357)
at demo_oracle.msgbox_0_1.msgbox.tMsgBox_1Process(msgbox.java:716)
at demo_oracle.msgbox_0_1.msgbox.tOracleConnection_1Process(msgbox.java:813)
[statistics] disconnected
at demo_oracle.msgbox_0_1.msgbox.runJobInTOS(msgbox.java:971)
at demo_oracle.msgbox_0_1.msgbox.main(msgbox.java:865)
Qu'est-ce qui ne plaît pas à TOS dans cette requête? J'aimerai bien esquiver le SELECT mais il semble impossible d'utiliser le composant tELTOracleOutput sans tELTOralceMap...
Merci
Luc
Dernière modification par lucclementSTR (Thu 05 August 2010 17:18)
Hors ligne
#5 Fri 06 August 2010 09:26
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Luc,
Peux tu montrer la requête que tu as mise dans le component tELTOracleOutput avec une capture d'écran ?
Merci,
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#6 Fri 06 August 2010 09:41
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Bonjour,
merci Yves pour ton suivi.
Voici la capture.
Luc
Dernière modification par lucclementSTR (Fri 06 August 2010 09:42)
Hors ligne
#7 Fri 06 August 2010 09:59
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Je viens de trouver le problème!
Le point virgule à la fin de la clause WHERE était la cause. Je l'ai supprimé et cela fonctionne!
Voici la clause dans le composant tELTOracleOutput:
Code:
"mot_cle like '"+ ((String)globalMap.get("tMsgBox_1_RESULT")) +"' and mot_cle_com like '"+ ((String)globalMap.get("tMsgBox_2_RESULT")) +"'"
Je recherche désormais à écrire une variante de cette requête dans la clause Where:
Code:
where data like %[i]variable1[/i]% and data like %[i]variable2[/i]% (avec les mêmes variables que précédemment).
Si j'ai bien suivi ton explication Yves, est-ce que cela s'écrit de la manière suivante:
Code:
" where data like '[b]%[/b]"+ ((String)globalMap.get("tMsgBox_1_RESULT")) +"[b]%[/b]' and data like '[b]%[/b]"+ ((String)globalMap.get("tMsgBox_2_RESULT")) +"[b]%[/b]'"
Je vais tester ceci.
Merci.
Luc
Hors ligne
#8 Fri 06 August 2010 10:25
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Si j'ai bien suivi ton explication Yves, est-ce que cela s'écrit de la manière suivante:
Code:
" where data like '[b]%[/b]"+ ((String)globalMap.get("tMsgBox_1_RESULT")) +"[b]%[/b]' and data like '[b]%[/b]"+ ((String)globalMap.get("tMsgBox_2_RESULT")) +"[b]%[/b]'"
Au BBCode près, oui
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#9 Fri 06 August 2010 11:30
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Pardon pour les tags mal utilisés!
Le problème est que cette requête DELETE porte sur un champ de type LONG de la table METADATA.
Ma clause where écrite ci-dessus (sans les tags georezo!) est valide puisque la requête dans les commentaires de l'exécution s'écrit correctement:
Deleting with :
DELETE FROM (SELECT METADATA.ID , METADATA.UUID , METADATA.SCHEMAID , METADATA.ISTEMPLATE , METADATA.ISHARVESTED , METADATA.CREATEDATE , METADATA.CHANGEDATE , METADATA.DATA , METADATA.SOURCE , METADATA.TITLE , METADATA.ROOT , METADATA.HARVESTUUID , METADATA.OWNER , METADATA.GROUPOWNER , METADATA.HARVESTURI , METADATA.RATING , METADATA.POPULARITY , METADATA.DISPLAYORDER FROM METADATA) METADATA WHERE data like '%eau pluviale%' and data like '%TORCY%'
Malheureusement, il persiste un problème de type de champ.
Dans le schéma de ma table, le schéma de tELTOracleInput, celui de tELTOracleMap et celui de tELTOracleOutput, le champ DATA est bien de type LONG.
Pourtant, à l'éxécution du job:
Exception in component tELTOracleOutput_1
java.sql.SQLException: ORA-00932: types de données incohérents ; attendu : NUMBER ; obtenu : LONG
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:966)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1170)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3339)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3423)
at demo_oracle.gg_0_1.gg.tELTOracleMap_2Process(gg.java:355)
at demo_oracle.gg_0_1.gg.tMsgBox_1Process(gg.java:713)
at demo_oracle.gg_0_1.gg.tOracleConnection_1Process(gg.java:810)
[statistics] disconnected
at demo_oracle.gg_0_1.gg.runJobInTOS(gg.java:967)
at demo_oracle.gg_0_1.gg.main(gg.java:862)
Je voie d'où provient l'erreur: du schéma du composant tOracle.
Dans les paramètres du composant, en mode "référentiel", rien de visible. Le job provoque l'erreur précédente.
Par contre, en mode "intégré", la "synchronisation des colonnes" provoque un basculement du type du champ DATA de LONG en NUMBER!!. De même, à l'édition du schéma dans les paramètres du composant (bouton "..."), si je fais "initialise les types DB" dans la fenêtre "output", le champ DATA repasse en type NUMBER.
Je le refais alors basculer manuellement en type LONG, mais à l'éxécution toujours le même problème.
Pourquoi cette persistence à mettre le type NUMBER?
Je sais que la manipulation du type LONG n'est pas permise par toutes les clauses. Mais pourquoi ce basculement?
De même dans SQLTools à l'exécution de la requête:
Code:
ORA-00932: types de données incohérents ; attendu : NUMBER ; obtenu : LONG
Merci
Luc
Dernière modification par lucclementSTR (Fri 06 August 2010 11:35)
Hors ligne
#10 Fri 06 August 2010 12:05
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Maudit type long!
Même si je ne comprend pas la fixette sur le type NUMBER, il est impossible que la requête s'exécute puisque un champ de type LONG ne peut pas être compris dans une clause Where!
Peut-être que cette erreur en est la conséquence mais c'est pas transparent.
Hors ligne
#11 Fri 06 August 2010 14:48
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Bonjour,
changement de stratégie pour supprimer un enregistrement de la table metadata.
Cette table a un champ UUID (de type string) contenant une chaîne de caractères (chiffres et lettres), celle-ci terminant par l'ID de l'enregistrement correspondant de la table metadonnees (champ identifiant appelé "MSLINK" pour éviter les confusions).
Par exemple:
l'enregistrement de la table metadonnees dont:
metadonnees.id (integer) = 4141
correspond à l'enregistrement de la table metadata dont:
metadata.uuid = 'ad8b1231-c006-4870-8530-770cd6184141 (l'attribut est tjs de ce format là)
Ainsi, j'aimerai traduire cela dans un composant tmap.
Le but du job est de supprimer un enregistrement de la table metadata à partir d'un critère sur son champ uuid.
J'ai d'abord un composant tOracleInput où je fais un select de l'attribut metadonnees.ID à partir de critères sur les champs mot_cle et mot_cle_com de la table metadonnees:
Code:
"SELECT GEOSOURCE.METADONNEES.MSLINK FROM GEOSOURCE.METADONNEES WHERE GEOSOURCE.METADONNEES.mot_cle like '"+ ((String)globalMap.get("tMsgBox_1_RESULT")) +"' and GEOSOURCE.METADONNEES.mot_cle_com like '"+ ((String)globalMap.get("tMsgBox_2_RESULT")) +"' "
Jusque ici tout fonctionne.
Ensuite j'ajoute un composant tmap en cherchant à faire une jointure entre le champ MSLINK du côté en input, et le champ UUID du schéma de la table metadata en output.
Le champ MSLINK est de type integer et il faut le convertir en string, et ajouter un caractère comme % (SQL-2) spécifiant que toute chaine de caractère peut être concaténé à gauche.
Je l'écris mal ainsi: % + DataOperation.CHAR(row2.MSLINK) .
Puis je lie tMap à un composant tOracleOutput qui fait une action "supprimer" sur les données.
La difficulté se trouve sur le composant tMap pour faire la jointure correctement avec la concaténation de tout type de caractères au champ MSLINK et éventuellement la transformation du MSLINK en chaîne:
Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problems: Syntax error on token "%", delete this token Type mismatch: cannot convert from int to String at demo_oracle.gg_0_1.gg.tOracleInput_1Process(gg.java:1525) at demo_oracle.gg_0_1.gg.tMsgBox_1Process(gg.java:439) at demo_oracle.gg_0_1.gg.runJobInTOS(gg.java:1921) at demo_oracle.gg_0_1.gg.main(gg.java:1816)
Je ne sais pas si je m'y prend bien dans la conception du job et le choix des composants...
Toutefois, comment écririez-vous cette jointure?
Merci.
Luc Clément
Dernière modification par lucclementSTR (Fri 06 August 2010 14:53)
Hors ligne
#12 Fri 06 August 2010 14:56
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
La capture d'écran n'est pas une jointure
je traiterai le champ "ad8b1231-c006-4870-8530-770cd6184141" pour ne récupérer que la fin et le placer dans un nouveau champ. Est ce que la longueur est toujours la même ? Est ce que la longueur du champ "84141" peut être calculé et utilisé pour prendre la fin du premier champ ?
La jointure se ferait entre 84141 et le nouveau champ créé précédemment, en sortie tu utilises le champ uuid.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#13 Fri 06 August 2010 15:13
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Oui, le champ uuid est toujours de la même longueur 8-4-4-4-12 soit 36 caractères.
En revanche, le champ "4141" est de longueur variable. Il peut prendre les 4, les 5, ...,les 12 derniers caractères du champ uuid. Mais avec 6000 enregistrement d'avance, on peut partir du principe que le champ "4141" ("MSLINK") comporte 4 chiffres.
Mais il y aura toujours le même problème de type de champ entre les 4 caractères du champ UUID qui sont un extrait de chaîne et le champ 4141 un entier.
J'essaie déjà de mettre en pratique ce que tu me dis pour te remontrer une (vraie) jointure j'espère.
Cdlt
Luc
Dernière modification par lucclementSTR (Fri 06 August 2010 15:24)
Hors ligne
#14 Fri 06 August 2010 15:31
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Mais il y aura toujours le même problème de type de champ entre les 4 caractères du champ UUID qui sont un extrait de chaîne et le champ 4141 un entier.
Je par du principe que tu as deux champs X et Y avec :
id= 8-4-4-12 et uuid = ad8b1231-c006-4870-8530-770cd6184412
Le premier champs : StringHandling.EREPLACE("-","",id) si id = 84412 alors cela n'est pas nécessaire
Le deuxième : StringHandling.RIGHT(uuid,5)
Pour transformer un int en string : id+""
Pour transformer un string en int : Integer.parseInt("01")
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#15 Fri 06 August 2010 16:45
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Merci Yves,
le job marche désormais... mais sans résultat, il trouve un enregistrement mais sans le supprimer!.
J'ai créé un champ dans la table metadata (là où se trouve l'UUID): "REF_MSLINK".
Dans le tOracleInput, la requête est la suivante:
Code:
"SELECT GEOSOURCE.METADONNEES.MSLINK FROM GEOSOURCE.METADONNEES WHERE mot_cle like '"+ ((String)globalMap.get("tMsgBox_1_RESULT")) +"' AND mot_cle_com like '"+ ((String)globalMap.get("tMsgBox_2_RESULT")) +"' "
(toujours avec les msgbox qui renvoient les variables).
Puis ce composant est relié à un tMap:
en input: MSLINK (de la table metadonnees); en output le schéma de la table metadata.
En output, en face de REF_MSLINK, j'ai glissé-déposé l'expression row2.MSLINK+""
Puis tMap est relié à tOracleOutput qui fait une action de suppression sur les données de la table metadata.
"1 row" circule sur mon job mais rien de supprimé et pas de message dans les commentaire d'exécution.
Est-ce que la jointure est encore mal renseignée?
Est-ce le fait qu'il n'y ait pas de clause where dans le composant tOracleOutput et qu'il faut préférer le composant tELTOracleOutput?
Merci
Luc
Dernière modification par lucclementSTR (Fri 06 August 2010 17:12)
Hors ligne
#16 Fri 06 August 2010 17:14
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Le premier sous-job sert à mettre à jour le champ "REF_MSLINK" (de type chaîne) de la table metadata
Hors ligne
#17 Mon 09 August 2010 16:53
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Bonjour,
j'ai un champ date qui est reconnu comme chaîne dans TOS.
Je cherche à le convertir en date dans un composant tMap mais avec la fonction certainement pas appropriée:
TalendDate.parseDate("yyyy-MM-dd HH:mm:ss","Var.date")
Merci de votre aide
Luc
Hors ligne
#18 Tue 10 August 2010 10:52
- lucclementSTR
- Participant occasionnel
- Lieu: Albi
- Date d'inscription: 12 Mar 2010
- Messages: 33
Re: [SDI][TOS] - tELTOracleOutput WHERE_CLAUSE
Bonjour,
comment récupérer le contenu d'une requête d'un composant tOracleInput par exemple?
La variable "tOracleInput_QUERY_" permet juste de récupérer l'écriture de la requête.
Merci
Cdlt
Luc Clément
Hors ligne