Access
 sql >> Base de données >  >> RDS >> Access

Classe de base VBA et objet dérivé-2

Présentation.

La semaine dernière, nous avons créé un objet de classe dérivée ClsVolume, en utilisant la classe ClsArea comme classe de base. Nous avons créé des procédures de propriété dans la classe dérivée pour exposer les propriétés et la fonction de la classe de base aux programmes utilisateur de l'objet. Cette méthode exige également la répétition de toutes les procédures de propriété de la classe de base dans la classe dérivée. Ici, nous explorons comment créer la même classe ClsVolume dérivée sans répéter les procédures de propriété de la classe ClsArea de base.

Nous avons appris l'utilisation de Get et Laissez Procédures de propriété dans les classes. Il existe une autre procédure de propriété utilisée dans les classes :le Set Procédure de propriété. La procédure Set Property affecte directement un objet à un objet de classe du même type.

Avant de continuer, vous pouvez visiter les pages précédentes sur ce sujet, si vous ne l'avez pas déjà fait, les liens sont donnés ci-dessous :

  • Module de classe MS-Access et VBA
  • Tableaux d'objets de classe MS-Access VBA
  • Classe de base MS-Access et objets dérivés

Classe ClsVolume, le relooking.

Nous allons créer une variante différente du même module de classe ClsVolume, que nous avons créé la semaine dernière, en utilisant ClsArea comme classe de base, avec une approche différente et avec moins de code.

Créez un nouveau module de classe et modifiez sa valeur de propriété de nom en ClsVolume2 .

Copiez et collez le code suivant dans le module de classe ClsVolume2 et enregistrez le module :

Option Compare Database
Option Explicit
'Method two-1
Private p_Height As Double
Private p_Area As ClsArea

Public Property Get dblHeight() As Double
    dblHeight = p_Height
End Property

Public Property Let dblHeight(ByVal dblNewValue As Double)
    p_Height = dblNewValue
End Property

Public Function Volume() As Double
    Volume = p_Area.dblLength * p_Area.dblWidth * p_Height
End Function

'Nouveau Obtenir et Définir Procédure de propriété pour ClsArea ObjectsPublic Property Get CArea() As ClsArea Set CArea =p_AreaEnd PropertyPublic Property Set CArea(ByRef AreaValue As ClsArea) Set p_Area =AreaValueEnd Property

Sélectionnez Compiler Nom du projet de Debug Menu pour compiler le code VBA dans la base de données afin de garantir que tout le code de projet VBA est sans erreur. Si vous avez rencontré une erreur dans vos autres programmes VBA, veuillez rechercher l'erreur, la corriger et recompiler votre projet. Sinon, VBA IntelliSense qui affiche une liste de propriétés et de fonctions d'objets ne fonctionnera pas. Cela ne nous empêchera pas d'attribuer/de récupérer des valeurs vers/depuis les propriétés de l'objet. Mais, tout en apprenant, il est important de voir les propriétés d'un objet apparaître et afficher la liste, en tant qu'assistant dans le codage.


Obtenir/Définir au lieu de Get/Let Property Procedure.

Nous avons omis toutes les procédures de propriété de ClsArea, créées dans la dernière version de ClsVolume Class, et les avons remplacées par un Get/Set Procédures de propriété, au lieu de Get/Let . Vérifiez la zone de déclaration où nous avons déclaré p_Area est déclaré comme objet de classe ClsArea.

Lorsqu'un objet est déclaré de cette manière, nous devrions normalement créer une instance de cet objet dans la procédure Class_Initialize() du code ci-dessus. Nous ne l'avons pas fait ici car nous prévoyons de le faire dans le programme utilisateur et de remplir ses propriétés avec les valeurs appropriées, puis de le transmettre à la classe ClsVolume2, avant la phase de calcul finale pour utiliser leurs valeurs.

Prenez note de la Set CArea() procédure. Son paramètre ByRef AreaValue est déclaré en tant qu'objet ClsArea. Il acceptera l'objet de classe ClsArea lorsqu'il est passé à Property Set CArea(ByRef AreaValue as ClsArea) , dans la variable d'objet AreaValue, et attribue à la p_Area Propriété de ClsVolume2 Objet.

Le Get CArea() La procédure de propriété renvoie l'objet au programme appelant.

Dans nos programmes précédents, nous avons écrit des procédures de propriété pour les éléments individuels (longueur, largeur, hauteur) d'un objet à assigner/retourner valeurs Vers/Depuis eux. Ici, la différence est que nous passons un objet entier en tant que paramètre à la procédure Set. Pour récupérer la valeur de propriété de cet objet (disons lblHeight), nous devons l'adresser en tant que CArea.dblLength . Le Get/Set Propriété Nom de la procédure CArea devient l'objet enfant de l'objet principal lorsqu'il est déclaré dans le programme principal et leurs procédures de propriété sont accessibles directement via l'adresse d'objet Vol.CArea.dblLength.

Un programme de test dans le module standard.

Nous allons écrire un petit programme dans le module standard pour tester notre nouvel objet de classe dérivé ClsVolume2.

Insérez un nouveau module standard dans votre projet. Copiez et collez le code suivant dans le module et enregistrez le code :

Public Sub SetNewVol2_1()
'Method 1/2
Dim Vol As New ClsVolume2

'ClsArea Object instantiated and passed to the
'Property Procedure Set CArea in ClsVolume2.

Set Vol.CArea = New ClsArea 'declare and instantiate the object in one statement

Stop

Vol.CArea.strDesc = "Bed Room"
Vol.CArea.dblLength = 90
Vol.CArea.dblWidth = 10

Vol.dblHeight = 10 'assign height to ClsVolume2

Stop

Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
Debug.Print Vol.CArea.strDesc, Vol.CArea.dblLength, Vol.CArea.dblWidth, Vol.CArea.Area, Vol.dblHeight, Vol.Volume

Set Vol.CArea = Nothing
Set Vol = Nothing

End Sub

Révision du code ligne par ligne.

Jetons un coup d'œil au code VBA ci-dessus. La première ligne instancie la classe ClsVolume2 avec le nom Vol. Après les deux prochaines lignes de commentaire, le Définir déclaration avec la Vol.CArea La procédure de propriété est appelée et passe le Nouveau ClsArea instancié Objet comme paramètre.

J'ai mis un Stop déclaration dans la ligne suivante pour donner une pause dans le programme pour voir comment l'objet est assigné à l'Ensemble Zone CA Objet. Comment? nous allons explorer cela dans une minute ?

Les quatre lignes suivantes attribuent des valeurs à l'objet ClsArea et à la propriété Height de l'objet ClsVolume2.

Le prochain arrêt crée une pause dans le programme afin que nous puissions inspecter la mémoire de la façon dont les valeurs sont conservées en mémoire.

La ligne suivante imprime les en-têtes dans la fenêtre de débogage pour les valeurs imprimées sur la ligne suivante.

La ligne suivante imprime les valeurs des propriétés d'objet de la mémoire dans la fenêtre de débogage.

Exécuter le code jusqu'à l'instruction d'arrêt suivante

Exécutons le code et inspectons la mémoire pour voir ce qui s'y passe à chaque étape, là où j'ai mis l'instruction Stop.

  1. Cliquez quelque part au milieu du code et appuyez sur F5 pour exécuter le code et suspendre le programme à la première instruction d'arrêt.
  2. Sélectionnez Fenêtre Locales à partir de la vue Menu pour ouvrir une nouvelle fenêtre sous la fenêtre de code, pour afficher comment les objets ClsArea et ClsVolume2, leurs propriétés et leurs procédures de propriétés membres sont conservés en mémoire. Un exemple d'image de la fenêtre Locales est donnée ci-dessous.

    La fenêtre Locales Afficher.



  3. Faites glisser les poignées de redimensionnement d'autres fenêtres vers le haut pour réduire leur hauteur afin de donner plus d'espace pour l'affichage des locaux Fenêtre. Mieux, fermez la fenêtre de débogage, pour le moment, utilisez Ctrl+G pour la ramener en cas de besoin plus tard.

    Nous pouvons avoir une vue graphique de tous les objets et de leurs propriétés dans les Locals Fenêtre. Le premier nom avec le symbole plus [+] indique le nom du module standard, à partir duquel notre programme s'exécute.

    Le symbole plus [+] suivant avec le nom Vol est l'objet instancié ClsVolume2 en mémoire.

  4. Cliquez sur les symboles [+] pour développer et afficher les détails.

    Vous trouverez le niveau suivant d'objets et de propriétés.

    La [+]CAzone indique que cet objet a le niveau suivant de propriétés et leurs valeurs.

    Le dblHeight Get property Procedure vient directement sous Vol Object.

    La [+]p_Zone est la propriété privée déclarée comme ClsArea Classe dans la classe ClsVolume2.

    La p_Height est également la propriété privée déclarée dans le ClsVolume2.

  5. Cliquez sur le plus [+] symboles pour développer les objets afin d'afficher leurs propriétés et leurs valeurs.

    L'expansion de [+]CArea nous donne la vue de l'objet ClsArea que nous avons passé à la procédure de propriété Set CArea().

    L'expansion de [+]p_Area donne la vue de la propriété ClsArea déclarée comme privée.

    Notez la p_Area La propriété privée, de l'objet de classe ClsVolume2, et tous ses éléments ne sont accessibles que via la CArea Propriété d'objet Get/Set Démarches vers l'extérieur.

    La deuxième colonne de la fenêtre Variables locales affichera les valeurs attribuées aux propriétés de l'objet et actuellement aucune valeur dans celles-ci.

    La troisième colonne affiche les noms de module de type de données ou de classe d'objets.

  6. Appuyez sur F5 pour poursuivre l'exécution du programme, jusqu'à ce qu'il soit mis en pause à la prochaine instruction Stop, pour attribuer des valeurs dans les propriétés de l'objet. Le programme s'arrêtera au prochain Stop déclaration. Vérifiez la fenêtre Locals pour le changement de valeurs.

À l'intérieur de la zone CA Objet les deux premières lignes avec les valeurs 90, 10 et la dernière strDesc avec la valeur "Bed Room" sont le Get Procédures de propriété. Les p_Desc, p_Length et p_width sont des valeurs attribuées via Set Procédures de propriété à p_Area Propriété de l'objet de classe ClsVolume2.

La p_Area L'objet de la classe ClsArea déclaré comme propriété privée de ClsVolume2 est vu avec son Get/Set Procédures de propriété et valeurs assignées.

Vérifiez le Type Colonne de [-]CArea et [-]p_Zone les deux objets sont dérivés de la classe de base ClsArea.

Utilisation différente des objets de classe ClsArea et ClsVolume2.

La semaine prochaine, nous essaierons une autre approche avec les deux mêmes objets. Si vous voulez l'essayer vous-même, voici l'indice pour savoir comment l'essayer vous-même.

  1. Instancier ClsVolume2 et ClsArea Class comme deux objets différents dans le programme de module standard.
  2. Attribuez des valeurs aux deux propriétés d'objet.
  3. Attribuez l'objet instancié ClsArea à la CArea Objet dans l'objet de classe ClsVolume2, avant d'imprimer les valeurs dans la fenêtre de débogage.

Dans cet exemple, nous pouvons obtenir le même résultat que dans l'exemple ci-dessus, sans répéter les procédures de propriété Get/Let comme nous l'avons fait dans le module de classe ClsVolume.

Les liens de toutes les pages sur ce sujet.

  1. Module de classe MS-Access et VBA
  2. Tableaux d'objets de classe MS-Access VBA
  3. Classe de base MS-Access et objets dérivés
  4. Classe de base VBA et objets dérivés-2
  5. Classe de base et variantes d'objets dérivés
  6. Ensemble d'enregistrements et module de classe MS-Access
  7. Accéder au module de classe et aux classes wrapper
  8. Transformation des fonctionnalités de la classe wrapper
  9. Ms-Access et les bases des objets de collection
  10. Module de classe MS-Access et objet de collection
  11. Enregistrements de table dans l'objet et le formulaire de collection
  12. Principes de base des objets de dictionnaire
  13. Principes de base des objets de dictionnaire-2
  14. Tri des clés d'objet et des éléments du dictionnaire
  15. Afficher les enregistrements du dictionnaire au formulaire
  16. Ajouter des objets de classe en tant qu'éléments de dictionnaire
  17. Ajouter des objets de classe en tant qu'éléments de dictionnaire
  18. Mettre à jour l'élément du dictionnaire d'objets de classe sur le formulaire