Compter le nombre de ligne d'un dbgrid

Messages postés
52
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
24 juillet 2013
- - Dernière réponse : newgame
Messages postés
52
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
24 juillet 2013
- 24 juil. 2013 à 15:16
Bonjour,
Je suis en train de créer une application avec 2 dbgrid
Quand on sélectionne une ligne dans le premier dbgrid le 2eme dbgrid (relation entre les deux tables via masterfield et mastertable)
Maintenant je veux compter les lignes du 2eme dbgrid
Alors si je fais un recordcount il m'affiche le nombre de ligne de la table entière mais pas ceux affiché seulement dans le dbgrid
Que faire dans ce cas????
svp aidez moi!
merci d'avance
Afficher la suite 

7 réponses

Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
10
0
Merci
Bonjour,

Regarde l'exemple que j'ai crée dans un de mes sources.

si tu ajoutes dans le OnDataChange :

[code=pas]
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
if Sender nil then exit; {sender nil pas de changement d'enregistrement !}
if Field <> nil then exit; {Field = Nil pas de champ donc on sort]
if Self = nil then exit; {la forme n'est pas créée alors on sort}
Edit1.Text := ''; {on vide la zone de texte}

if (Query1SaleDate.Text <> '') and (Query1ShipDate.Text <> '') then {on transtype les dates en texte en DateTime}
if StrToDateTime(Query1SaleDate.Text) < {afin de pouvoir les comparer}
StrToDateTime(Query1ShipDate.Text) then
Edit1.Text := 'SaleDate Inférieure à Shipdate'; {on affiche un message dans Edit1 si le test est vrai}

// ajout
if not query2.active then exit;
ShowMessage('table2' + ' ' + IntToStr(Query2.RecordCount));
end;
/code

ces deux lignes, tu peux constater que le showmessage affiche
le nombre d'enregistrements filtrés de la table 2 et non le total
de toutes les données de cette table.

cantador
Commenter la réponse de cs_cantador
Messages postés
302
Date d'inscription
jeudi 29 septembre 2005
Statut
Membre
Dernière intervention
17 septembre 2013
1
0
Merci
Bonjour,

@cantador
if Self = nil then exit; {la forme n'est pas créée alors on sort}

comment cela peut-il être possible ?
Une méthode d'objet ne peut pas être appelée si l'instance de cet objet est nul, non ?
ou je n'ai rien compris ;-))
(enfin, cela ne bloque en rien le code).

Luc.
Commenter la réponse de beckerich
Messages postés
52
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
24 juillet 2013
0
Merci
Re,
@ cantador
Bon j'ai plus au moins compris ton code et ce que je peux en résumer c'est que pour connaitre le nombre de lignes d'un DBGrid qui affiche le contenu d'une table lié avec une autre il faut faire un count sur le résultat d'une requête.
c'est ça
Commenter la réponse de newgame
Messages postés
52
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
24 juillet 2013
0
Merci
Alors mon résonnement est juste?
Commenter la réponse de newgame
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
10
0
Merci
@newgame:
tu as noté comme moi
le query2.Recordcount donne le bon chiffre..

@beckerich
if Sender = nil then exit;

oui, je sais cette ligne fait couler beaucoup d'encre et pourtant
elle est nécessaire dans un cas bien particulier mais dont je ne me souviens pas !
mais elle ne gène pas..

cantador
Commenter la réponse de cs_cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
10
0
Merci
@newgame:
précision:

tu auras aussi noté que la relation entre les deux tables est active en permanence..

attention, aux généralisation dans ce domaine.

cantador
Commenter la réponse de cs_cantador
Messages postés
52
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
24 juillet 2013
0
Merci
Salut,
Bon j'ai essayé le query.recordcount et ça marche pas que faire alors??
ya t'il d'autre solution??
merci
Commenter la réponse de newgame