Fonction de regroupement sur requête paramétrée

Le
Gloops
Bonjour tout le monde,

Je prépare un état Access, qui doit prendre en compte des statistique=
s
selon deux unités, nous dirons Colis ou UVC.

Le premier champ contiendra la chaîne "Colis" ou "UVC", selon laquelle =

les autres champs, par des clauses IIf, fourniront les renseignements
adéquats en conséquence.

Pour que l'utilisateur puisse indiquer son choix facilement, la premièr=
e
version de la requête de cet état indiquait comme premier champ
Iif(Forms("frmOuvertureEtat1").cadTypeRequete=1,"Colis","UVC")

Et ça marche bien, l'état sort effectivement les nombres de colis ou =

d'UVC selon la sélection de l'utilisateur dans le formulaire.

Là où ça se gâte, c'est que pour les totaux, l'utilisateur joue u=
n peu
les enfants gâtés : il veut les totaux non pas en pied de groupe, où=
on
aurait pu faire tout simplement des cumuls, mais en tête de groupe, où=

il faut avoir recours à des fonctions de regroupement comme DSum.

DSum, vous pouvez lui indiquer comme domaine une requête enregistrée =

reqListing1, sur laquelle est basée l'état, mais si cette requête
enregistrée est paramétrée, là commence la gymnastique.

Même si le paramètre, dans reqListing1, est dans un formulaire qui es=
t
bien ouvert donc avec la valeur lisible, certes l'état peut appeler des=

conditions sur le champ paramétré, mais si il se met à appeler une =

fonction de regroupement sur cette requête, là on se retrouve avec un=
e
erreur, paramètre manquant.

On pourrait imaginer d'écrire une requête pour chaque valeur du
paramètre, mais alors on perd l'avantage de la fiabilité apportée p=
ar le
code unique.

Comment s'en sortir proprement, autant que possible en conservant
l'avantage d'éviter la duplication de code ? Si en même temps on pouv=
ait
éviter l'usine à gaz, bien sûr, ça serait encore mieux, mais peut=
-être
que là je demande beaucoup :)

J'avais bien pensé à aller chercher le domaine de la fonction de
regroupement dans les propriétés de l'état, mais je n'ai trouvé q=
u'une
chaîne de caractères RecordSource, qui fait appel à la requête
paramétrée
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
3stone
Le #23270021
Salut,

je ne sais si je comprends ce que tu cherches... mais, il me semble
que tu as dans le pied de groupe une zone de texte indépendante
qui comme source =Sum(un_champ)

mais, que tu souhaites en fait afficher cela dans l'en-tête du groupe?

si oui, pourquoi ne place tu pas directement cette zone de texte
dans l'en-tête du groupe ?

Un Sum() ou Count() sur un regroupement peut-être placé
dans le pied ou dans l'en-tête de ce groupe...

Ou alors je n'ai rien compris a ta question :-/

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)




Gloops wrote:
Bonjour tout le monde,

Je prépare un état Access, qui doit prendre en compte des statistiques
selon deux unités, nous dirons Colis ou UVC.

Le premier champ contiendra la chaîne "Colis" ou "UVC", selon laquelle
les autres champs, par des clauses IIf, fourniront les renseignements
adéquats en conséquence.

Pour que l'utilisateur puisse indiquer son choix facilement, la
première version de la requête de cet état indiquait comme premier
champ Iif(Forms("frmOuvertureEtat1").cadTypeRequete=1,"Colis","UVC")

Et ça marche bien, l'état sort effectivement les nombres de colis ou
d'UVC selon la sélection de l'utilisateur dans le formulaire.

Là où ça se gâte, c'est que pour les totaux, l'utilisateur joue un peu
les enfants gâtés : il veut les totaux non pas en pied de groupe, où
on aurait pu faire tout simplement des cumuls, mais en tête de
groupe, où il faut avoir recours à des fonctions de regroupement
comme DSum.

DSum, vous pouvez lui indiquer comme domaine une requête enregistrée
reqListing1, sur laquelle est basée l'état, mais si cette requête
enregistrée est paramétrée, là commence la gymnastique.

Même si le paramètre, dans reqListing1, est dans un formulaire qui est
bien ouvert donc avec la valeur lisible, certes l'état peut appeler
des conditions sur le champ paramétré, mais si il se met à appeler une
fonction de regroupement sur cette requête, là on se retrouve avec une
erreur, paramètre manquant.

On pourrait imaginer d'écrire une requête pour chaque valeur du
paramètre, mais alors on perd l'avantage de la fiabilité apportée par
le code unique.

Comment s'en sortir proprement, autant que possible en conservant
l'avantage d'éviter la duplication de code ? Si en même temps on
pouvait éviter l'usine à gaz, bien sûr, ça serait encore mieux, mais
peut-être que là je demande beaucoup :)

J'avais bien pensé à aller chercher le domaine de la fonction de
regroupement dans les propriétés de l'état, mais je n'ai trouvé qu'une
chaîne de caractères RecordSource, qui fait appel à la requête
paramétrée ...
Gloops
Le #23272231
3stone a écrit, le 09/04/2011 02:50 :
Salut,

je ne sais si je comprends ce que tu cherches... mais, il me semble
que tu as dans le pied de groupe une zone de texte indépendante
qui comme source =Sum(un_champ)

mais, que tu souhaites en fait afficher cela dans l'en-tête du groupe ?

si oui, pourquoi ne place tu pas directement cette zone de texte
dans l'en-tête du groupe ?

Un Sum() ou Count() sur un regroupement peut-être placé
dans le pied ou dans l'en-tête de ce groupe...

Ou alors je n'ai rien compris a ta question :-/




Oui, tout-à-fait.
En fait, j'ai tardé à revenir, mais j'ai fini par avoir l'explication ,
beaucoup plus simple que les pistes que j'étais en train d'explorer : j e
m'étais tout simplement trompé de champ de critère, je passais celu i
destiné à l'utilisateur, donc en passant ça à SQL, ça ne donne rien
d'autre qu'une erreur.

Une fois la bonne expression passée comme filtre, tout va bien.
J'étais tellement persuadé que le problème était ailleurs, qu'il a fallu
que je monte une requête de test, avec un état de test, que je me
rapproche de la config initiale pas à pas, pour me rendre compte que ç a
marche, et du coup j'ai corrigé l'état initial, et ça marche aussi.

Désolé, je m'étais bien dit qu'il fallait que je mette les choses a u
point ici, et puis je suis rentré si tard ...
Publicité
Poster une réponse
Anonyme