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

Signaler
Messages postés
24
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
20 juin 2019
-
erce78
Messages postés
24
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
20 juin 2019
-
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.

4 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
33
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 #   
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
64
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)
Messages postés
24
Date d'inscription
mardi 20 septembre 2005
Statut
Membre
Dernière intervention
20 juin 2019
1
Merci j'ai compris mon erreur et en même temps je comprend mieux les adapteurs

Un grand merci encore
Messages postés
46
Date d'inscription
dimanche 8 septembre 2002
Statut
Membre
Dernière intervention
13 janvier 2014

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