Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & ODBC
PHP & ODBC Forum d'entraide sur ODBC avec PHP. Avant de poster -> FAQ ODBC
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/06/2006, 11h20   #1
Candidat au titre de Membre du Club
 
Inscription : juin 2003
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 50
Points : 14
Points : 14
Envoyer un message via MSN à Félix62
Par défaut compter enregistrement - php/Access

Bonjour,


Je cherche à compter le nombre d'enregistrements dans une requête. j'écris ça :
Code :
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 :
Citation:
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
Félix62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2006, 21h46   #2
Membre expérimenté
 
Développeur Web
Inscription : 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
Points : 538
Points : 538
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.
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 00h07   #3
Membre éprouvé
 
Homme Cyrill Gremaud
Ingénieur systèmes et réseaux
Inscription : août 2005
Messages : 1 002
Détails du profil
Informations personnelles :
Nom : Homme Cyrill Gremaud
Âge : 23
Localisation : Suisse

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : août 2005
Messages : 1 002
Points : 429
Points : 429
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 :
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
__________________
Il y a 10 types de personnes sur la planète. Ceux qui comprennent le binaire et ceux qui ne le comprennent pas...
cyrill.gremaud est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 08h21   #4
Membre expérimenté
 
Développeur Web
Inscription : 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
Points : 538
Points : 538
Citation:
essaie sa... peut etre que sa marche quand meme sous access ... a tester.
mysql_num_rows ne fonctionnera pas trop, non...
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 08h55   #5
Expert Confirmé
 
Avatar de berceker united
 
Développeur informatique
Inscription : février 2005
Messages : 2 982
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2005
Messages : 2 982
Points : 3 567
Points : 3 567
Par défaut Fonction COUNT

utilise la fonction count dans ta requête. SELECT COUNT(mon_champs) AS nb, * FROM maTable
berceker united est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 09h00   #6
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
odbc_num_rows sinon tout simplement
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 10h46   #7
Membre expérimenté
 
Développeur Web
Inscription : 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
Points : 538
Points : 538
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

Citation:
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

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...
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 11h21   #8
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
Citation:
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 :
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 :
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
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 12h10   #9
Candidat au titre de Membre du Club
 
Inscription : juin 2003
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 50
Points : 14
Points : 14
Envoyer un message via MSN à Félix62
Mon problème doit venir d'ailleurs .... avec toutes les propositions ci-dessus la page me renvoie :
Citation:
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
Félix62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 12h12   #10
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
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'].
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 12h17   #11
Membre Expert
 
Inscription : avril 2006
Messages : 1 338
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2006
Messages : 1 338
Points : 1 315
Points : 1 315
montre ta requete et essaye ca pour afficher tes erreurs:
Code :
1
2
3
4
5
 
 if (odbc_error())
         {
               echo odbc_errormsg();
         }
__________________
Stay in Bed .. Save Energy
boo64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 12h18   #12
Inactif
 
Avatar de Kerod
 
Inscription : septembre 2004
Messages : 11 753
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 11 753
Points : 14 585
Points : 14 585
Cette fonction ne fonctionne que si c'est pas une requete select pour plus d'info il faut voir la doc

Citation:
Note: odbc_num_rows() après un SELECT retournera -1 avec de nombreux pilotes.
La proposition de JWhite est la plus approprié
Kerod est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 15h49   #13
Candidat au titre de Membre du Club
 
Inscription : juin 2003
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 50
Points : 14
Points : 14
Envoyer un message via MSN à Félix62
Le count m'intéresse bcp mais le "odbc_fetch_array" me fait :
Citation:
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 :
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())
Félix62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 16h05   #14
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
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());
Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 16h22   #15
Candidat au titre de Membre du Club
 
Inscription : juin 2003
Messages : 50
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 50
Points : 14
Points : 14
Envoyer un message via MSN à Félix62
A oui j'ai bien fait l'boeuf là !

allé j'la redonne

Code :
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 ?
Félix62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 16h57   #16
Expert Confirmé

 
Avatar de Amara
 
Inscription : juillet 2004
Messages : 2 684
Détails du profil
Informations personnelles :
Localisation : France, Sarthe (Pays de la Loire)

Informations forums :
Inscription : juillet 2004
Messages : 2 684
Points : 2 910
Points : 2 910
Citation:
A oui j'ai bien fait l'boeuf là !
je connaissais pas


Amara est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h06.


 
 
 
 
Partenaires

Hébergement Web