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

PHP & Base de données Discussion :

compter enregistrement - php/Access [ODBC]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 53
    Par défaut compter enregistrement - php/Access
    Bonjour,


    Je cherche à compter le nombre d'enregistrements dans une requête. j'écris ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sqlcount = "SELECT count (*) FROM Tabcarto WHERE (((Tabcarto.DATEREAL)>#12/31/2005#) 
    AND ((Tabcarto.ETAT)='document de travail'))";
    $count = odbc_exec($cnx_verif, $sqlcount);
    if (!$sqlcount)         Error_handler( $text_error_structure , $cnx );
    echo $count;
    la page me renvoie :
    Resource id #4
    au lieu de me donner le nombre d'enregistrements dans ma requête.
    je précise que ma requête pointe une table dans Access

    Quelqu'un pourrait-il m'éclairer ?
    merci

  2. #2
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    Salut,

    comme la doc l'indique, odbc_exec() retourne une ressource.
    D'où le fait que lorsque tu essayes d'afficher le retour, ca t'indique Resource id #X.
    Je tenterais l'utilisation de, par exemple, odbc_fetch_row() pour obtenir un résultat à partir de cette ressource.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    salut ! tu peut aussi utiliser mysql_num_rows mais je ne sais pas si il y a l'équivalent pour access et si sa fonctionne aussi...

    mais genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <? 
    $sql = "SELECT * FROM taTable Where tonchamp = qqch";
    mysql_num_rows($sql);
    ?>
    essaie sa... peut etre que sa marche quand meme sous access ... a tester...

    sinon oriente toi vers odbc_fetch_row()

    bonne chance

  4. #4
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    essaie sa... peut etre que sa marche quand meme sous access ... a tester.
    mysql_num_rows ne fonctionnera pas trop, non...

  5. #5
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut Fonction COUNT
    utilise la fonction count dans ta requête. SELECT COUNT(mon_champs) AS nb, * FROM maTable

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    odbc_num_rows sinon tout simplement

  7. #7
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2006
    Messages
    430
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2006
    Messages : 430
    Par défaut
    J'aime bien comme certains topics partent en live dans les réponses qui n'ont rien à voir avec la question d'origine, et qui surtout vont un peu embrouiller le posteur de départ

    utilise la fonction count dans ta requête. SELECT COUNT(mon_champs) AS nb, * FROM maTable
    Il fait déjà un count dans sa requête, cfr message initial

    odbc_num_rows sinon tout simplement
    Ca ne va pas l'aider bcp, s'il fait un count, il aura comme résultat "1", peu importe le nombre de résultats...

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    il fait déjà un count dans sa requête, cfr message initial

    Citation:
    odbc_num_rows sinon tout simplement

    Ca ne va pas l'aider bcp, s'il fait un count, il aura comme résultat "1", peu importe le nombre de résultats...
    je n'avais pas vu qu'il faisiat un count j'avais rajouter le odbc_num_rows car certain partait sur mysql_num_rows c equi était completement faux donc je me corrige.

    Tu as 2 solutions soit tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sqlcount = "SELECT count (*) as num FROM Tabcarto WHERE (((Tabcarto.DATEREAL)>#12/31/2005#) 
    AND ((Tabcarto.ETAT)='document de travail'))"; //je te déconseille * ca sert a rien met plutot juste le champt de ta clé primaire;) 
    $count = odbc_fetch_array($sqlcount);
    echo 'le nombre de ligne est :'.$count['num'];
    sinon tu fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sqlcount = "SELECT nom_de_ta_clé primaire FROM Tabcarto WHERE (((Tabcarto.DATEREAL)>#12/31/2005#) 
    AND ((Tabcarto.ETAT)='document de travail'))"; 
    $count =  odbc_num_row ($sqlcount) ;
    echo 'le nombre de ligne est :'.$count;
    voila encore dsl j'espere avoir était plus clair

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 53
    Par défaut
    Mon problème doit venir d'ailleurs .... avec toutes les propositions ci-dessus la page me renvoie :
    Warning: odbc_num_rows()[ou avec odbc_fetch_array()]: supplied argument is not a valid ODBC result resource in XXXXXXXXXXXXXXXXXXXX
    Cela pourrait-il venir du pilote odbc ?


    merci de vos éclairages

  10. #10
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Et avec le COUNT ça marche plus??? (parce que c'est plus logique en plus...). Il faut donner un alias en faisant SELECT COUNT(id) AS nb FROM..., ensuite tu prends le résultat avec $res = odbc_fetch_array($req) ou un truc dans le genre et tu récupères le compteur avec $res['nb'].

  11. #11
    Membre Expert
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 349
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 349
    Par défaut
    montre ta requete et essaye ca pour afficher tes erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     if (odbc_error())
             {
                   echo odbc_errormsg();
             }

  12. #12
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par défaut
    Cette fonction ne fonctionne que si c'est pas une requete select pour plus d'info il faut voir la doc

    Note: odbc_num_rows() après un SELECT retournera -1 avec de nombreux pilotes.
    La proposition de JWhite est la plus approprié

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 53
    Par défaut
    Le count m'intéresse bcp mais le "odbc_fetch_array" me fait :
    Warning: odbc_fetch_array(): supplied argument is not a valid ODBC result resource in f:\production\dmdtrav\page\carto_verif.php on line 20
    Total =
    avec ce code :
    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
    <?php
    $bd="cartoverif";                      // identifiant dsn pour MS ACCESS
    $nom_table="carto";                       // nom de la table
    $user="root";                        // login
    $password="";                        // password
    $text_error_connection="Impossible d'ouvrir ana06 dans odbc_connect";
    $text_error_structure= "Erreur dans la table tabproj ";
     
    $cnx_verif = odbc_pconnect("cartoverif", "root", "");
    if (!$cnx_verif)   Error_handler( $text_error_connection  , $cnx );
     
    $sqlverif = "SELECT Tabcarto.PROJET, Tabcarto.CODE, Tabcarto.TITRE, Tabcarto.DATEREAL, Tabcarto.ETAT, Tabcarto.CHEMIMG FROM Tabcarto
    WHERE (((Tabcarto.DATEREAL)>#12/31/2005#) AND ((Tabcarto.ETAT)='document de travail'))
    ORDER BY Tabcarto.PROJET, Tabcarto.DATEREAL;";
    $enrg = odbc_do($cnx_verif, $sqlverif);
     
    $sqlcount = "SELECT count (code) as num FROM Tabcarto
    WHERE (((Tabcarto.DATEREAL)>#12/31/2005#) AND ((Tabcarto.ETAT)='document de travail'))
    ORDER BY Tabcarto.PROJET, Tabcarto.DATEREAL;";
    $count = odbc_fetch_array($sqlcount);
    echo 'Total ='.$count['num'];
     
     if (odbc_error())
             {
                   echo odbc_errormsg();
             }
     
    ?>
    mon problème concerne la seconde partie du code ($sqlcount)
    ou dois je mettre la gestion d'erreur ? (odbc_error())

  14. #14
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    Tu exécutes jamais ta requête. (exécution de la requête puis récupération des résultats avec array), il faut faire l'équivalent de mysql_query (odbc_exec peut-être).

    Et justement tu pourras voir les erreurs en faisant odbc_exec(...) or die(odbc_error());

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 53
    Par défaut
    A oui j'ai bien fait l'boeuf là !

    allé j'la redonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sqlcount = "SELECT count (code) as num FROM Tabcarto
    WHERE (((Tabcarto.DATEREAL)>#12/31/2005#) AND ((Tabcarto.ETAT)='document de travail'))";
    $count= odbc_do($cnx_verif, $sqlcount) or die (odbc_error());
    $count = odbc_fetch_array($count);
    echo 'Total ='.$count['num'];

    Merci beaucoup pour la dépatouille

    Heu ... il est ou le tag résolu ?

  16. #16
    Membre Expert Avatar de Amara
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 688
    Détails du profil
    Informations personnelles :
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 688
    Par défaut
    A oui j'ai bien fait l'boeuf là !
    je connaissais pas



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

Discussions similaires

  1. Enregistrer table Access triée avec ADO
    Par fikou dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/05/2006, 18h05
  2. Réponses: 4
    Dernier message: 28/04/2006, 23h21
  3. [PHP/ACCESS] Protéger la base de données
    Par Trunks dans le forum Access
    Réponses: 4
    Dernier message: 14/02/2006, 20h51
  4. [VB]Utilisé une requête enregistrée dans ACCESS
    Par anikeh dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/01/2006, 17h54
  5. verrouiller un enregistrement - VBA/Access
    Par sebouratif dans le forum Access
    Réponses: 2
    Dernier message: 07/10/2005, 13h03

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