OVH Cloud OVH Cloud

Remplissage listbox

6 réponses
Avatar
Sun Service
Bonjour à tous,

Voila : J'ai un form contenant une multitude de listbox. Sur l'événement
activation, je charge ces listbox avec une chaîne SQL. Du type :

Me.lst1.rowsource = "SELECT * FROM Tbl1....."
Me.lst2.rowsource = "SELECT * FROM Tbl2....."

Comme vous vous l'imaginez, à force d'ajouter de nouvelles listbox à
remplir, le temps d'activation du form est de plus en plus long....J'aurais
aimé savoir s'il y avait un moyen d'améliorer le temps de traitement des
chaînes SQL. Par là je voulais savoir de quelle manière l'accès aux données
était traité avec un .rowsource : en lecture seule ou lecture / écriture ?
J'imagine que si c'est déjà en lecture seule, il n'y aura pas grand chose à
optimiser de ce côté...

Merciiiiiii

Laurent

6 réponses

Avatar
Raymond [mvp]
Bonjour.

la 1ere question à se poser : pourquoi le rowsource des listes change-t-il à
chaque enregistrement ? le rowsource d'une liste est fait pour présenter un
ensemble de possibilités et récupérer une sélection et non pour changer de
possibilité en fonction d'un client, sauf exception.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sun Service" a écrit dans le message de
news:c91kbe$6g8$
Bonjour à tous,

Voila : J'ai un form contenant une multitude de listbox. Sur
l'événement

activation, je charge ces listbox avec une chaîne SQL. Du type :

Me.lst1.rowsource = "SELECT * FROM Tbl1....."
Me.lst2.rowsource = "SELECT * FROM Tbl2....."

Comme vous vous l'imaginez, à force d'ajouter de nouvelles listbox à
remplir, le temps d'activation du form est de plus en plus
long....J'aurais

aimé savoir s'il y avait un moyen d'améliorer le temps de traitement des
chaînes SQL. Par là je voulais savoir de quelle manière l'accès aux
données

était traité avec un .rowsource : en lecture seule ou lecture / écriture ?
J'imagine que si c'est déjà en lecture seule, il n'y aura pas grand chose
à

optimiser de ce côté...

Merciiiiiii

Laurent




Avatar
Sun Service
Oui tout à fait, le rowsource des listes change à chaque enregistrement,
d'où le fait d'avoir écrit le code dans l'événement activation.

"Raymond [mvp]" a écrit dans le message de
news: O$
Bonjour.

la 1ere question à se poser : pourquoi le rowsource des listes change-t-il
à

chaque enregistrement ? le rowsource d'une liste est fait pour présenter
un

ensemble de possibilités et récupérer une sélection et non pour changer de
possibilité en fonction d'un client, sauf exception.

--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sun Service" a écrit dans le message de
news:c91kbe$6g8$
Bonjour à tous,

Voila : J'ai un form contenant une multitude de listbox. Sur
l'événement

activation, je charge ces listbox avec une chaîne SQL. Du type :

Me.lst1.rowsource = "SELECT * FROM Tbl1....."
Me.lst2.rowsource = "SELECT * FROM Tbl2....."

Comme vous vous l'imaginez, à force d'ajouter de nouvelles listbox à
remplir, le temps d'activation du form est de plus en plus
long....J'aurais

aimé savoir s'il y avait un moyen d'améliorer le temps de traitement des
chaînes SQL. Par là je voulais savoir de quelle manière l'accès aux
données

était traité avec un .rowsource : en lecture seule ou lecture / écriture
?


J'imagine que si c'est déjà en lecture seule, il n'y aura pas grand
chose


à
optimiser de ce côté...

Merciiiiiii

Laurent








Avatar
Raymond [mvp]
je ne vois pas bien de solution mis à part de ramener le minimum d'infos.
il faudrait peut-être voir le moment où tu en as besoin et ne changer le
rowsource qu'à ce moment-là ? c'est à dire ne pas toutes les changer en même
temps mais de temps en temps après tel événement par exemple meme si cet
événement n'est pas en relation.
voir aussi de lancer le changement sur un timer pour échelonner les requêtes
toutes les n secondes ?
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sun Service" a écrit dans le message de
news:c91qpm$uaa$
Oui tout à fait, le rowsource des listes change à chaque enregistrement,
d'où le fait d'avoir écrit le code dans l'événement activation.



