Salut;

cette procédure est appelée lors d'un clic sur un TreeViw, le hic c'est qu'elle retourne zéro enregistrements rien que dans une partie alors qu'elle retourne le nombre exacte d'enregistrements dans les autres endroits.

voici tout le code peut-être que quelqu'un verra ce que je ne vois pas !

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
procedure TfmListe.tvObjetClick(Sender: TObject);
begin
  with qbeneficiaire do
  begin
    SQL.Clear;
 
    // si c'est un noeud parent alors selectionner le premier noeud fils
    if (tvObjet.Selected.HasChildren) then
       tvObjet.Select(tvObjet.Items[tvObjet.Selected.AbsoluteIndex + 1]);
 
    // Bénéficiaire
    // retourne zéro enregistrements pour cette partie
    if (tvObjet.Selected.HasAsParent(tvObjet.Items[0])) then
    begin
      //ShowMessage(inttostr(tvObjet.Selected.Index));
      case tvObjet.Selected.Index of
        // tout
        0 : Texte := 'SELECT * FROM Benef_Cat_Fam';
        // actif
        1 : Texte := 'SELECT * FROM Benef_Cat_Fam WHERE Actif=True';
        // inactif
        2 : Texte := 'SELECT * FROM Benef_Cat_Fam WHERE Actif=False';
      end;
    end;
 
    // Contrat
    if tvObjet.Selected.HasAsParent(tvObjet.Items[4]) then
    begin
      Texte := 'SELECT Contrat.Fin_Contrat, Benef_cat_fam.Nom, '
               + 'Benef_cat_fam.Prenom, Benef_cat_fam.Date_Naissance, '
               + 'Benef_cat_fam.Num_Identite, Benef_cat_fam.Num_Securite_Sociale, '
               + 'Benef_cat_fam.Num_Dossier, Benef_cat_fam.Actif, Benef_cat_fam.Archivage '
               + 'FROM Benef_Cat_Fam Benef_cat_fam '
               + 'LEFT OUTER JOIN Contrat Contrat '
               + 'ON  (Contrat.code_beneficiaire = Benef_cat_fam.code_beneficiaire) ';
 
      case tvObjet.Selected.Index of
        // contrat expiré
        0 : Texte := Texte + 'WHERE  Contrat.Fin_Contrat = FALSE';
        // contrat en cours
        1 : Texte := Texte + 'WHERE  Contrat.Fin_Contrat = TRUE';
        // sans contrat
        2 : Texte := 'SELECT DISTINCT Contrat.Fin_Contrat, Beneficiare.Nom, '
                   + 'Beneficiare.Prenom, Beneficiare.Date_Naissance, Beneficiare.Lieu_Naissance, '
                   + 'Beneficiare.Num_Identite, Beneficiare.Num_Securite_Sociale, '
                   + 'Beneficiare.Num_Dossier, Beneficiare.Actif, Beneficiare.Archivage, Contrat.date_Entree '
                   + 'FROM Contrat Contrat '
                   + 'RIGHT OUTER JOIN Beneficiare Beneficiare '
                   + 'ON  (Beneficiare.code_beneficiaire = Contrat.code_beneficiaire) '
                   + 'WHERE  Contrat.Code_Contrat IS NULL '
                   + 'ORDER BY Contrat.Fin_Contrat';
      end
    end;
 
    // Archive
    if (tvObjet.Selected.HasAsParent(tvObjet.Items[8])) then
    begin
      case tvObjet.Selected.Index of
        0 : Texte := 'SELECT * FROM Benef_Cat_Fam WHERE Archivage=True';
        1 : Texte := 'SELECT * FROM Benef_Cat_Fam WHERE Archivage=True AND Actif=TRUE';
        2 : Texte := 'SELECT * FROM Benef_Cat_Fam WHERE Archivage=True AND Actif=FALSE';
      end
    end;
 
    // Groupe
    if tvObjet.Selected.HasAsParent(tvObjet.Items[12]) then
    begin
      tvObjet.Selected.SelectedIndex := 16;
      Texte := 'SELECT * FROM Benef_Cat_Fam '
             + 'WHERE Categorie=' + QuotedStr(tvObjet.Selected.Text);
    end;
 
    // Activité
    if tvObjet.Selected.HasAsParent(tvObjet.Items[pos_noeud-1]) then
    begin
      tvObjet.Selected.SelectedIndex := 16;
      Texte := 'SELECT * FROM Benef_Cat_Fam '
             + 'WHERE Famille=' + QuotedStr(tvObjet.Selected.Text);
    end;
 
   // Traitement en Mode SQL
   if (texte <> '') then
   begin
     qbeneficiaire.SQL.Text := texte;
     qbeneficiaire.Open;
     case qbeneficiaire.RecordCount of
        -1,0 : sbInfo.Panels[0].Text := 'Aucun enregistrement';
           1 : sbInfo.Panels[0].Text := '1 enregistrement trouvé';
        else sbInfo.Panels[0].Text := IntToStr(qbeneficiaire.RecordCount)
                                      + ' enregistrements trouvés';
     end
   end;
  end;
end;
 
Toues les parties de ce code me rendent le nembre d'enregistrements exacat sauf cette partie 
 
    // Bénéficiaire
    if (tvObjet.Selected.HasAsParent(tvObjet.Items[0])) then
    begin
      //ShowMessage(inttostr(tvObjet.Selected.Index));
      case tvObjet.Selected.Index of
        // tout
        0 : Texte := 'SELECT * FROM Benef_Cat_Fam';
        // actif
        1 : Texte := 'SELECT * FROM Benef_Cat_Fam WHERE Actif=True';
        // inactif
        2 : Texte := 'SELECT * FROM Benef_Cat_Fam WHERE Actif=False';
      end;
    end;

je ne trouve pas le problème, une idée, une piste.

Merci d'avance.