JSL - Sélection multiple dans une liste à insérer dans une requête SQL<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour, j'ai un petit problème,
J'ai créé une liste puis une list box pour pouvoir sélectionner différentes valeurs dans cette liste, je souhaite insérer ma sélection de valeurs dans une requête SQL.
Mais ça ne marche pas, voici mon script :
choix = {"rouge","vert","bleu", "jaune"};
rappel_flag = 0 ;
NW=Nouvelle fenêtre("Test",
H Zone de liste( Zone de texte( "choisir les couleurs" ), y = Zone de liste ( choix ) ),
Zone de liste V (
Boîte à boutons( "OK",
choix = (y << getselected);
:: rappel_flag = 1 ;
NW << Fermer la fenêtre ;
)
)
);
select = "SÉLECTIONNER...
DEPUIS ...
OÙ Couleurs IN '" || choix || "' " ;
Avez-vous une idée du problème ?
Merci pour vos réponses !
Re: JSL - Sélection multiple dans une liste à insérer dans une requête SQLLe concaténer des éléments La fonction ne prend que des chaînes comme arguments, cela ne fonctionnera donc pas pour une liste numérique.
Je ne savais pas que l'on pouvait continuer à ajouter des arguments de substitution après les deux premiers.Merci de m'avoir montré cette astuce MS !
Re: JSL - Sélection multiple dans une liste à insérer dans une requête SQLDans un contexte Listbox comme dans l'exemple d'origine, les éléments doivent être des chaînes pour pouvoir être sélectionnés dans la listbox. Autrement dit, les nombres doivent de toute façon être convertis en chaînes à l’avance.
Mais supposons que la liste soit donnée sous la forme Choice = {12,156,13,25}, alors la chaîne SQL pourrait être concaténée comme ceci :
choix = { 12 , 156 , 13 , 25 } ;
sélectionner = "SÉLECTIONNER... DE... OÙ ID DANS " || remplaçant ( carboniser ( choix ) , "{" , "(" , "}" , ")" , " " , "" ) ;
Re: JSL - Sélection multiple dans une liste à insérer dans une requête SQLBonjour,
Oui, la fonction concat fonctionne aussi mais uniquement pour la chaîne et non pour le nombre. Vrai ?
Avez-vous des conseils pour une liste numérique ?
Par exemple : au lieu d'avoir choix = {"rouge", "vert", "bleu", "jaune"}; nous avons des valeurs numériques comme Choice = {12,156,13,25} ;
et à la fin on veut avoir :
sélectionner = "SÉLECTIONNER... DE... OÙ ID IN (12,156,13,25)
Re: JSL - Sélection multiple dans une liste à insérer dans une requête SQLIl existe une fonction intéressante appelée concaténer des éléments qui peut être utilisé pour créer votre liste d'entrées avec une seule ligne :
choix = { "rouge" , "vert" , "bleu" , "jaune" } ;
rappel_flag = 0 ;
NO = Nouvelle fenetre ( "Test" ,
<< modal ,
Zone de liste H ( Zone de texte ( "choisir les couleurs" ) , oui = Zone de liste ( choix ) ) ,
Zone de liste V (
Boîte à boutons ( "D'ACCORD" ,
choix = ( oui << être sélectionné ) ;
:: rappel_flag = 1 ;
)
)
) ;
choix_dans_liste = "('" || concaténer des éléments ( choix , "', '" ) || "')" ;
sélectionner = "SÉLECTIONNER... DE ... OÙ Couleurs DANS " || choix_dans_liste ;
Re: JSL - Sélection multiple dans une liste à insérer dans une requête SQLMerci Guillaume, ça fonctionne !
Merci MS !
Re: JSL - Sélection multiple dans une liste à insérer dans une requête SQLEn plus de transformer la liste en chaîne, ce que gbu résout bien ci-dessus, il y a aussi le problème de la sélection évaluée avant que la sélection n'ait été effectuée à moins que la fenêtre ne soit modale ou que la construction de la chaîne de sélection ne soit déplacée dans le OK- script de bouton.
Exemple de fenêtre modale :
choix = { "rouge" , "vert" , "bleu" , "jaune" } ;
rappel_flag = 0 ;
NO = Nouvelle fenetre ( "Test" ,<< modal ,
Zone de liste H ( Zone de texte ( "choisir les couleurs" ) , oui = Zone de liste ( choix ) ) ,
Zone de liste V (
Boîte à boutons ( "D'ACCORD" ,
choix = ( oui << être sélectionné ) ;
:: rappel_flag = 1 ;
)
)
) ;
les choix = "'" || choix [ 1 ] || "'" ; // Premier élément sélectionné
// Ajouter plus d'éléments s'il y en a plusieurs
Pour ( je = 2 , je <= N articles ( choix ) , je ++,
les choix = les choix || ", '" || choix [ je ] || "'"
) ;
sélectionner = "SÉLECTIONNER...DE...OÙ Couleurs DANS (" || les choix || ")" ;
Exemple non modal :
choix = { "rouge" , "vert" , "bleu" , "jaune" } ;
rappel_flag = 0 ;
NO = Nouvelle fenetre ( "Test" , //<
Zone de liste H ( Zone de texte ( "choisir les couleurs" ) , oui = Zone de liste ( choix ) ) ,
Zone de liste V (
Boîte à boutons ( "D'ACCORD" ,
choix = ( oui << être sélectionné ) ;
:: rappel_flag = 1 ;
les choix = "'" || choix [ 1 ] || "'" ;
Pour ( je = 2 , je <= N articles ( choix ) , je ++,
les choix = les choix || ", '" || choix [ je ] || "'"
);
sélectionner = "SÉLECTIONNER...DE...OÙ Couleurs DANS (" || les choix || ")" ;
NO << Fermer la fenêtre ;
)
)
) ;
Re: JSL - Sélection multiple dans une liste à insérer dans une requête SQLSalut Antoine,
Vous pouvez faire comme ceci :
===========================================
choix = {"rouge","vert","bleu", "jaune"};
rappel_flag = 0 ;
NW=Nouvelle fenêtre("Test",
H Zone de liste( Zone de texte( "choisir les couleurs" ), y = Zone de liste ( choix ) ),
Zone de liste V (
Boîte à boutons( "OK",
choix = (y << getselected);
:: rappel_flag = 1 ;
NW << Fermer la fenêtre ;
)
)
);
select = "SÉLECTIONNER...
DEPUIS ...
OÙ Couleurs DANS 'strchoice' " ;
/* Step1 : Create a string from the list using loop - Création d'une chaîne de carcatère au format attendu en bouclant sur le nombre de valeurs */
string_color = "('" || choix[1] || "'";
Pour( i = 2, i <= Nitems(choix), i++,
string_color = string_color || ",'" || choix || "'"
);
string_color = string_color || ")";
/* Étape 2 : Remplacer le stingchoice par la valeur de string_color */
select = substitut(select,"'strchoice'",string_color);
===========================================
Cordialement,
Guillaume