jcaction
Messages postés11Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention21 octobre 2008
-
20 oct. 2008 à 17:28
jcaction
Messages postés11Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention21 octobre 2008
-
21 oct. 2008 à 22:04
Bonjour à tous !
Je souhaite utiliser le composant CheckListBox dans une application afin d'utiliser les champs cochés comme paramètres pour une requête à plusieurs paramètres (J'utilisse Firebird 2 comme SGBD).
Mon problème est que lorsque je coche une autre case , il répète toutes les autres cases cochées au auparavant. Je sais pas trop quoi faire et je compte sur vous pour me sortir de là (lol) !
Voici le code qui me permet de récupérer les case cochées
begin
if CheckListBox1.Checked[i] then
// j' essaie de recuperer l'item (le texte) des cases cochées dans un edit en separant par un '-' juste pour tester
Edit1.Text:=Edit1.Text+CheckListBox1.Items[i] + ' - ';
end;
end;
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 21 oct. 2008 à 16:13
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
Query1.Close;
with Query1.SQL do
begin
Clear;
Add('select * from client ,commande ');
Add('where (client.codecli = commande.codecli) '); Add('and ((commande.saison :p1) or (commande.saison :p2) or '); Add('(commande.saison :p3) or (commande.saison :p4)) ');
end;
for i :=0 to CheckListBox1.Items.Count -1 do
begin
if CheckListBox1.Checked[i] then
case i of :
0: Query1.ParamByName('p1').Text := CheckListBox1.Items[i];
1: Query1.ParamByName('p2').Text := CheckListBox1.Items[i];
2: Query1.ParamByName('p3').Text := CheckListBox1.Items[i];
3: Query1.ParamByName('p4').Text := CheckListBox1.Items[i];
end;
end;
Query1.Open;
end;
une fois les items choisis, tu lances cette procédure.
A voir qd même si la requête ne râle pas lorsqu'un paramètre n'est pas défini !
L_art_ment
Messages postés302Date d'inscriptionvendredi 21 septembre 2007StatutMembreDernière intervention 6 février 2013 20 oct. 2008 à 21:46
Ah d'accord,
Bein essaie ca :
procedure TForm1.CheckListBox1Click(Sender: TObject);
begin
if CheckListBox1.checked[CheckListBox1.ItemIndex] then
Edit1.Text:=Edit1.Text+CheckListBox1.Items[CheckListBox1.ItemIndex] + ' - ';
jcaction
Messages postés11Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention21 octobre 2008 20 oct. 2008 à 22:44
Merci pour vos réponses mais le problème est le même.
Si vous avez une autre solution pour contourner le problème je suis dispo mais la contrainte est que je dois absolument utiliser un CheckListbox.
jcaction
Messages postés11Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention21 octobre 2008 21 oct. 2008 à 14:25
Salut cantador voici la requête que je souhaite exécuter en prenant en paramètre
select * from client ,commande
where (client.codecli = commande.codecli)
/* ici je me limite à 4 saisons P1 à p4 qui doivent correspondre aux items qui seront cochés dans mon CheckListBox*/and ((commande.saison :p1) or (commande.saison :p2) or (commande.saison = :p3) or (commande.saison = :p4));
jcaction
Messages postés11Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention21 octobre 2008 21 oct. 2008 à 21:46
Salut Cantador,
J'ai testé ta proposition mais ça ne marche que si on coche les 4 premiers items or le but est de permettre de récupérer tous les champs cochés pas les 4 premiers.
Ex:
on coche le 0 puis le 3 puis le 6 et enfin le 20
le résultat de la requête doit être l'item du 0 du 3 du 6 et du 20
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 21 oct. 2008 à 22:01
Il te faut autant de case que d'items..
suffit de compléter le code..
Cette solution est adaptée bien entendu pour quelques items seulement mais si tu as une centaine de choix possibles, il faut alors trouver une autre alernative...
si tu en as beaucoup, alors tu crées un tableau de string.
et tu fais ensuite une boucle dessus, et tu testes de la même manière.