erce78
Messages postés24Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention20 juin 2019
-
9 févr. 2008 à 00:32
erce78
Messages postés24Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention20 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.
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 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 #
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201578 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)
ricky84
Messages postés44Date d'inscriptiondimanche 8 septembre 2002StatutMembreDernière intervention13 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