OVH Cloud OVH Cloud

Compteur nbr enregistrement

4 réponses
Avatar
Oblers
Bonjour,

J'utilise l'assistant de requetes pour créer mes codes SQL. Tout d'abord, je
filtre une table, en recherche des éléments de la première colonne ayant un
numéro défini (ici 13). En affichant SQL j'obtiens :

SELECT MATIERES.CompteurMat
FROM MATIERES INNER JOIN QUESTIONNAIRE ON MATIERES.CompteurMat =
QUESTIONNAIRE.CompteurMat
WHERE (((MATIERES.CompteurMat)=13));

Et ça fonctionne bien, j'ai la liste des 6 enregistrements ayant
CompteurMat=13....

Maintenant, j'aimerais COMPTER le nombre d'enregistrements qu'il me renvoi :
Dans l'assistant requête, je sélectionne par le clic droit 'TOTAUX' et
ensuite dans le type d'opération, je sélectionne 'COMPTE'. J'obtiens alors
le code suivant :

SELECT Count(MATIERES.CompteurMat) AS CompteDeCompteurMat
FROM MATIERES INNER JOIN QUESTIONNAIRE ON MATIERES.CompteurMat =
QUESTIONNAIRE.CompteurMat
HAVING (((Count(MATIERES.CompteurMat))=13));

Mais là, je n'ai aucun résulat.... il ne me donne pas le nombre
d'enregistrements (donc dans CompteDeCompteurMat) !
Pourquoi ?.....

Merci

4 réponses

Avatar
Sylvain Lafontaine
1- Au lieu de Count(MATIERES.CompteurMat), utilisez Count(*). La première
syntaxe est utilisée dans les cas où la valeur du champ peut avoir une
valeur nulle et que vous ne voulez pas que ces valeurs nulles soient
comptées mais je ne sais pas si Access va faire cette distinction.

2- Pourquoi avez-vous remplacé WHERE par HAVING?

3- Vous pouvez apprendre à utiliser les alias de noms de table (le mot-clef
« as » est facultatif); cela rend le tout plus facile à lire:

SELECT Count(*)
FROM MATIERES as M INNER JOIN QUESTIONNAIRE as Q ON M.CompteurMat =
Q.CompteurMat
WHERE (((M.CompteurMat)));

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


"Oblers" wrote in message
news:44a684d7$0$848$
Bonjour,

J'utilise l'assistant de requetes pour créer mes codes SQL. Tout d'abord,
je filtre une table, en recherche des éléments de la première colonne
ayant un numéro défini (ici 13). En affichant SQL j'obtiens :

SELECT MATIERES.CompteurMat
FROM MATIERES INNER JOIN QUESTIONNAIRE ON MATIERES.CompteurMat =
QUESTIONNAIRE.CompteurMat
WHERE (((MATIERES.CompteurMat)));

Et ça fonctionne bien, j'ai la liste des 6 enregistrements ayant
CompteurMat....

Maintenant, j'aimerais COMPTER le nombre d'enregistrements qu'il me renvoi
:
Dans l'assistant requête, je sélectionne par le clic droit 'TOTAUX' et
ensuite dans le type d'opération, je sélectionne 'COMPTE'. J'obtiens alors
le code suivant :

SELECT Count(MATIERES.CompteurMat) AS CompteDeCompteurMat
FROM MATIERES INNER JOIN QUESTIONNAIRE ON MATIERES.CompteurMat =
QUESTIONNAIRE.CompteurMat
HAVING (((Count(MATIERES.CompteurMat))));

Mais là, je n'ai aucun résulat.... il ne me donne pas le nombre
d'enregistrements (donc dans CompteDeCompteurMat) !
Pourquoi ?.....

Merci



Avatar
Oblers
Merci... ça fonctionne parfaitement maintenant, mais je ne comprend toujours
pas cette requête :-(

J'ai beaucoup de difficultés avec SQL (sik) et pour m'aider, j'utilisais le
code généré par Access lors de la création d'une requete à l'aide de
l'assistant... Ca ne semble par encore au point.

SELECT Count(*)
FROM MATIERES as M INNER JOIN QUESTIONNAIRE as Q ON M.CompteurMat =
Q.CompteurMat
WHERE (((M.CompteurMat)));


Après le Count(*), j'ai placé 'AS CompteDeCompteurMat' pour avoir le
résultat dans une variable.
Mais dans VBA, en utilisant DoCmd.RunSQL (" la requete ;"), il me dit que ce
n'est pas une instruction SQL ?!

DoCmd.RunSQL ("SELECT Count(*) AS CompteDeCompteurMat FROM MATIERES as
MATIERES INNER JOIN QUESTIONNAIRE as QUESTIONNAIRE ON MATIERES.CompteurMat =
QUESTIONNAIRE.CompteurMat WHERE (((MATIERES.CompteurMat)));")

Je vais avoir encore quelques difficultés.... Comment peut on envoyer alors
ce résultat (CompteDeCompteurMat) dans une zone de texte
(TexteQuestDispo)sur le même formulaire svp ?

Merci

Avatar
Sylvain Lafontaine
Je ne comprends pourquoi vous écrivez « QUESTIONNAIRE as QUESTIONNAIRE »;
les alias ne sont utiles que si vous changez de nom (généralement pour une
abréviation).

Pour DoCmd.RunSQL, cela sert uniquement à faire exécuter des commandes sur
le backend et les résultats ne peuvent pas être lu dans un formulaire local.

Dans votre cas, vous devez mettre la requête sql comme étant la source du
formulaire ou encore utiliser la fonction DCount ( .... ) ou utiliser les
objets DAO ou ADO pour interroger la base de données et mettre à jour le
contrôle texte. Pour ce faire, vous devriez consulter un bon livre sur la
programmation Access.

--
Sylvain Lafontaine, ing.
MVP - Technologies Virtual-PC
E-mail: http://cerbermail.com/?QugbLEWINF


"Oblers" wrote in message
news:44a69f3f$0$999$
Merci... ça fonctionne parfaitement maintenant, mais je ne comprend
toujours pas cette requête :-(

J'ai beaucoup de difficultés avec SQL (sik) et pour m'aider, j'utilisais
le code généré par Access lors de la création d'une requete à l'aide de
l'assistant... Ca ne semble par encore au point.

SELECT Count(*)
FROM MATIERES as M INNER JOIN QUESTIONNAIRE as Q ON M.CompteurMat =
Q.CompteurMat
WHERE (((M.CompteurMat)));


Après le Count(*), j'ai placé 'AS CompteDeCompteurMat' pour avoir le
résultat dans une variable.
Mais dans VBA, en utilisant DoCmd.RunSQL (" la requete ;"), il me dit que
ce n'est pas une instruction SQL ?!

DoCmd.RunSQL ("SELECT Count(*) AS CompteDeCompteurMat FROM MATIERES as
MATIERES INNER JOIN QUESTIONNAIRE as QUESTIONNAIRE ON MATIERES.CompteurMat
= QUESTIONNAIRE.CompteurMat WHERE (((MATIERES.CompteurMat)));")

Je vais avoir encore quelques difficultés.... Comment peut on envoyer
alors ce résultat (CompteDeCompteurMat) dans une zone de texte
(TexteQuestDispo)sur le même formulaire svp ?

Merci






Avatar
Oblers
Pour ce faire, vous devriez consulter un bon livre sur la programmation
Access


;-)
merci.... le plus simple encore sera que je laisse tomber... !
Je vais quand même me documenter sur ces fameuses fonctions DCount, DAO, ADO
itou... mais avant, je vais m'acheter de l'aspirine.

bye