exprimer une condition dans un fichier xsql

exprimer une condition dans un fichier xsql - XML/XSL - Programmation

Marsh Posté le 19-06-2003 à 16:55:37    

comment fait on pour exprimer une condition dans une requete dans une fichier xsql
en gros c pour traiter le résultat des données d'un formulaire que si elles ont été données (dans la clause where d'une requete select) étant données que les données sont facultatives
merci d avance

Reply

Marsh Posté le 19-06-2003 à 16:55:37   

Reply

Marsh Posté le 01-07-2003 à 10:26:12    

il est possible de faire une condition en utilisant les fonctions du sgbd (du genre decode)
mais le pb c que ca utilise souvent plus de ressources que necessaire
il reste également des choses impossibles a transcrire avec cette méthode
 
mon probleme est de passer de requetes écrites dans du php a des requetes écrites dans du xsql
en php :
 
<?
$req = "select att1,att2...
from table1,table2..."
if ($ECHCE<>"ALL" ) $req=$req.",table5,table6";
 
==> ce genre de chose ne pe pas s'écrire en sql(?)
 
$req=$req." where condition1,
and condition2...
if ($ECHCE<>"ALL" ) $req=$req." table5.att=table4.att"
 
...
on peut donc simuler cette derniere condition par des decode mais cela oblige la requete a faire bcp + de tests...
 
il n'y a pas de solutions plus efficace?

Reply

Marsh Posté le 01-07-2003 à 14:29:40    

:bounce: up

Reply

Marsh Posté le 11-07-2003 à 15:32:33    

$req = "select att1,att2...  
from table1,table2..."  
if ($ECHCE<>"ALL" ) $req=$req.",table5,table6";  
 
peut s'ecrire en XSQL
SELECT att1, att2, ..
from table1, table2, {@autres_tables}
 
autres_tables étant un parametre que tu auras passé à ta XSQL correspondant à tes conditions sur les tables .
Même principe pour tes conditions.
Si t'as plein de parametres dynamique comme ça ta requete ne sera pas trop comprehensible directement.
 
 
 

Reply

Marsh Posté le 11-07-2003 à 16:07:54    

phnatomass a écrit :

$req = "select att1,att2...  
from table1,table2..."  
if ($ECHCE<>"ALL" ) $req=$req.",table5,table6";  
 
peut s'ecrire en XSQL
SELECT att1, att2, ..
from table1, table2, {@autres_tables}
 
autres_tables étant un parametre que tu auras passé à ta XSQL correspondant à tes conditions sur les tables .
Même principe pour tes conditions.
Si t'as plein de parametres dynamique comme ça ta requete ne sera pas trop comprehensible directement.
 


 
oui c sur que comme ca on peut faire plein de trucs
mais pour manipuler les parametres en xsl c la guerre (enfin je trouve)
ca va peut etre (surement) te paraitre stupide mais je n'arrive pas a les manipuler  :sweat:  
comment tu fais pour leur attribuer une valeur ailleur que pendant lors de leur déclaration ou grace à une structure d'entrée (text, combobox...)?

Reply

Marsh Posté le 11-07-2003 à 16:42:56    

Comment appelles tu ton xsql ?
Tu peux faire du servlet chaining .
Les parametres de ta requete sont envoyés à une servlet dans laquelles ils sont traités ensuite ta servlet appele ta servlet xsql en passant les parametres que tu souhaites et qui ont été modifiés à ta sauce.
En java regarde du coté des RequestDispatcher
et de Request.setAttribute

Reply

Marsh Posté le 11-07-2003 à 16:53:28    

phnatomass a écrit :

Comment appelles tu ton xsql ?
Tu peux faire du servlet chaining .
Les parametres de ta requete sont envoyés à une servlet dans laquelles ils sont traités ensuite ta servlet appele ta servlet xsql en passant les parametres que tu souhaites et qui ont été modifiés à ta sauce.
En java regarde du coté des RequestDispatcher
et de Request.setAttribute


 
je ne comprend pas vraiment ce que tu dis...
j appelle directement mes fichier xsql avec tomcat
donc aucun parametre n'a de valeur par defaut
ensuite je les donne en passant par les formulaires
ce n'est pas moi qui doit intégrer les pages à la totalité du site mais il me semble que la page devra etre rappelé ensuite par du jsp
 
et puis il me semble difficile de changer les parametres avant car je devrai les changer en fonction de ce que g récupéré dans le formulaire
en gros il faudrait que je puisse modifier la valeur de plusieurs de mes parametres lorsque g le droit d'en changer un...
mais je sais pas comment on fait (c possible?)

Reply

Marsh Posté le 11-07-2003 à 17:08:47    

Citation :


j appelle directement mes fichier xsql avec tomcat  
donc aucun parametre n'a de valeur par defaut  


Ca veux dire que tu fais un truc du genre  
http://monserveur/maxsql?param1=va [...] m2=valeur2
 
C'est ça ?

Reply

Marsh Posté le 11-07-2003 à 17:12:02    

phnatomass a écrit :

Citation :


j appelle directement mes fichier xsql avec tomcat  
donc aucun parametre n'a de valeur par defaut  


Ca veux dire que tu fais un truc du genre  
http://monserveur/maxsql?param1=va [...] m2=valeur2
 
C'est ça ?


oui sauf que je donne pas les parametres (mais je peux les donner)
ceux ci sont données par les valeurs données dans le formulaire

Reply

Marsh Posté le 15-07-2003 à 12:13:25    

donc ton formulaire doit être posté à une jsp.
Dans la jsp tu manipules tes parametres comme tu veux en suite tu fais

