Pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter, inscrivez-vous gratuitement !

 

  1. #1
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 328
    Points : 630
    Points
    630

    Par défaut Le nombre d'enregistrements d'une table filtrée

    Bonjour à tous

    Je veut connaître le nombre d'enregistrements d'une table filtrée, mais le code suivant donne un nombre constant
    égale au nombre d’enregistrement d'une table sans filtre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TMAINFORM.RadioGroup1Click(Sender: TObject);
    begin
       umdt.MDT.TABLE.Close;
      case  MAINFORM.RadioGroup1.ItemIndex of
       0: begin umdt.MDT.TABLE.Filter:='SRT_ELV=0'; RadioGroup1.Color:=$00F15645 end;
       1: begin umdt.MDT.TABLE.Filter:='SRT_ELV=1'; RadioGroup1.Color:=$005933F0 end;
       2: begin umdt.MDT.TABLE.Filter:='SRT_ELV<2'; RadioGroup1.Color:=$003EE1E6 end;
       end;
      umdt.MDT.TABLE.Open;
      umdt.MDT.TABLE.Filtered:=True;
     
      Label12.Caption:=IntToStr(umdt.MDT.TABLE.RecordCount);
    end;
    merci

  2. #2
    Membre expérimenté

    Homme Profil pro
    Retraité
    Inscrit en
    juin 2012
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : juin 2012
    Messages : 815
    Points : 1 506
    Points
    1 506

    Par défaut

    Il me semble que recordcount devrait être remplacé par exactrecordcount ( Ça marche au moins pour le le format DBF ).

    PS: C'est vraiment nécessaire de fermer et ré-ouvrir la table avant de la filtrer ?

  3. #3
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 328
    Points : 630
    Points
    630

    Par défaut

    Bonjour à tous

    @mm_71

    Citation Envoyé par mm_71 Voir le message
    Il me semble que recordcount devrait être remplacé par exactrecordcount ( Ça marche au moins pour le le format DBF ).
    J'ai vérifié tous les DataSets natifs de Laz 1.8 rc5 mais seulement le Dbf possède cette propriété (ExactRecordCount), moi j'utilise SqlQuery.

    Citation Envoyé par mm_71 Voir le message
    PS: C'est vraiment nécessaire de fermer et ré-ouvrir la table avant de la filtrer ?
    AMHA ce qui est nécessaire d'être entre Table.Close et Table.Open est uniquement la définition du filtre ici (TABLE.Filter:='SRT_ELV=N')
    mais le placement de l'activation du filtre ici (TABLE.Filtered:=True) n'a pas d'importance.


    merci

  4. #4
    Membre expérimenté

    Homme Profil pro
    Retraité
    Inscrit en
    juin 2012
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : juin 2012
    Messages : 815
    Points : 1 506
    Points
    1 506

    Par défaut

    Je connais moins bien SQL que DBF mais je n'ai jamais eu besoin d'utiliser filter, je me demande même si ça marche ? Si tu affiches le résultat dans une grille ou le mets dans un tstringlist après il est filtré ou pas ? Si oui tu pourrais compter les lignes reçues après l'opération mais c'est un peu vicelard.

    Pour tout ce que j'ai eu à faire en SQL j'ai toujours employé un truc du genre:

    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
    Sql_DoIt(Fmain.SQLQuery, 'Select * FROM '+TableSQL_Name+' where CODE="'+C_Code+'"'); 
    Et au retour de la fonction  Fmain.SQLQuery.RecordCount donne un résultat correct.
     
    Function Sql_DoIt ( Query:TZQuery; Instru:String ):Boolean;
    Begin
      Result:=False;
      with Query do
      begin
        Close;
        SQL.Text:=Instru;
        try
          Open;
          Result:=True;
        except
          ShowMessage ('Erreur '+Query.SQL.Text );
        end;
      end;
    end;

  5. #5
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 328
    Points : 630
    Points
    630

    Par défaut

    Bonjour

    1. En fait j'évite d'utiliser une table comme requête paramétrée, ce n'est pas très pratique.
    une table fonction mieux avec les filtres.

    si je cherche à trouver une solution je la ferai en une seule ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    begin umdt.MDT.TABLE.Last; a:=umdt.MDT.TABLE.RecNo; umdt.MDT.TABLE.First; b:=umdt.MDT.TABLE.RecNo end;
      Label12.Caption:=IntToStr(a-b+1);   //a,b:integer;
    mais ce n'est pas pratique non plus du moment qu'il existe une fonction destinée pour ça (recordCount),
    Donc la question est pour quelle raison cette fonction ne fonctionne pas correctement?

    merci

  6. #6
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    février 2014
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : février 2014
    Messages : 428
    Points : 1 876
    Points
    1 876

    Par défaut

    Bonjour.

    Cela fait longtemps que je ne fais plus de programmation bases de données, mais pour autant que je me souvienne:
    j'ai toujours préféré l'événement OnFilterRecord à la propriété Filter. L'événement est appelé dès table.filtered = true.
    En plaçant, dans cet événement, une variable "compteur" qui s'incrémente quand Accept = true, cela devrait te donner le nombre d'enregistrements filtrés.

    Cordialement
    Thierry

  7. #7
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 328
    Points : 630
    Points
    630

    Par défaut

    Bonsoir Thierry

    en fait j'ai fais une bonne série d'exemples avec OnFilterRecord() et je suis parvenu à une conclusion:

    Recordcount fonctionne indépendamment d'un filtre.
    C'est comme si ils fonctionnent à deux niveaux différents.

    merci Thierry.

  8. #8
    Membre habitué
    Homme Profil pro
    Retraité
    Inscrit en
    juillet 2008
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : juillet 2008
    Messages : 332
    Points : 189
    Points
    189

    Par défaut

    Bonjour,
    J'utilise des bases de données avec sqlite et les composants natifs et pour rechercher certaines données j'utilise un filtre pour ouvrir la table puis j'affiche le nombre d'enregistrements comme ci-dessous et ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MFILTRE:='NON';
      FermeGrid;
      PTitre.Caption:=MTITRE+ ' DE BANK NON VERIFIEES';
      PTitre.Update;
      data.bank.close;
      data.bank.SQL:='select * from BANK WHERE VERIFIE='+quotedstr(MFILTRE); // ok
      data.bank.open;
      TotalNonpointer;
      Navigateur.DataSource:=data.SourceBank;
      GridBank.Visible:=True;
      Edit1.Text:=IntToStr(data.bank.RecordCount);
    A+

  9. #9
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 328
    Points : 630
    Points
    630

    Par défaut

    Bonjour à tous,

    @ Ovni76

    Oui effectivement le recordcount d'une table est exacte en exécutant SQL,
    c'est ce que d'ailleur à proposé mm_71.

    J'évitais d'appliquer SQL à une table,
    mais il s'avère que c'est inévitable, à moins que on utilise la 2 ème méthode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     Table.DisableControls;
     Table.Last; a:=Table.RecNo; Table.First; b:=Table.RecNo ;
     Table.EnableControls;
     
     Label1.Caption:=IntToStr(a-b+1);   //a,b:integer
    je mets cette discussion comme résolue.

    merci à vous tous

  10. #10
    Membre expérimenté

    Homme Profil pro
    Retraité
    Inscrit en
    juin 2012
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité
    Secteur : Biens de consommation

    Informations forums :
    Inscription : juin 2012
    Messages : 815
    Points : 1 506
    Points
    1 506

    Par défaut

    Un ultime truc qui vaut ce qu'il vaut: Mettre les enregistrements filtrés dans un dbgrid avec visible à false et récupérer le nombre de lignes de cette grille.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 14/08/2006, 13h28
  2. Problème avec nombre d'enregistrements dans une table
    Par zana74 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/08/2006, 13h21
  3. [DB] Nombre d'enregistrements d'une table
    Par Mister Nono dans le forum Bases de données
    Réponses: 26
    Dernier message: 09/05/2006, 09h51
  4. [SQL] nombre d enregistrement d une table
    Par sharpeye dans le forum Access
    Réponses: 1
    Dernier message: 03/11/2005, 18h46
  5. Nombre d'enregistrement dans une table MySQL
    Par tom06440 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/10/2005, 19h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo