Le deuxième combobox ne se soumet pas au premier. Une desorientation totale... [Résolu]

Lunasoft 75 Messages postés samedi 28 juin 2008Date d'inscription 16 août 2011 Dernière intervention - 15 juin 2011 à 14:12 - Dernière réponse : Lunasoft 75 Messages postés samedi 28 juin 2008Date d'inscription 16 août 2011 Dernière intervention
- 29 juin 2011 à 23:43
Salut!

J'ai une préoccupation avec quelques codes.
J'ai une table ayant deux colonnes: code_principal et sous_code.
J'ai deux comboboxs sur mon form. Le combobox1 a 2 items et le deuxième combobox n'a rien mais il importe les données à partir d'une base de donnée venant de la colonne "sous_code". Et alors, quand je fais du filtrage à partir de mon combobox1 afin d'avoir les sous-données appartenant à chaque items. (ex: 111 appartient à 1, 112 appartient à 1, 221 appartient à 2, 222 appartient à 2).

cela veut dire:
combobox1(ici, les dits codes sont inserés manuellement)
1
2

combobox2 (items importaient de la colonne sous_code)
111
112
221
222

procedure TContes_internes.combobox1Change(Sender: TObject);
begin
case combobox1.ItemIndex of
0 : begin
table1.Filter:='code_principal=' +quotedstr(text1.Text);
table1.Filtered:= true;

//c'est à partir d'ici que s'pose le problème
qry_contesInternes.Open;
qry_contesInternes.DisableControls;
try
while not qry_contesInternes.Eof do
begin
subCod_contesInternes.Items.Add(qry_contasInternas.FieldByName('sous_code').AsString);
qry_contesInternes.Next;
end;
finally
qry_contesInternes.EnableControls;
end;

1 : begin
table1.Filter:='code_principal=' +quotedstr(text1.Text);
table1.Filtered:= true;

//c'est à partir d'ici que s'pose le problème
qry_contesInternes.Open;
qry_contesInternes.DisableControls;
try
while not qry_contesInternes.Eof do
begin
subCod_contesInternes.Items.Add(qry_contasInternas.FieldByName('sous_code').AsString);
qry_contesInternes.Next;
end;
finally
qry_contesInternes.EnableControls;
end;
end;


En un mot, il y a filtrage dans mon Dbgrid. Mais pas dans mon combobox2 où je souhaite voir filtrer SEULEMENT les sous-codes pour lesquels je filtre


Étudiant
Delphi le revolutionnaire, Delphi le Conquérant
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
pierrotk10d 102 Messages postés mardi 13 novembre 2007Date d'inscription 19 août 2018 Dernière intervention - 16 juin 2011 à 15:45
3
Merci
Re bonjour,
Toujours avec un index secondaire on peut se passer du filtre et utiliser l'évènement OnClick du ComboBox1

procedure TForm1.ComboBox1Click(Sender: TObject);
begin
ComboBox2.Clear;
with Table1 do begin
Locate('Code', ComboBox1.Text, []); // Pointe sur le 1èr code
While (FieldValues['Code'] = ComboBox1.Text) and (Not eof) do begin
ComboBox2.Items.Add(Table1.FieldByName('SousCode').AsString);
Next;
end;
end;
// affiche la 1 ère valeur de sous code dans le ComboBox2.Text
ComboBox2.Text := ComboBox2.Items[0];
end;



pierrot

Merci pierrotk10d 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 94 internautes ce mois-ci

Commenter la réponse de pierrotk10d
pierrotk10d 102 Messages postés mardi 13 novembre 2007Date d'inscription 19 août 2018 Dernière intervention - 15 juin 2011 à 21:41
0
Merci
Bonjour,
En supposant que ta table possède un index secondaire sur code+sous code et que cet index est actif voici comment je vois ton problème.
En gros sans les précautions contre les buggs.
Moi j'ai toujours préféré OnFilterRecord à Filter = '...........'
Testé avec Delphi5 et une table Paradox. Ca marche


procedure TForm1.ComboBox1Change(Sender: TObject);
begin
ComboBox2.Clear;
with Table1 do begin
Filtered := True;
While not eof do begin
ComboBox2.Items.Add(Table1.FieldByName('SousCode').AsString);
Next;
end;
First; // Pour afficher la 1ère valeur de sous code dans le Text du ComboBox2
end;
ComboBox2.Text := Table1.FieldByName('SousCode').AsString;
end;

procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
var Accept: Boolean);
begin
Accept :DataSet['Code'] ComboBox1.Items[ComboBox1.ItemIndex];
end;



pierrot
Commenter la réponse de pierrotk10d
Lunasoft 75 Messages postés samedi 28 juin 2008Date d'inscription 16 août 2011 Dernière intervention - 29 juin 2011 à 23:43
0
Merci
Merci, Pierrot.
Ces codes marchent.

Étudiant
Delphi le revolutionnaire, Delphi le Conquérant
Commenter la réponse de Lunasoft

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.