Avatar
Sun Service
Oui, c'est exactement ce vers quoi je pensais tendre....
En fait, les listbox sont réparties dans différents onglets. Le fait de
charger les listbox en fonction du timer ne conviendrait donc pas vraiment,
car les utilisateurs peuvent passer d'un enregistrement à l'autre tout en
restant sur le meme onglet, on ne peut donc pas réellement définir des
ordres de remplissage.
Par contre, j'avais pensé charger les listbox d'un onglet à partir du moment
où on clique sur cet onglet. Cela dit, j'ai pas l'impression que l'événement
"sur clic" d'une page d'un onglet fonctionne....je dois m'y prendre mal.
Cela dit ça ne résoud pas mon problème si la personne fait défiler les
enregistrements en restant sur un onglet donné...il faudra que je vois pour
des méthodes de contournement.



"Raymond [mvp]" a écrit dans le message de
news: uyjWO$
je ne vois pas bien de solution mis à part de ramener le minimum d'infos.
il faudrait peut-être voir le moment où tu en as besoin et ne changer le
rowsource qu'à ce moment-là ? c'est à dire ne pas toutes les changer en
même

temps mais de temps en temps après tel événement par exemple meme si cet
événement n'est pas en relation.
voir aussi de lancer le changement sur un timer pour échelonner les
requêtes

toutes les n secondes ?
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sun Service" a écrit dans le message de
news:c91qpm$uaa$
Oui tout à fait, le rowsource des listes change à chaque enregistrement,
d'où le fait d'avoir écrit le code dans l'événement activation.







Avatar
Raymond [mvp]
l'événement sur clic fonctionne mais si tu cliques dans la page et non sur
l'onglet lui-même. pour le clic sur le ctltab c'est encore plus sioux.
il y a longtemps, je remplaçais les onglets par des boutons de commande ce
qui me permettais de placer le focus où je voulais tel que:
Me.CtlTab1.Pages(0).SetFocus
et de ce fait je pouvais maîtriser le déroulement des opérations. Tu
pourrais étudier cette solution et tu lancerais tes rowsources au clic sur
le bouton.
lors du form_current tu remets le focus sur la page 0 par exemple.
tout ça à voir.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sun Service" a écrit dans le message de
news:c91ukj$6p1$
Oui, c'est exactement ce vers quoi je pensais tendre....
En fait, les listbox sont réparties dans différents onglets. Le fait de
charger les listbox en fonction du timer ne conviendrait donc pas
vraiment,

car les utilisateurs peuvent passer d'un enregistrement à l'autre tout en
restant sur le meme onglet, on ne peut donc pas réellement définir des
ordres de remplissage.
Par contre, j'avais pensé charger les listbox d'un onglet à partir du
moment

où on clique sur cet onglet. Cela dit, j'ai pas l'impression que
l'événement

"sur clic" d'une page d'un onglet fonctionne....je dois m'y prendre mal.
Cela dit ça ne résoud pas mon problème si la personne fait défiler les
enregistrements en restant sur un onglet donné...il faudra que je vois
pour

des méthodes de contournement.



Avatar
Sun Service
Tout à fait, merci Raymond. Ce sont de bonnes solutions à creuser.... je
vais voir tout ceci

Merci !

Laurent

"Raymond [mvp]" a écrit dans le message de
news:
l'événement sur clic fonctionne mais si tu cliques dans la page et non sur
l'onglet lui-même. pour le clic sur le ctltab c'est encore plus sioux.
il y a longtemps, je remplaçais les onglets par des boutons de commande ce
qui me permettais de placer le focus où je voulais tel que:
Me.CtlTab1.Pages(0).SetFocus
et de ce fait je pouvais maîtriser le déroulement des opérations. Tu
pourrais étudier cette solution et tu lancerais tes rowsources au clic sur
le bouton.
lors du form_current tu remets le focus sur la page 0 par exemple.
tout ça à voir.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"Sun Service" a écrit dans le message de
news:c91ukj$6p1$
Oui, c'est exactement ce vers quoi je pensais tendre....
En fait, les listbox sont réparties dans différents onglets. Le fait de
charger les listbox en fonction du timer ne conviendrait donc pas
vraiment,

car les utilisateurs peuvent passer d'un enregistrement à l'autre tout
en


restant sur le meme onglet, on ne peut donc pas réellement définir des
ordres de remplissage.
Par contre, j'avais pensé charger les listbox d'un onglet à partir du
moment

où on clique sur cet onglet. Cela dit, j'ai pas l'impression que
l'événement

"sur clic" d'une page d'un onglet fonctionne....je dois m'y prendre mal.
Cela dit ça ne résoud pas mon problème si la personne fait défiler les
enregistrements en restant sur un onglet donné...il faudra que je vois
pour

des méthodes de contournement.