IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

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

Bases de données Delphi Discussion :

comptage dans un requete


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 839
    Points : 262
    Points
    262
    Par défaut comptage dans un requete
    salut

    pour compter le nombre d'enregistrement de ma requete: quelle est la syntaxe pour inserer une commande count dans la requete ?

    (si je rajoute count(cli_id) dans la requete select ca ne fonctionne pas ? J'ai comme l'impression que cette commande doit etre exécuté à part . Mais alors où est l'interêt ?
    sinon il me reste l'option du fetchall que je voulais eviter ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IBQuery1.SQL.Add('select client.cli_id,client.NOM, client.ville ,pays.nom, type_fiche.lib from client');
    IBQuery1.SQL.Add('join pays');
    IBQuery1.SQL.Add('on pays.pays_id=client.pays_id');
    IBQuery1.SQL.Add('join type_fiche');
    IBQuery1.SQL.Add('on type_fiche.type_fiche_id=client.type_fiche_id');
    A+

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Est ce que tu peux insérer la requête qui ne marche pas, pour qu'on puisse voir ce qui pose probleme

  3. #3
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut
    Citation Envoyé par looping Voir le message
    sinon il me reste l'option du fetchall que je voulais eviter ?
    Tu auras malheureusement besoin d'un FetchAll (ou Last) pour que RecordCount renvoie une valeur correcte.

    Mais si tu veux éviter ce FetchAll cette simple requête, en parallèle de celle de ton post, devrait suffire:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(*) FROM client

    @+ Claudius.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 839
    Points : 262
    Points
    262
    Par défaut
    salut

    voila le début de ma requete initiale:
    je veux le comptage de la requete , pas de la table totale.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    IBQuery1.SQL.Add('select client.cli_id,client.NOM, client.ville ,pays.nom, type_fiche.lib, count(cli_id) as compteur from client');

    mais ca me mets une erreur

    A+

  5. #5
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par looping Voir le message
    mais ca me mets une erreur
    Effectivement il manque un GROUP BY dans cette requête.

    Mais de toute façon, tu ne pourras pas lister et compter tes enregistrements sur la même requête.

    Citation Envoyé par looping Voir le message
    je veux le comptage de la requete , pas de la table totale.
    En reprenant la requête de ton 1° post, si comme je l'imagine les champs pays_id et type_fiche_id sont définis à NOT NULL et des FK sur les tables pays et type_fiche, le nombre d'enregistrements de cette requête est égale au nombre d'enregistrements de la table client.
    Non ?

    @+ Claudius

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Une requête imbriquée fonctionnerait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IBQuery1.SQL.Add('select client.cli_id,client.NOM, client.ville ,pays.nom, type_fiche.lib, (select count(*) from client) as compteur from client');
    Bon... dans le cas ci-dessus, l'utilité est toute relative puisque chaque ligne affichera le même nombre , mais c'est le principe.

  7. #7
    Membre chevronné Avatar de chaplin
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 215
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 215
    Points : 1 819
    Points
    1 819
    Par défaut
    D'instinct, j'utiliserais une procédure stockée.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Il vaut mieux le faire en deux fois, une première requête avec un select count(*) sur la table Clients puis la requête proprement dite sur la table client ensuite.

    Si tu tiens absolument a ne faire qu'une seule requête tu as la solution proposée par Andnotor qui fonctionne mais qui est très lente (le select count(*) est relancé pour chaque enregistrement ^^). Si tu est sous Firebird 2.0 ou 2.1 il vaut mieux utiliser une sous-vue :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select client.cli_id,client.NOM, client.ville ,pays.nom, type_fiche.lib, a.Total
    from client , (select count(*) as Total from client) a;

  9. #9
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    La pluspart du temps ta requète 'SELECT' est liée à quelque chose : un Query, un DBGrid... Ces composants ont une propriété COUNT que tu peux utiliser pour ton comptage.
    De plus le composant avec lequel tu 'exécutes' ton SELECT a peut être aussi un paramètre de retour qui permet de compter les enreg. trouvés.

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

Discussions similaires

  1. Double comptage dans une requete
    Par jubourbon dans le forum Langage SQL
    Réponses: 7
    Dernier message: 31/12/2008, 09h16
  2. Quote dans une requete...
    Par Isildur dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/06/2006, 10h57
  3. Syntaxe pour avoir un seul resultat dans une requete
    Par Pompil dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/09/2003, 15h51
  4. Probleme dans ma requete
    Par Kuroro dans le forum Requêtes
    Réponses: 2
    Dernier message: 11/07/2003, 11h14
  5. [syntaxe] Gerer les variables dans une requete
    Par rastapopulos dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 15/04/2003, 12h53

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