Code :
  1. <jsp:include page="ton_fichier.xsql">
  2. <jsp:param name="param1" value="value1"/>
  3. <jsp:param name="param2" value="value2"/>
  4. </jsp:include>



Message édité par phnatomass le 15-07-2003 à 12:14:43
Reply

Marsh Posté le 15-07-2003 à 12:13:25   

Reply

Marsh Posté le 15-07-2003 à 12:18:09    

phnatomass a écrit :

donc ton formulaire doit être posté à une jsp.
Dans la jsp tu manipules tes parametres comme tu veux en suite tu fais

Code :
  1. <jsp:include page="ton_fichier.xsql">
  2. <jsp:param name="param1" value="value1"/>
  3. <jsp:param name="param2" value="value2"/>
  4. </jsp:include>


 


 
mais je ne manipule pas de jsp pour le moment... (apres peut etre)
g bien la meme chose dans ma feuille xsl:

<xsl:param name="NI" value="{@NI}"/>


je peux lui attribuer une valeur au début mais je ne sais pas comment la modifier ensuite selon les évenements...

Reply

Marsh Posté le 17-07-2003 à 11:00:21    

bon ca progresse un peu
g compris comment manipuler les parametres en local en utilisant des templates
ca permet de faire 2 ou 3 trucs supplémentaires par rapport a avant
le probleme, c que ca ne fonctionne pas avec les parametres global mais les parametres utilisés dans la feuille xsql ne peuvent etre que global
donc je ne pe toujours pas utiliser de parametres directement dans ma requete...
 
qqun a une idée?

Reply

Marsh Posté le 17-07-2003 à 11:35:39    

argghhh
 

C'est impossible: les paramêtres XSLT sont, comme les variables, constants et ne peuvent pas être modifiés.


 
cf: http://xmlfr.org/listes/xml-tech/2001/06/0512.html
 
qqun a une autre idée...
c a desesperer...

Reply

Marsh Posté le 17-07-2003 à 16:26:45    

bon
j utilise des parametres locaux étant donné que je ne peux rien faire avec des parametres globaux
du coup je me retrouve avec une requete composée de petits morceaux :
select {@SelectTout}
from decode(&apos;{@BU}&apos;,NULL,{@FromInter},{@FromBuro})
 
 AND cd_br in ('11','12','13')
group by REFER_PR
order by REFER_PR
 
(cette requete fait normalement une cinquantaine de ligne)
 
mais le probleme (je suis obligé de faire mes conditions ici et non pas dans ma feuille de style étant donné que mes parametres sont locaux donc pas réutilisable dans ma feuille xsql sinon) c le fait que ma variable contienne plusieurs expression
le decode n'apprecie pas vraiment de trouver des virgules et autres joyeusetés au milieu de ses parametres, étant donné que mes parametres (ex:{@BU}) sont interprétés avant le decode...
 
euh ... une idée?

Reply

Marsh Posté le 21-07-2003 à 15:34:44    

hop le fou a écrit :

bon
le decode n'apprecie pas vraiment de trouver des virgules et autres joyeusetés au milieu de ses parametres, étant donné que mes parametres (ex:{@BU}) sont interprétés avant le decode...
 
euh ... une idée?


C'est normale que tes param soient interprétés avant le decode.
C'est idiot ce que je dit mais tu dois fournir des parametres correctes pour que la requete sql resultante soit valable .
Sinon jk'avoue que j'ai du mal à comprendre le rapport en tes variable au niveau xsql et eu niveau xsl.
Pour info dans ton xsql tu peux passer un parametes (considerer comme une variable au sens xsl du terme) en faisant dans ton xsl :

Code :
  1. <xsql:set-stylesheet-param name="lavariable" value="{@lavariable"/>


puis dans ton xsl
tu déclares

Code :
  1. <xsl:param name="lavariable" select="@lavariable"/>


que tu utilises en faisant :
$lavariable
puis dans ton xsl pour le recuperere

Reply

Marsh Posté le 21-07-2003 à 16:05:50    

phnatomass a écrit :


C'est normale que tes param soient interprétés avant le decode.
C'est idiot ce que je dit mais tu dois fournir des parametres correctes pour que la requete sql resultante soit valable .
Sinon jk'avoue que j'ai du mal à comprendre le rapport en tes variable au niveau xsql et eu niveau xsl.
Pour info dans ton xsql tu peux passer un parametes (considerer comme une variable au sens xsl du terme) en faisant dans ton xsl :

Code :
  1. <xsql:set-stylesheet-param name="lavariable" value="{@lavariable"/>


puis dans ton xsl
tu déclares

Code :
  1. <xsl:param name="lavariable" select="@lavariable"/>


que tu utilises en faisant :
$lavariable
puis dans ton xsl pour le recuperere


 
oui je sais que c interprété avant mais ca m aurait bien arrangé  :D  
en fait le truc c que c un peu a l'envers chez moi
la premiere fois que j'appelle ma feuille xsql, je ne passe pas de parametre : aucune donnée n'est affiché en ce qui concerne la base
en revanche dans la feuille de style xsl, il ya une autre partie qui consiste a afficher un formulaire
une fois celui ci rempli et validé, la feuille xsql va etre appelée avec pour parametre les données récupérées dans le dit formulaire puis la feuille de style pourra cette fois ci traiter et afficher les résultats renvoyés (et le formulaire evidemment pour qu on puisse enchainer les requetes)
d'ou le pb : ca ne m avance a rien de passer des parametres directement a l ouverture de ma feuille xsql
en revanche ce que j'aurais souhaité faire, c'est de créer/modifier un autre parametre correpondant au parametre récupéré dans mon formulaire de ma feuille de style...
or je n'ai pas trouvé comment faire ceci étant donné la nature des parametres des feuilles xsql

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed