OVH Cloud OVH Cloud

Réutilisation des requêtes

8 réponses
Avatar
J-Pierre
Bonjour tout le monde,

Si deux sous-formulaires d'un même formulaire utilisent la même requête comme source de données, est-ce qu'Access va exécuter
la requête 2 fois ? Le problème, c'est qu'il y a 2 recordsets et je crains qu'il ne faille 2 exécutions.

Si Access exécute la requête 2 fois, la solution passerait par un troisième sous-formulaire avec la requête qui récupère les
données, et les 2 sous-formulaires afficheraient les données à partir de ce 3ème.

Un peu compliqué ? Oui..... Quel est l'avantage ? Décharger le serveur et le réseau car c'est une requête assez lourde.......

Merci
J-Pierre

8 réponses

Avatar
Laurent Jordi
Bonjour,

Il est tentant d'essayer de trouver des astuces pour optimiser les
traitements cependant c'est risqué. Je pense que dans un tel cas, il ne faut
pas passer par un troisième sous formulaire car on s'éloignerait de l'esprit
exécution en cascade des formulaires et de leur sous formulaires.

Personnellement je créerais un code vba qui s'exécuterait à l'ouverture du
formulaire principal ou sur événement current si la requête est dépendante
de la clef du formulaire principal. Dans cet éventement j'utiliserait de DAO
pour créer un recordset qui serait déclaré en global.

Lors de initialisation des sous formulaires, j'affecterais un clone du
recordset à chaque sous requête. Cela éviterait toute interaction inattendue
entre les deux entités.

Bien à toi

Laurent Jordi
http://www.laurentjordi.net
http://www.ezlogic.mc


"J-Pierre" a écrit dans le message de
news:
Bonjour tout le monde,

Si deux sous-formulaires d'un même formulaire utilisent la même requête
comme source de données, est-ce qu'Access va exécuter la requête 2 fois ?
Le problème, c'est qu'il y a 2 recordsets et je crains qu'il ne faille 2
exécutions.

Si Access exécute la requête 2 fois, la solution passerait par un
troisième sous-formulaire avec la requête qui récupère les données, et les
2 sous-formulaires afficheraient les données à partir de ce 3ème.

Un peu compliqué ? Oui..... Quel est l'avantage ? Décharger le serveur et
le réseau car c'est une requête assez lourde.......

Merci
J-Pierre



Avatar
J-Pierre
Bonjour Laurent,

Vu ta réponse, je suppose que la même requête sera exécutée 2 fois, car tu n'as pas répondu à la 1ère question :-)

Astucieux, l'idée du recordset déclaré en global :-) Je crois que je vais utiliser cette solution. Sur évènement current du
formulaire, création du recordset en global, puis affectation du clône à chacun des sous-formulaires.....

En fait, il me semble qu'il n'est pas nécessaire de le déclarer en global, puisqu'il ne sera créé et utilisé que dans
l'évènement Current du formulaire principal.

Mais l'idée reste astucieuse :-))))))

Merci
J-Pierre

"Laurent Jordi" <laurent.jordi@(xxx)wanadoo.fr> a écrit dans le message de news: %
Bonjour,

Il est tentant d'essayer de trouver des astuces pour optimiser les traitements cependant c'est risqué. Je pense que dans un
tel cas, il ne faut pas passer par un troisième sous formulaire car on s'éloignerait de l'esprit exécution en cascade des
formulaires et de leur sous formulaires.

Personnellement je créerais un code vba qui s'exécuterait à l'ouverture du formulaire principal ou sur événement current si
la requête est dépendante de la clef du formulaire principal. Dans cet éventement j'utiliserait de DAO pour créer un
recordset qui serait déclaré en global.

Lors de initialisation des sous formulaires, j'affecterais un clone du recordset à chaque sous requête. Cela éviterait toute
interaction inattendue entre les deux entités.

Bien à toi

Laurent Jordi
http://www.laurentjordi.net
http://www.ezlogic.mc


"J-Pierre" a écrit dans le message de news:
Bonjour tout le monde,

Si deux sous-formulaires d'un même formulaire utilisent la même requête comme source de données, est-ce qu'Access va
exécuter la requête 2 fois ? Le problème, c'est qu'il y a 2 recordsets et je crains qu'il ne faille 2 exécutions.

Si Access exécute la requête 2 fois, la solution passerait par un troisième sous-formulaire avec la requête qui récupère
les données, et les 2 sous-formulaires afficheraient les données à partir de ce 3ème.

Un peu compliqué ? Oui..... Quel est l'avantage ? Décharger le serveur et le réseau car c'est une requête assez
lourde.......

Merci
J-Pierre







Avatar
Salut,

"J-Pierre" a écrit dans le message de news:
Bonjour tout le monde,

Si deux sous-formulaires d'un même formulaire utilisent la même requête comme source de données, est-ce qu'Access va exécuter la
requête 2 fois ?


je dirais : OUI

Le problème, c'est qu'il y a 2 recordsets et je crains qu'il ne faille 2 exécutions.

Si Access exécute la requête 2 fois, la solution passerait par un troisième sous-formulaire avec la requête qui récupère les
données, et les 2 sous-formulaires afficheraient les données à partir de ce 3ème.

Un peu compliqué ? Oui..... Quel est l'avantage ? Décharger le serveur et le réseau car c'est une requête assez lourde.......

Merci
J-Pierre
rien compris ;-)


--
Arnaud
---------------------------------------------
infos, conseils et liens : http://www.mpfa.info
---------------------------------------------

Avatar
J-Pierre
Rien compris à la question à laquelle tu as répondu "OUI" ?
à la solution possible ?
ou à "Merci J-Pierre" ?

:-)
J-Pierre

<Anor> a écrit dans le message de news:
Salut,

"J-Pierre" a écrit dans le message de news:
Bonjour tout le monde,

Si deux sous-formulaires d'un même formulaire utilisent la même requête comme source de données, est-ce qu'Access va
exécuter la requête 2 fois ?


je dirais : OUI

Le problème, c'est qu'il y a 2 recordsets et je crains qu'il ne faille 2 exécutions.

Si Access exécute la requête 2 fois, la solution passerait par un troisième sous-formulaire avec la requête qui récupère
les données, et les 2 sous-formulaires afficheraient les données à partir de ce 3ème.

Un peu compliqué ? Oui..... Quel est l'avantage ? Décharger le serveur et le réseau car c'est une requête assez
lourde.......

Merci
J-Pierre
rien compris ;-)


--
Arnaud
---------------------------------------------
infos, conseils et liens : http://www.mpfa.info
---------------------------------------------





Avatar
Laurent Jordi
Salut,

Si je t'ai donné cette solution c'est effectivement que la requête s'execute
deux fois, sinon la réponse n'avait pas lieu d'être..

@+

Laurent
"J-Pierre" a écrit dans le message de
news:
Bonjour Laurent,

Vu ta réponse, je suppose que la même requête sera exécutée 2 fois, car tu
n'as pas répondu à la 1ère question :-)

Astucieux, l'idée du recordset déclaré en global :-) Je crois que je vais
utiliser cette solution. Sur évènement current du formulaire, création du
recordset en global, puis affectation du clône à chacun des
sous-formulaires.....

En fait, il me semble qu'il n'est pas nécessaire de le déclarer en global,
puisqu'il ne sera créé et utilisé que dans l'évènement Current du
formulaire principal.

Mais l'idée reste astucieuse :-))))))

Merci
J-Pierre

"Laurent Jordi" <laurent.jordi@(xxx)wanadoo.fr> a écrit dans le message de
news: %
Bonjour,

Il est tentant d'essayer de trouver des astuces pour optimiser les
traitements cependant c'est risqué. Je pense que dans un tel cas, il ne
faut pas passer par un troisième sous formulaire car on s'éloignerait de
l'esprit exécution en cascade des formulaires et de leur sous
formulaires.

Personnellement je créerais un code vba qui s'exécuterait à l'ouverture
du formulaire principal ou sur événement current si la requête est
dépendante de la clef du formulaire principal. Dans cet éventement
j'utiliserait de DAO pour créer un recordset qui serait déclaré en
global.

Lors de initialisation des sous formulaires, j'affecterais un clone du
recordset à chaque sous requête. Cela éviterait toute interaction
inattendue entre les deux entités.

Bien à toi

Laurent Jordi
http://www.laurentjordi.net
http://www.ezlogic.mc


"J-Pierre" a écrit dans le message
de news:
Bonjour tout le monde,

Si deux sous-formulaires d'un même formulaire utilisent la même requête
comme source de données, est-ce qu'Access va exécuter la requête 2 fois
? Le problème, c'est qu'il y a 2 recordsets et je crains qu'il ne faille
2 exécutions.

Si Access exécute la requête 2 fois, la solution passerait par un
troisième sous-formulaire avec la requête qui récupère les données, et
les 2 sous-formulaires afficheraient les données à partir de ce 3ème.

Un peu compliqué ? Oui..... Quel est l'avantage ? Décharger le serveur
et le réseau car c'est une requête assez lourde.......

Merci
J-Pierre











Avatar
J-Pierre
L'occasion de dire merci à Raymond, depuis des années, je n'avais plus utilisé DAO, côté syntaxe, j'avais du mal, et j'ai
trouvé tous les exemples souhaitables sur son site.

http://OfficeSystem.Access.free.fr/

J-Pierre
Avatar
J-Pierre
"La propriété RecordsetClone vous permet de faire référence à l'objet Recordset d'un formulaire spécifié par la propriété
Source de ce formulaire. Lecture seule." dixit MS dans l'aide en ligne. Je ne peux donc pas référencer le clône d'un recordset
DAO.

Après avoir ouvert mon recordset, j'ai donc fait (toujours dans l'évènement current du formulaire principal) un:
Set Me.MonSousForm.Form.Recordset = MonRecordSetDAO

Et les champs du sous-formulaire s'affichent avec des #nom ?" et des "#erreur".

Si j'ajoute une instruction que j'ai trouvé je ne sais plus où dans la doc:
Me.MonSousForm.Form.RecordSource = Me.MonSousForm.Form.RecordSource

l'affichage redevient bon, mais Access réinterroge la BD, côté performance, pas terrible......

J-Pierre

"Laurent Jordi" <laurent.jordi@(xxx)wanadoo.fr> a écrit dans le message de news: %
Bonjour,

Il est tentant d'essayer de trouver des astuces pour optimiser les traitements cependant c'est risqué. Je pense que dans un
tel cas, il ne faut pas passer par un troisième sous formulaire car on s'éloignerait de l'esprit exécution en cascade des
formulaires et de leur sous formulaires.

Personnellement je créerais un code vba qui s'exécuterait à l'ouverture du formulaire principal ou sur événement current si
la requête est dépendante de la clef du formulaire principal. Dans cet éventement j'utiliserait de DAO pour créer un
recordset qui serait déclaré en global.

Lors de initialisation des sous formulaires, j'affecterais un clone du recordset à chaque sous requête. Cela éviterait toute
interaction inattendue entre les deux entités.

Bien à toi

Laurent Jordi
http://www.laurentjordi.net
http://www.ezlogic.mc


"J-Pierre" a écrit dans le message de news:
Bonjour tout le monde,

Si deux sous-formulaires d'un même formulaire utilisent la même requête comme source de données, est-ce qu'Access va
exécuter la requête 2 fois ? Le problème, c'est qu'il y a 2 recordsets et je crains qu'il ne faille 2 exécutions.

Si Access exécute la requête 2 fois, la solution passerait par un troisième sous-formulaire avec la requête qui récupère
les données, et les 2 sous-formulaires afficheraient les données à partir de ce 3ème.

Un peu compliqué ? Oui..... Quel est l'avantage ? Décharger le serveur et le réseau car c'est une requête assez
lourde.......

Merci
J-Pierre







Avatar
Pierre CFI [mvp]
bonjour
je prends le train en marche mais çà, c'est pas bon
Set Me.MonSousForm.Form.Recordset = MonRecordSetDAO
fait l'inverse
Set MonRecordSetDAO = Me.MonSousForm.Form.Recordset

tu peux affecter un objet à une variable, pas l'inverse

--
Pierre CFI
MVP Microsoft Access

Site pour bien commencer
Access http://www.mpfa.info

"J-Pierre" a écrit dans le message de news:
"La propriété RecordsetClone vous permet de faire référence à l'objet Recordset d'un formulaire spécifié par la propriété Source
de ce formulaire. Lecture seule." dixit MS dans l'aide en ligne. Je ne peux donc pas référencer le clône d'un recordset DAO.

Après avoir ouvert mon recordset, j'ai donc fait (toujours dans l'évènement current du formulaire principal) un:
Set Me.MonSousForm.Form.Recordset = MonRecordSetDAO

Et les champs du sous-formulaire s'affichent avec des #nom ?" et des "#erreur".

Si j'ajoute une instruction que j'ai trouvé je ne sais plus où dans la doc:
Me.MonSousForm.Form.RecordSource = Me.MonSousForm.Form.RecordSource

l'affichage redevient bon, mais Access réinterroge la BD, côté performance, pas terrible......

J-Pierre

"Laurent Jordi" <laurent.jordi@(xxx)wanadoo.fr> a écrit dans le message de news: %
Bonjour,

Il est tentant d'essayer de trouver des astuces pour optimiser les traitements cependant c'est risqué. Je pense que dans un tel
cas, il ne faut pas passer par un troisième sous formulaire car on s'éloignerait de l'esprit exécution en cascade des formulaires
et de leur sous formulaires.

Personnellement je créerais un code vba qui s'exécuterait à l'ouverture du formulaire principal ou sur événement current si la
requête est dépendante de la clef du formulaire principal. Dans cet éventement j'utiliserait de DAO pour créer un recordset qui
serait déclaré en global.

Lors de initialisation des sous formulaires, j'affecterais un clone du recordset à chaque sous requête. Cela éviterait toute
interaction inattendue entre les deux entités.

Bien à toi

Laurent Jordi
http://www.laurentjordi.net
http://www.ezlogic.mc


"J-Pierre" a écrit dans le message de news:
Bonjour tout le monde,

Si deux sous-formulaires d'un même formulaire utilisent la même requête comme source de données, est-ce qu'Access va exécuter la
requête 2 fois ? Le problème, c'est qu'il y a 2 recordsets et je crains qu'il ne faille 2 exécutions.

Si Access exécute la requête 2 fois, la solution passerait par un troisième sous-formulaire avec la requête qui récupère les
données, et les 2 sous-formulaires afficheraient les données à partir de ce 3ème.

Un peu compliqué ? Oui..... Quel est l'avantage ? Décharger le serveur et le réseau car c'est une requête assez lourde.......

Merci
J-Pierre