OVH Cloud OVH Cloud

Module de Classe

6 réponses
Avatar
Archives
Bonsoir,

Pour faciliter une éventuelle migration vers un language objet (Java
notamment), j'essaie de développer une application en utilisant les modules
de classes sous Access 97. Je me heurte à deux problèmes:

- Access ne permettant pas de gérer facilement des modules, je me propose de
stocker tous les modules de classes dans un fichier déporté. comment puis-je
faire connaître l'existence de ces classes à ma base (frontale pour
reprendre vos termes, en réalité je n'ai pas de base dorsale) ? Les
références ne semblent pas fonctionner pour les modules de classes.

- Pour une classe Ampoule j'ai créé une propriété Puissance. Pour faire
fonctionner les procédures Get et Let, je suis obligé de passer par une
variable de stockage interne au module (Puissance_ par exemple). Du coup
dans l'explorateur d'objets, j'ai une propriété Puissance et une variable
Puissance_. Celà ne me semble pas très rationnel. J'ai du louper un épisode
mais je ne sais lequel. Comment peut on programmer proprement une propriété
?

Merci de votre aide.

6 réponses

Avatar
Anor
Bonjour,

En général, on crée une base .mda qui contiendra les modules,
mais une .mdb fonctionnera tout aussi bien.

Ensuite, depuis la base principale, dans la fenêtre visual basic editor,
menu outils>références> parcourir,
et tu sélectionnes ta base mdb ou mda qui contient les modules.

--
à+
Arnaud
--------------------------------------------------
*Avant toute chose* : http://users.skynet.be/mpfa/
Access Memorandum - http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

Archives :
| Bonsoir,
|
| Pour faciliter une éventuelle migration vers un language objet (Java
| notamment), j'essaie de développer une application en utilisant les
| modules de classes sous Access 97. Je me heurte à deux problèmes:
|
| - Access ne permettant pas de gérer facilement des modules, je me
| propose de stocker tous les modules de classes dans un fichier
| déporté. comment puis-je faire connaître l'existence de ces classes à
| ma base (frontale pour reprendre vos termes, en réalité je n'ai pas
| de base dorsale) ? Les références ne semblent pas fonctionner pour
| les modules de classes.
|
| - Pour une classe Ampoule j'ai créé une propriété Puissance. Pour
| faire fonctionner les procédures Get et Let, je suis obligé de passer
| par une variable de stockage interne au module (Puissance_ par
| exemple). Du coup dans l'explorateur d'objets, j'ai une propriété
| Puissance et une variable Puissance_. Celà ne me semble pas très
| rationnel. J'ai du louper un épisode mais je ne sais lequel. Comment
| peut on programmer proprement une propriété ?
|
| Merci de votre aide.
Avatar
Archives
Oui, mais sous Access 97, on ne peut pas utiliser cette méthode pour
atteindre des modules de classe, seulement des modules standards. Ou alors
je m'y prends mal...
"Anor" <http://memoaccess.free.fr/anor/email.htm> a écrit dans le message de
news: OcnKM$
Bonjour,

En général, on crée une base .mda qui contiendra les modules,
mais une .mdb fonctionnera tout aussi bien.

Ensuite, depuis la base principale, dans la fenêtre visual basic editor,
menu outils>références> parcourir,
et tu sélectionnes ta base mdb ou mda qui contient les modules.

--
à+
Arnaud
--------------------------------------------------
*Avant toute chose* : http://users.skynet.be/mpfa/
Access Memorandum - http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

Archives :
| Bonsoir,
|
| Pour faciliter une éventuelle migration vers un language objet (Java
| notamment), j'essaie de développer une application en utilisant les
| modules de classes sous Access 97. Je me heurte à deux problèmes:
|
| - Access ne permettant pas de gérer facilement des modules, je me
| propose de stocker tous les modules de classes dans un fichier
| déporté. comment puis-je faire connaître l'existence de ces classes à
| ma base (frontale pour reprendre vos termes, en réalité je n'ai pas
| de base dorsale) ? Les références ne semblent pas fonctionner pour
| les modules de classes.
|
| - Pour une classe Ampoule j'ai créé une propriété Puissance. Pour
| faire fonctionner les procédures Get et Let, je suis obligé de passer
| par une variable de stockage interne au module (Puissance_ par
| exemple). Du coup dans l'explorateur d'objets, j'ai une propriété
| Puissance et une variable Puissance_. Celà ne me semble pas très
| rationnel. J'ai du louper un épisode mais je ne sais lequel. Comment
| peut on programmer proprement une propriété ?
|
| Merci de votre aide.




Avatar
Anor
Bonjour,

Archives :
| Oui, mais sous Access 97, on ne peut pas utiliser cette méthode pour
| atteindre des modules de classe, seulement des modules standards. Ou
| alors je m'y prends mal...

ah peut-être, je ne sais pas...

--
à+
Arnaud
--------------------------------------------------
*Avant toute chose* : http://users.skynet.be/mpfa/
Access Memorandum - http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
Avatar
Michel Walsh
Salut,


Les instanciations sont "private" et "public not creatable". Dans le
second cas, c'est un peu comme DAO, où on ne peut pas faire:

============= Dim rst As New DAO.Recordset
=============

Il faut absolument passer par une "usine" :

============== Dim rst As DAO.Recordset
Set rst=CurrentDb.OpenRecordset( ... )
==============
Cela permet, en effet, de mimer un constructeur C++ où l'objet est créé
avec des paramètres:

Set rst= CréeCeRecordset( voici_des_paramètres_gérant_la_création )
' VB/VBA

et on ne peut pas créer de recordsets "non initialisés", des recordsets
"illégaux", en procédant de cette façon.


Donc, c'est voulu, et la façon est donc de créer l' "usine" dans un module
standard. J'imagine qu'il y a une classe ClassA dans l'application (arrière
plan). On ajoute donc l'usine dans un de ses module standards:

============== Public Function MakeMeAClassAObject( ... paramètres... on peut même utiliser
des paramètres optionels...) As ClassA

...
Set MakeMeAClassAObject = ...
End Function
==============

Par la suite, dans l'application ayant l'application mdb précédante en
références, on peut utiliser:


============== Dim x As AutreDb.ClassA ' early binding
Set x = AutreDb.MakeMeAClassAObject( ... )
==============

Note: l'instanciation par défaut des classes est Private, Il faut la changer
pour PublicNotCreatable (Visible de l'extérieur, mais l 'extérieur ne peut
utiliser NEW ).


Espérant être utile,
Vanderghast, Access MVP




"Anor" <http://memoaccess.free.fr/anor/email.htm> wrote in message
news:e8$
Bonjour,

Archives :
| Oui, mais sous Access 97, on ne peut pas utiliser cette méthode pour
| atteindre des modules de classe, seulement des modules standards. Ou
| alors je m'y prends mal...

ah peut-être, je ne sais pas...

--
à+
Arnaud
--------------------------------------------------
*Avant toute chose* : http://users.skynet.be/mpfa/
Access Memorandum - http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------




Avatar
Archives
Merci, cette méthode fonctionne en effet. C'est maintenant la méthode la
plus simple que je connaisse. Je m'étonne tout de même que Microsoft n'aie
pas proposé une méthode plus directe.


"Michel Walsh" a écrit dans le message
de news:
Salut,


Les instanciations sont "private" et "public not creatable". Dans le
second cas, c'est un peu comme DAO, où on ne peut pas faire:

============= > Dim rst As New DAO.Recordset
============= >

Il faut absolument passer par une "usine" :

============== > Dim rst As DAO.Recordset
Set rst=CurrentDb.OpenRecordset( ... )
============== >
Cela permet, en effet, de mimer un constructeur C++ où l'objet est
créé

avec des paramètres:

Set rst= CréeCeRecordset(
voici_des_paramètres_gérant_la_création )

' VB/VBA

et on ne peut pas créer de recordsets "non initialisés", des
recordsets

"illégaux", en procédant de cette façon.


Donc, c'est voulu, et la façon est donc de créer l' "usine" dans un module
standard. J'imagine qu'il y a une classe ClassA dans l'application
(arrière

plan). On ajoute donc l'usine dans un de ses module standards:

============== > Public Function MakeMeAClassAObject( ... paramètres... on peut même
utiliser

des paramètres optionels...) As ClassA

...
Set MakeMeAClassAObject = ...
End Function
============== >

Par la suite, dans l'application ayant l'application mdb précédante en
références, on peut utiliser:


============== > Dim x As AutreDb.ClassA ' early binding
Set x = AutreDb.MakeMeAClassAObject( ... )
============== >

Note: l'instanciation par défaut des classes est Private, Il faut la
changer

pour PublicNotCreatable (Visible de l'extérieur, mais l 'extérieur ne peut
utiliser NEW ).


Espérant être utile,
Vanderghast, Access MVP




"Anor" <http://memoaccess.free.fr/anor/email.htm> wrote in message
news:e8$
Bonjour,

Archives :
| Oui, mais sous Access 97, on ne peut pas utiliser cette méthode pour
| atteindre des modules de classe, seulement des modules standards. Ou
| alors je m'y prends mal...

ah peut-être, je ne sais pas...

--
à+
Arnaud
--------------------------------------------------
*Avant toute chose* : http://users.skynet.be/mpfa/
Access Memorandum - http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------








Avatar
Michel Walsh
Salut,



Il semble que les suggestions reçues via leur Contactez-nous sont
toutes lues et acheminées... Microsoft tient compte des "stats", du nombre
de messages reçus, pour calibrer ce qui nécessite des améliorations. En
conclusion, si on sait où se trouve le site de Microsoft et son
contactez-nous, y laisser sa suggestion peut éventuellement contribuer
grandement à voir d'autres modes d'instanciation en VBA (ils existent en VB
classique) ... (et même si la suggestion est en français, ils peuvent
traduire, je crois).



Vanderghast, Access MVP


"Archives" wrote in message
news:bsq15h$b8i$
Merci, cette méthode fonctionne en effet. C'est maintenant la méthode la
plus simple que je connaisse. Je m'étonne tout de même que Microsoft n'aie
pas proposé une méthode plus directe.