Affichage du résultat d'un select count

Résolu
erce78 Messages postés 24 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 20 juin 2019 - 9 févr. 2008 à 00:32
erce78 Messages postés 24 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 20 juin 2019 - 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.
A voir également:

4 réponses

cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
9 févr. 2008 à 09:52
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 #   
2
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
9 févr. 2008 à 01:37
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)
0
erce78 Messages postés 24 Date d'inscription mardi 20 septembre 2005 Statut Membre Dernière intervention 20 juin 2019 1
9 févr. 2008 à 21:20
Merci j'ai compris mon erreur et en même temps je comprend mieux les adapteurs

Un grand merci encore
0
ricky84 Messages postés 44 Date d'inscription dimanche 8 septembre 2002 Statut Membre Dernière intervention 13 janvier 2014
9 févr. 2008 à 10:03
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
-2
Rejoignez-nous