Affichage du résultat d'un select count [Résolu]

erce78 24 Messages postés mardi 20 septembre 2005Date d'inscription 26 septembre 2015 Dernière intervention - 9 févr. 2008 à 00:32 - Dernière réponse : erce78 24 Messages postés mardi 20 septembre 2005Date d'inscription 26 septembre 2015 Dernière intervention
- 9 févr. 2008 à 21:20
Bonsoir,

J'ai un problème pour afficher dans un label le nombre d'enregistrement retourné par une requete "select count"

If pAccueil.Visible =
True
Then

'Déclaration de la variable qui contiendra la requête OleDb liée à la connexion et de la variable contenant le nombre
Dim CommandeCount
As OleDbCommand = Connection.CreateCommand()

Dim nbre
As
Integer

'On affecte une chaine de caractère qui est la requête
CommandeCount.CommandText =
"SELECT COUNT(*) FROM lstrecettes"

'On créé l'adapteur (là j'ai pas absolument tout compris... mais ça marche

Dim MyDataAdapter
As
New OleDbDataAdapter(CommandeCount)

'On fait appel au dataAdapter puis on ouve la connexion
Connection.Open()

'On éxécute la commande
MyDataAdapter.SelectCommand = CommandeCount

'On met le nombre d'enregistrement retourné dans la variable nbre
nbre = MyDataAdapter.SelectCommand.ExecuteNonQuery()

'Et on ferme la connexion
Connection.Close()

'On met le nombre obtenu dans un label
lCount.Text =
"Il y a " & nbre &
" enregistrement(s) dans la base"

End
If
Avec ce que je fais, j'ai tout le temps 0 au lieu de 3. Si vous pouvez me guider sur la fin, ce serait sympa. Je pense que je ne stocke pas correctement mon résultat.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
cs_casy 7745 Messages postés mercredi 1 septembre 2004Date d'inscription 24 septembre 2014 Dernière intervention - 9 févr. 2008 à 09:52
2
Merci
Tu n'utilise pas la bonne instruction.

ExecuteNonQuery execute une requette sur la base et te renvoie normalement le nombre de ligne affectées. C'est pour les requettes qui ne renvoies pas de résultats comme les INSERT ou les UPDATE par exemple.

Toi tu utilise une requette qui revoie un résultat, tu pourrait donc faire un ExecuteReader pour récupérer l'ensemble des résultats renvoyés, mais il existe une autre methode justement plus adapté pour ta requette, il s'agit d'ExecuteScalar.

ExecuteScalar execute la requette et te renvoie la premiere valeur de la premiere colonne des résultats obtenus.

De plus juste pour un Select Count() tu n'as pas besoin d'un DataAdapter. Le DataAdapter sert à cahrger une série de données en vue de les modifier.

Donc pour toi, dans le cas présent, on peut simplifier ainsi :

        If pAccueil.Visible =  True Then

            'Déclaration de la variable qui contiendra la requête
OleDb liée à la connexion et de la variable contenant le
nombre
            Dim CommandeCount As OleDbCommand =
Connection.CreateCommand()
            Dim nbre As Integer

            'On
affecte une chaine de caractère qui est la requête
            CommandeCount.CommandText = "SELECT
COUNT(*) FROM lstrecettes"

            'On
fait appel au dataAdapter puis on ouve la connexion
            Connection.Open()

            'On met le nombre d'enregistrement retourné dans la
variable nbre
            nbre = CommandeCount.ExecuteScalar()

            'Et on ferme la connexion
            Connection.Close()

            'On met le nombre obtenu dans un
label
            lCount.Text = "Il y a " & nbre & " enregistrement(s) dans la base"

        End If

---- Sevyc64  (alias Casy) ---- <hr size ="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #   

Merci cs_casy 2

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de cs_casy
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 9 févr. 2008 à 01:37
0
Merci
Salut
Si tu veux récupérer un résultat d'une requète, il te faudra passer par un RecordSet.
Ne connaissant pas bien VB.Net, es-tu sûr que ExecuteNonQuery renvoie la valeur issue de la requète ?
A mon avis non, regarde la doc

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
erce78 24 Messages postés mardi 20 septembre 2005Date d'inscription 26 septembre 2015 Dernière intervention - 9 févr. 2008 à 21:20
0
Merci
Merci j'ai compris mon erreur et en même temps je comprend mieux les adapteurs

Un grand merci encore
Commenter la réponse de erce78
ricky84 46 Messages postés dimanche 8 septembre 2002Date d'inscription 13 janvier 2014 Dernière intervention - 9 févr. 2008 à 10:03
-2
Merci
Voila ce qu'il faut faire, un petit exemple

Dim

MCmd AsNew OleDb.OleDbCommand("SELECT COUNT(id) AS Nombre FROM Chanteurs", MConnection)
Dim DtRead As OleDb.OleDbDataReader
DtRead = MCmd.ExecuteReader
DtRead.Read()
Label1.text= DtRead(0)

Je met
SELECT COUNT(id)  car la requete n'a pas besoin de retourner tous les champs de la table, id etant l'un d'eux, ça suffit
MConnection et Chanteurs sont les noms de ma variable de connection et de ma table dans le fichier
Commenter la réponse de ricky84

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.