Le deuxième combobox ne se soumet pas au premier. Une desorientation totale...

Résolu
Lunasoft Messages postés 75 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 16 août 2011 - 15 juin 2011 à 14:12
Lunasoft Messages postés 75 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 16 août 2011 - 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
A voir également:

3 réponses

pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
16 juin 2011 à 15:45
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
3
pierrotk10d Messages postés 110 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 2 février 2024 3
15 juin 2011 à 21:41
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
0
Lunasoft Messages postés 75 Date d'inscription samedi 28 juin 2008 Statut Membre Dernière intervention 16 août 2011
29 juin 2011 à 23:43
Merci, Pierrot.
Ces codes marchent.

Étudiant
Delphi le revolutionnaire, Delphi le Conquérant
0
Rejoignez-nous