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

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

    Informations forums :
    Inscription : août 2014
    Messages : 302
    Points : 625
    Points
    625

    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 averti
    Inscrit en
    juin 2012
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : juin 2012
    Messages : 267
    Points : 426
    Points
    426

    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
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

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

    Informations forums :
    Inscription : août 2014
    Messages : 302
    Points : 625
    Points
    625

    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 averti
    Inscrit en
    juin 2012
    Messages
    267
    Détails du profil
    Informations forums :
    Inscription : juin 2012
    Messages : 267
    Points : 426
    Points
    426

    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
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

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

    Informations forums :
    Inscription : août 2014
    Messages : 302
    Points : 625
    Points
    625

    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
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : février 2014
    Messages : 425
    Points : 1 856
    Points
    1 856

    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
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Algérie

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

    Informations forums :
    Inscription : août 2014
    Messages : 302
    Points : 625
    Points
    625

    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.

Discussions similaires

  1. Réponses: 8
    Dernier message: 14/08/2006, 14h28
  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, 14h21
  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, 10h51
  4. [SQL] nombre d enregistrement d une table
    Par sharpeye dans le forum Access
    Réponses: 1
    Dernier message: 03/11/2005, 19h46
  5. Nombre d'enregistrement dans une table MySQL
    Par tom06440 dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 21/10/2005, 20h07

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