OVH Cloud OVH Cloud

Static, Public, Dim et caetera

9 réponses
Avatar
Anor
Bonjour la communauté.

On peut avoir par exemple :

1 - Public Function LaFonction()
Static strVariable As String
ou
2 - Public strVariable As String
Public Function LaFonction()
ou
3 - Dim strVariable As String
Public Function LaFonction()

Outre l'avantage de pouvoir retrouver la valeur de la variable strVariable
- dans le même module si déclarée comme le cas 3
- depuis n'importe où si déclarée comme le cas 2

Quel bénéfice peut-on tirer en faisant la déclaration du cas 1 :
Static strVariable As String ?

Eh oui, je n'y peux rien, mais tout ce que j'essaye, ça fonctionne.
Et pourtant, j'essaie de le faire planter, pas moyen ;-))

Par avance merci à ceux qui trouveront un avantage à la méthode Static, car
je n'aime pas utiliser les choses sans connaître leurs avantages car ça veut
peut-être dire que je ne connais pas leurs inconvénients .....

à+
--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

9 réponses

Avatar
Eric
Bonjour Arnaud

Si j'ai bonne mémoire Static fait référence à une variable de portée
locale mais dont on veut conserver la valeur entre plusieurs appels de la
procédure où elle est déclarée.
Il est vrai qu'en déclarant cette variable de portée Public (générale) ca
revient au même mais à la différence que cette variable réserve de
l'espace mémoire même si elle n'est pas utilisée. Donc tu consommes des
ressources sans raison.
Au final, la différence c'est le gain de mémoire pour ton appli car si la
variable est définie Static dans une procédure c'est uniquement lors du
1er appel de cette procédure que la mémoire stocke de la place alors que
si déclarée Public, c'est en permanence même si tu ne l'utilises pas.

Enfin Le Dim dans un module général revient lui aussi à réserver de la
place mémoire puisque les modules globaux sont chargés au lancement de
ton appli, même si ces modules ne sont pas "exploités" immédiatement

Bon, je garantis pas tout mais je pense ne pas être trop loin de la
réalité.

A+
Eric

"Anor" <http://memoaccess.free.fr/anor/email.htm> écrivait
news:ebnEkq$:

Bonjour la communauté.

On peut avoir par exemple :

1 - Public Function LaFonction()
Static strVariable As String
ou
2 - Public strVariable As String
Public Function LaFonction()
ou
3 - Dim strVariable As String
Public Function LaFonction()

Outre l'avantage de pouvoir retrouver la valeur de la variable
strVariable - dans le même module si déclarée comme le cas 3
- depuis n'importe où si déclarée comme le cas 2

Quel bénéfice peut-on tirer en faisant la déclaration du cas 1 :
Static strVariable As String ?

Eh oui, je n'y peux rien, mais tout ce que j'essaye, ça fonctionne.
Et pourtant, j'essaie de le faire planter, pas moyen ;-))

Par avance merci à ceux qui trouveront un avantage à la méthode
Static, car je n'aime pas utiliser les choses sans connaître leurs
avantages car ça veut peut-être dire que je ne connais pas leurs
inconvénients .....

à+


Avatar
Pierre CFI [mvp]
bonjour anor
dis moi, mon petit anor, est ce que je t'en pose des questions ? non ? bon, chacun ses problémes :o))

cela dit, eric a donné (pour une fois) une réponse presque intelligente

La semaine démarre à fond, peut etre un coup de chaleur....

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Eric" a écrit dans le message de news:
Bonjour Arnaud

Si j'ai bonne mémoire Static fait référence à une variable de portée
locale mais dont on veut conserver la valeur entre plusieurs appels de la
procédure où elle est déclarée.
Il est vrai qu'en déclarant cette variable de portée Public (générale) ca
revient au même mais à la différence que cette variable réserve de
l'espace mémoire même si elle n'est pas utilisée. Donc tu consommes des
ressources sans raison.
Au final, la différence c'est le gain de mémoire pour ton appli car si la
variable est définie Static dans une procédure c'est uniquement lors du
1er appel de cette procédure que la mémoire stocke de la place alors que
si déclarée Public, c'est en permanence même si tu ne l'utilises pas.

Enfin Le Dim dans un module général revient lui aussi à réserver de la
place mémoire puisque les modules globaux sont chargés au lancement de
ton appli, même si ces modules ne sont pas "exploités" immédiatement

Bon, je garantis pas tout mais je pense ne pas être trop loin de la
réalité.

A+
Eric

"Anor" <http://memoaccess.free.fr/anor/email.htm> écrivait
news:ebnEkq$:

Bonjour la communauté.

On peut avoir par exemple :

1 - Public Function LaFonction()
Static strVariable As String
ou
2 - Public strVariable As String
Public Function LaFonction()
ou
3 - Dim strVariable As String
Public Function LaFonction()

Outre l'avantage de pouvoir retrouver la valeur de la variable
strVariable - dans le même module si déclarée comme le cas 3
- depuis n'importe où si déclarée comme le cas 2

Quel bénéfice peut-on tirer en faisant la déclaration du cas 1 :
Static strVariable As String ?

Eh oui, je n'y peux rien, mais tout ce que j'essaye, ça fonctionne.
Et pourtant, j'essaie de le faire planter, pas moyen ;-))

Par avance merci à ceux qui trouveront un avantage à la méthode
Static, car je n'aime pas utiliser les choses sans connaître leurs
avantages car ça veut peut-être dire que je ne connais pas leurs
inconvénients .....

à+





Avatar
Eric
Bonjour Pierre,

"Pierre CFI [mvp]" écrivait

cela dit, eric a donné (pour une fois) une réponse presque
intelligente

La semaine démarre à fond, peut etre un coup de chaleur....

Euh ... non, par une gifle ,-)) les glaçons c'est pour plus tard.


A+
Eric

Avatar
Pierre CFI [mvp]
Anor, il est peinard. C'est agréable le bassin d'Arcachon, je connais bien, j'ai habité la région, mais à l'époque je n'avais pas 6
semaines de congés, les 35 h ET 33 jours de rtt :o))

--
Pierre CFI
MVP Microsoft Access
Mail : http://cerbermail.com/?z0SN8cN53B

Site pour bien commencer
http://users.skynet.be/mpfa/
Site perso
http://access.cfi.free.fr
"Eric" a écrit dans le message de news:
Bonjour Pierre,

"Pierre CFI [mvp]" écrivait

cela dit, eric a donné (pour une fois) une réponse presque
intelligente

La semaine démarre à fond, peut etre un coup de chaleur....

Euh ... non, par une gifle ,-)) les glaçons c'est pour plus tard.


A+
Eric



Avatar
Daniel Carollo
Bonjour Arnaud (et les autres).

Comme vous l'avez vu, il y a toujours moyen de faire de plusieurs facons. Je
dirais que dans ce cas, les differences sont plus liees a la facon de
programmer et au modele de programmation que le developpeur utilise.

J'ai tendance a favoriser la premiere methode, qui a l'avantage de cacher la
variable au "monde exterieur". C'est la philosophie "Object Oriented", ou
l'on cache les variables, et on n'y accede que par des fonctions (en fait
des methodes des objets), ce qui permet de verifier les mises a jour de ces
variables en un endroit. Cela permet aussi de changer de type de variable:
peut-etre qu'un jour un BLOB sera plus approprie pour le stockage de
strVariable, elle poura alors changer de type, de nom meme (et devenir
binVariable) sans changer les endroits ou LaFonction est appelee.

Les declarations du style 2 et 3 permettent d'avoir des "drapeaux" qui sont
visible d'un peu partout. C'est parfois bien utile, mais le fait qu'il
puissent etre changes d'un peu partout rend la maintenance d'une application
plus difficile.

Voila, en resume, des differences assez subtiles, mais pas de regle absolue
qui proscrirait une quelconque de ces syntaxes (priez pour nous ;-)


--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

P.S. Pour ce qui est de planter Access, Arnaud, le plus simple est de creer
une requete avec des joints qui "se mordent la queue", genre tableA INNER
JOIN tableB INNER JOIN tableC INNER JOIN tableA...

"Anor" <http://memoaccess.free.fr/anor/email.htm> wrote in message
news:ebnEkq$
Bonjour la communauté.

On peut avoir par exemple :

1 - Public Function LaFonction()
Static strVariable As String
ou
2 - Public strVariable As String
Public Function LaFonction()
ou
3 - Dim strVariable As String
Public Function LaFonction()

