Utilisation fonction DCount
Résolu
J_AGRI
Messages postés
42
Date d'inscription
Statut
Membre
Dernière intervention
-
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
yg_be Messages postés 23541 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je dispose d'une requête (RGRPAH_NUM) basée sur une autre requête (RGRAPH).
La requête RGRAPH_NUM est composé comme suit : Semaine (affichant les semaines) et CULTURE_NUM (affichant le numéroauto d'une table CULTURE)
J'aimerai insérer une troisième colonne N, affichant un numéroAuto qui redémarre à 1 dès que le CULTURE_NUM change.
Voici le code SQL que j'ai réalisé,
SELECT RGRAPH.Semaine, RGRAPH.CULTURE_NUM, DCount("*","RGRAPH","RGRAPH.Semaine=""" & [RGRAPH.Semaine] & """ and RGRAPH.CULTURE_NUM<=" & [RGRAPH.CULTURE_NUM]) AS N
FROM RGRAPH;
et voici le résultat obtenu

Voici le résultat voulu :

Comme vous le constatez, ma fonction DCOUNT est à revoir...
Quelqu'un aurait-il l'amabilité de pouvoir m'aider ?
Je vous souhaite une bonne journée,
Cordialement,
Je dispose d'une requête (RGRPAH_NUM) basée sur une autre requête (RGRAPH).
La requête RGRAPH_NUM est composé comme suit : Semaine (affichant les semaines) et CULTURE_NUM (affichant le numéroauto d'une table CULTURE)
J'aimerai insérer une troisième colonne N, affichant un numéroAuto qui redémarre à 1 dès que le CULTURE_NUM change.
Voici le code SQL que j'ai réalisé,
SELECT RGRAPH.Semaine, RGRAPH.CULTURE_NUM, DCount("*","RGRAPH","RGRAPH.Semaine=""" & [RGRAPH.Semaine] & """ and RGRAPH.CULTURE_NUM<=" & [RGRAPH.CULTURE_NUM]) AS N
FROM RGRAPH;
et voici le résultat obtenu

Voici le résultat voulu :

Comme vous le constatez, ma fonction DCOUNT est à revoir...
Quelqu'un aurait-il l'amabilité de pouvoir m'aider ?
Je vous souhaite une bonne journée,
Cordialement,
A voir également:
- Dcount access exemple
- Tableau word exemple - Guide
- Url exemple - Guide
- Exemple de code ascii - Guide
- Gmail exemple - Guide
- Tableau croisé dynamique excel exemple - Guide
7 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
il me semble que, dans le critère du DCOUNT, tu dois employer une inégalité à la place de l'égalité, et vice-versa.
il me semble que, dans le critère du DCOUNT, tu dois employer une inégalité à la place de l'égalité, et vice-versa.
Bonjour,
Je vous remercie,
Je n'y avait pas pensé;
Cependant les résultats ne s'affichent toujours pas de la façon souhaitée...
Le numéro 1 change en un autre chiffre maintenu quand le numéro de culture est le même.
J'ignore quel est le problème
Voici un exemple de résultats :

Auriez-vous une autre solution ou conseils ?
Je vous remercie,
Je n'y avait pas pensé;
Cependant les résultats ne s'affichent toujours pas de la façon souhaitée...
Le numéro 1 change en un autre chiffre maintenu quand le numéro de culture est le même.
J'ignore quel est le problème
Voici un exemple de résultats :

Auriez-vous une autre solution ou conseils ?
Bonjour,
Je vous remercie;
Voici la requête en mode SQL :
SELECT RGRAPH.Semaine, RGRAPH.CULTURE_NUM, DCount("*","RGRAPH","RGRAPH.Semaine<>""" & [RGRAPH.Semaine] & """ and RGRAPH.CULTURE_NUM<>" & [RGRAPH.CULTURE_NUM]) AS N
FROM RGRAPH
j'ai essayé toute les combinaisons avec (>/<>/<= et >=)
La requête RGRAPH est basée sur deux tables CULTURE et PRODUCTION;
La table CULTURE est composée des champs CROP (espèce cultivée), VARIETY (la variété)
Une culture se définie par CULTURE_NUM, le numéroAuto de la table. La table PRODUCTION renvoie à la production d'une culture. Il y a ainsi plusieurs lignes de productions par numéro de culture.
La table PRODUCTION contient des dates de ventes [DATES] et le nombre de kg vendus KGS_SOLD
Voici le mode SQL de la requête RGRAPH :
SELECT CULTURE.CROP, CULTURE.VARIETY, CULTURE.CULTURE_NUM, AnSem([DATES]) AS Semaine, Sum(PRODUCTION.KGS_SOLD) AS SommeDeKGS_SOLD
FROM CULTURE INNER JOIN PRODUCTION ON CULTURE.CULTURE_NUM = PRODUCTION.CULTURE_NUM
GROUP BY CULTURE.CROP, CULTURE.VARIETY, CULTURE.CULTURE_NUM, AnSem([DATES])
HAVING (((CULTURE.CROP)=[Formulaires]![GRAPH]![LISTE]) AND ((CULTURE.VARIETY)=[Formulaires]![GRAPH]![ListeVariety]))
ORDER BY CULTURE.CULTURE_NUM, AnSem([DATES]);
AnSemaine est une fonction permettant de convertir les dates en numéro de semaines,
le formulaire GRAPH contient deux listes de choix (CROP et VARIETY) permettant de mettre en place la requête RGRAPH,

Dites moi si vous voulez que je précise d'autres points,
En vous remerciant,
Je vous remercie;
Voici la requête en mode SQL :
SELECT RGRAPH.Semaine, RGRAPH.CULTURE_NUM, DCount("*","RGRAPH","RGRAPH.Semaine<>""" & [RGRAPH.Semaine] & """ and RGRAPH.CULTURE_NUM<>" & [RGRAPH.CULTURE_NUM]) AS N
FROM RGRAPH
j'ai essayé toute les combinaisons avec (>/<>/<= et >=)
La requête RGRAPH est basée sur deux tables CULTURE et PRODUCTION;
La table CULTURE est composée des champs CROP (espèce cultivée), VARIETY (la variété)
Une culture se définie par CULTURE_NUM, le numéroAuto de la table. La table PRODUCTION renvoie à la production d'une culture. Il y a ainsi plusieurs lignes de productions par numéro de culture.
La table PRODUCTION contient des dates de ventes [DATES] et le nombre de kg vendus KGS_SOLD
Voici le mode SQL de la requête RGRAPH :
SELECT CULTURE.CROP, CULTURE.VARIETY, CULTURE.CULTURE_NUM, AnSem([DATES]) AS Semaine, Sum(PRODUCTION.KGS_SOLD) AS SommeDeKGS_SOLD
FROM CULTURE INNER JOIN PRODUCTION ON CULTURE.CULTURE_NUM = PRODUCTION.CULTURE_NUM
GROUP BY CULTURE.CROP, CULTURE.VARIETY, CULTURE.CULTURE_NUM, AnSem([DATES])
HAVING (((CULTURE.CROP)=[Formulaires]![GRAPH]![LISTE]) AND ((CULTURE.VARIETY)=[Formulaires]![GRAPH]![ListeVariety]))
ORDER BY CULTURE.CULTURE_NUM, AnSem([DATES]);
AnSemaine est une fonction permettant de convertir les dates en numéro de semaines,
le formulaire GRAPH contient deux listes de choix (CROP et VARIETY) permettant de mettre en place la requête RGRAPH,

Dites moi si vous voulez que je précise d'autres points,
En vous remerciant,
le but du DCOUNT n'est-il pas d'obtenir, pour chaque enregistrement de RGRAPH, le nombre d'enregistrements de la même culture, dont la date est antérieure où égale à cet enregistrement?
peux-tu préciser, quand tu montres des résultats, s'il s'agit du résultat complet, ou seulement d'une partie du résultat?
peux-tu préciser, quand tu montres des résultats, s'il s'agit du résultat complet, ou seulement d'une partie du résultat?
J'obtiens bien le résultat souhaité avec cet écrit :
DCount("*","RGRAPH","CULTURE_NUM=" & [CULTURE_NUM] & " and Semaine<=""" & [Semaine] & """") AS Expr2
.
J'ai également rajouté le champs CROP.
J'aimerais faire une autre requête permettant d'associer les champs CROP et NUMERO de la précédente requête, avec une table FORECAST composé comme suit :
Simplement je n'arrive pas à lancer la requête; un message d'erreur s'affiche,

Voici le code SQL
SELECT RGRAPHnum.CROP, RGRAPHnum.CULTURE_NUM, RGRAPHnum.NUMERO
FROM FORECAST INNER JOIN RGRAPHnum ON (FORECAST.SemNum = RGRAPHnum.NUMERO) AND (FORECAST.CROP_NUM = RGRAPHnum.CROP)
GROUP BY RGRAPHnum.CROP, RGRAPHnum.CULTURE_NUM, RGRAPHnum.NUMERO;
J'ai essayé également en RIGHT et LEFT JOIN,
La relation entre NUMERO et SeNum pose problème
Je ne comprends pas pourquoi cela ne fonctionne pas.
Pourriez-vous m'éclairez ?
Cordialement,
DCount("*","RGRAPH","CULTURE_NUM=" & [CULTURE_NUM] & " and Semaine<=""" & [Semaine] & """") AS Expr2

J'ai également rajouté le champs CROP.
J'aimerais faire une autre requête permettant d'associer les champs CROP et NUMERO de la précédente requête, avec une table FORECAST composé comme suit :

Simplement je n'arrive pas à lancer la requête; un message d'erreur s'affiche,

Voici le code SQL
SELECT RGRAPHnum.CROP, RGRAPHnum.CULTURE_NUM, RGRAPHnum.NUMERO
FROM FORECAST INNER JOIN RGRAPHnum ON (FORECAST.SemNum = RGRAPHnum.NUMERO) AND (FORECAST.CROP_NUM = RGRAPHnum.CROP)
GROUP BY RGRAPHnum.CROP, RGRAPHnum.CULTURE_NUM, RGRAPHnum.NUMERO;
J'ai essayé également en RIGHT et LEFT JOIN,
La relation entre NUMERO et SeNum pose problème
Je ne comprends pas pourquoi cela ne fonctionne pas.
Pourriez-vous m'éclairez ?
Cordialement,
Je suppose que c'est soit
Tu peux facilement le déterminer en testant.
Je suspecte que c'est CROP qui crée le problème, ne serait-il pas défini comme un champ dont la valeur est à choisir dans une liste?
(FORECAST.SemNum = RGRAPHnum.NUMERO), soit
(FORECAST.CROP_NUM = RGRAPHnum.CROP)qui pose problème.
Tu peux facilement le déterminer en testant.
Je suspecte que c'est CROP qui crée le problème, ne serait-il pas défini comme un champ dont la valeur est à choisir dans une liste?
En testant, j'observe que si je ne fais que la liaison (FORECAST.CROP_NUM = RGRAPHnum.CROP), la requête s'affiche,
Mais lorsque je ne fais que la liaison (FORECAST.SemNum = RGRAPHnum.NUMERO), il est écrit "incohérence de type dans une expression;
Concernant la table Forecast, oui, CROP est défini dans un champs dont la valeur est à choisir dans une liste.
Mais je ne pense pas que CROP pose problème ici car il m'est possible de faire la relation.
Mais lorsque je ne fais que la liaison (FORECAST.SemNum = RGRAPHnum.NUMERO), il est écrit "incohérence de type dans une expression;
Concernant la table Forecast, oui, CROP est défini dans un champs dont la valeur est à choisir dans une liste.
Mais je ne pense pas que CROP pose problème ici car il m'est possible de faire la relation.
Je pense que au lieu de passer par DCount("*","RGRAPH","CULTURE_NUM=" & [CULTURE_NUM] & " and Semaine<=""" & [Semaine] & """") AS N,
Il faut que je passe par une fonction dans un module pour créer la relation.
Mais je n'arrive pas à transformer ce code SQL en fonction.
J'ai essayé de cette façon mais ça ne fonctionne pas :
Public Function Num(N1 As String, N2 As String) As Integer
Num = DCount("*", "RGRAPH", "CULTURE_NUM='" & N1 & " and Semaine<='""" & N2 & """")
End Function
Savez-vous comment puis-je transformer cette fonction pour qu'elle fonctionne ?
Il faut que je passe par une fonction dans un module pour créer la relation.
Mais je n'arrive pas à transformer ce code SQL en fonction.
J'ai essayé de cette façon mais ça ne fonctionne pas :
Public Function Num(N1 As String, N2 As String) As Integer
Num = DCount("*", "RGRAPH", "CULTURE_NUM='" & N1 & " and Semaine<='""" & N2 & """")
End Function
Savez-vous comment puis-je transformer cette fonction pour qu'elle fonctionne ?
J'ai l'impression que cela fonctionne si je procède de cette façon (inverser culture et semaine) :
DCount("*","RGRAPH","CULTURE_NUM=" & [CULTURE_NUM] & " and Semaine<=""" & [Semaine] & """") AS Expr2
DCount("*","RGRAPH","CULTURE_NUM=" & [CULTURE_NUM] & " and Semaine<=""" & [Semaine] & """") AS Expr2
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
Tu as en fait trois types d'information que tu veux rassembler:
- des informations "permanentes", qui ne varient pas dans le temps
- des informations variables liées à la production, liées à des dates
- des informations variables liées aux prévisions, liées à des dates
Tes requêtes mélangent cela dans tous les sens, sont inutilement compliquées et embrouillées.
La requête RGRAPHnum me semble aller dans la bonne direction, elle fournit des informations de production, avec le minimum d'informations permanentes nécessaires.
Je suggère de construire une requête similaire, qui fournira des informations de prévision, avec les informations permanentes nécessaires. Appelons la FORECAST_perminfo.
La requête de base pour les graphes sera FROM FORECAST_perminfo LEFT JOIN RGRAPHnum.
- des informations "permanentes", qui ne varient pas dans le temps
- des informations variables liées à la production, liées à des dates
- des informations variables liées aux prévisions, liées à des dates
Tes requêtes mélangent cela dans tous les sens, sont inutilement compliquées et embrouillées.
La requête RGRAPHnum me semble aller dans la bonne direction, elle fournit des informations de production, avec le minimum d'informations permanentes nécessaires.
Je suggère de construire une requête similaire, qui fournira des informations de prévision, avec les informations permanentes nécessaires. Appelons la FORECAST_perminfo.
La requête de base pour les graphes sera FROM FORECAST_perminfo LEFT JOIN RGRAPHnum.
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
En ce qui concerne les noms de semaine qui manquent dans les données de prévision, je suggère, d'abord, d'utiliser une date (celle du lundi) pour représenter les semaines. Cela sera beaucoup plus rapide et également plus simple pour associer une semaine aux prévisions. Ce qui n'empeche pas, si souhaité, d'utiliser la représentation "2021 s5" dans les graphes (en utilisant AnSem() dans une dernière requête).
Donc, de remplacer, dans la requête RGRAPH
par
Ensuite, créer une requête similaire à WeekMin, qui fournit le premier lundi de chaque culture.
Pour obtenir finalement la date associée à chaque semaine de prévision, il suffit de calculer
Cela permettra aussi d'éliminer wnum() et le dcount(), qui ralentissent le travail.
Donc, de remplacer, dans la requête RGRAPH
AnSem([DATES])
par
int(dates) - weekday(dates,2) +1
Ensuite, créer une requête similaire à WeekMin, qui fournit le premier lundi de chaque culture.
Pour obtenir finalement la date associée à chaque semaine de prévision, il suffit de calculer
premierlundi + 7*(numerosemaine-1).
Cela permettra aussi d'éliminer wnum() et le dcount(), qui ralentissent le travail.