Outre l'avantage de pouvoir retrouver la valeur de la variable strVariable
- dans le même module si déclarée comme le cas 3
- depuis n'importe où si déclarée comme le cas 2

Quel bénéfice peut-on tirer en faisant la déclaration du cas 1 :
Static strVariable As String ?

Eh oui, je n'y peux rien, mais tout ce que j'essaye, ça fonctionne.
Et pourtant, j'essaie de le faire planter, pas moyen ;-))

Par avance merci à ceux qui trouveront un avantage à la méthode Static,
car

je n'aime pas utiliser les choses sans connaître leurs avantages car ça
veut

peut-être dire que je ne connais pas leurs inconvénients .....

à+
--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------




Avatar
Anor
Salut,

Pierre CFI [mvp] wrote:
| Anor, il est peinard. C'est agréable le bassin d'Arcachon, je connais
| bien, j'ai habité la région, mais à l'époque je n'avais pas 6
| semaines de congés, les 35 h ET 33 jours de rtt :o))

exactement 25+19 jours
j'en ai presque honte mais que veux tu on me les donne, alors ....
;-)
à+
Anor
Avatar
Anor
Bonjour Eric,

Eric wrote:
|
| Si j'ai bonne mémoire Static fait référence à une variable de portée
| locale mais dont on veut conserver la valeur entre plusieurs appels
| de la procédure où elle est déclarée.

oui c'est bien ça.

| Il est vrai qu'en déclarant cette variable de portée Public
| (générale) ca revient au même mais à la différence que cette variable
| réserve de l'espace mémoire même si elle n'est pas utilisée. Donc tu
| consommes des ressources sans raison.

peut-être que tu as raison.
Il faudrait que notre ami Michel Walsh nous concocte une petite procédure
sympa pour vérifier l'espace mémoire alloué au centibyte près selon les cas de figure;-))

d'ailleurs j'ai vu chez logipro une petite base
qui affiche la consommation processeur graphiquement dans un formulaire.
ça vaut le coup d'oeil ...

Merci en tout cas pour tes réponses.

Anor
Avatar
Anor
Bonjour Daniel, (et les autres aussi ;-)

Daniel Carollo wrote:
| Bonjour Arnaud (et les autres).
|
| J'ai tendance a favoriser la premiere methode, qui a l'avantage de
| cacher la variable au "monde exterieur".

ah je commence à comprendre...
Je m'attacherai désormais à ne plus appliquer la devise
"qui peut le plus peut le moins"
mais plutôt une nouvelle devise :
"qui peut le moins, peut le mieux"

;-)))

| Cela permet aussi de changer de type de variable: peut-etre qu'un jour un BLOB
| sera plus approprie pour le stockage de strVariable, elle poura alors
| changer de type, de nom meme (et devenir binVariable) sans changer
| les endroits ou LaFonction est appelee.

wouahh ! c'est profond ça !
on dirait un dessert gélatineux anglais ce "BLOB" :
http://kalaia.free.fr/ency/article.php?id_articleV

|
| Les declarations du style 2 et 3 permettent d'avoir des "drapeaux"
| qui sont visible d'un peu partout. C'est parfois bien utile, mais le
| fait qu'il puissent etre changes d'un peu partout rend la maintenance
| d'une application plus difficile.
|
| Voila, en resume, des differences assez subtiles, mais pas de regle
| absolue qui proscrirait une quelconque de ces syntaxes (priez pour
| nous ;-)
|

Merci infiniement pour ces conseils.

à+
--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
Avatar
Daniel Carollo
Bonjour Anor!


"Anor" <http://memoaccess.free.fr/anor/email.htm> wrote in message
news:%
Bonjour Daniel, (et les autres aussi ;-)

wouahh ! c'est profond ça !


Bien sur, vous aviez compris qu'en Glais c'est un Binary Large Object
mais...

on dirait un dessert gélatineux anglais ce "BLOB" :
http://kalaia.free.fr/ency/article.php?id_articleV


moi j'avais oublie cet effet physique. Merci pour le lien (et le site tres
interessant), mais avant d'en remplir la piscine, il faudra que je fasse une
piscine ;-)

Bonne journee.

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...