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

Classe de base et variantes d'objets dérivés

Présentation.

La semaine dernière, nous avons essayé un exemple pour passer un objet de classe de base, via le Set Procédure de propriété, pour faire partie de l'objet en mémoire. L'objet passé devient une extension ou un objet enfant de l'objet principal en mémoire. Dans notre programme précédent, le passage de l'objet enfant à l'objet cible était effectué lors de la phase d'instanciation de notre programme de test. Nous avons attribué des valeurs aux propriétés d'objet passées dans la dernière partie du programme. L'exemple suivant est légèrement différent.

Pour ceux qui souhaitent parcourir les articles précédents sur le module de classe MS-Access, les liens sont indiqué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 de base VBA et objet dérivé 2

Cette fois, nous allons ouvrir les deux objets (ClsArea - la classe de base, ClsVolume2 - la classe cible) séparément dans notre programme de test. Attribuez des valeurs dans les propriétés de la classe de base ClsArea, avant de les transmettre à l'objet cible de la classe ClsVolume2. N'oubliez pas que la classe Volume2 n'a qu'une seule propriété, la p_Height Propriété et sa méthode Volume() a besoin de la Longueur et Largeur Valeurs de la classe de base ClsArea pour calculer le volume.

  1. Copiez et collez l'exemple de code de test suivant dans un module standard.

    La procédure SetNewVol2_2.

    Public Sub SetNewVol2_2()
    'Method 2/2
    Dim CA As ClsArea
    Dim Vol As ClsVolume2
    
    Set CA = New ClsArea
    Set Vol = New ClsVolume2
    
    CA.strDesc = "Bed Room"
    CA.dblLength = 90
    CA.dblWidth = 10
    Stop
    
    
    'Here ClsArea class Object CA is passed to the 
    ‘Property procedure Set CArea of ClsVolume2 object Vol
    Set Vol.CArea = CA 'Pass ClsArea obj to ClsVolume2
    
    Vol.dblHeight = 10 'assign height to ClsVolume2
    
    
    Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
    With Vol.CArea
      Debug.Print .strDesc, .dblLength, .dblWidth, .Area(), Vol.dblHeight, Vol.Volume()
    End With
    Stop
    
    Set CA = Nothing
    Set Vol = Nothing
    
    End Sub
    

    Vérification du code VBA.

    Dans le premier Dim déclaration, CA est défini comme ClsArea Object et Vol en tant qu'objet ClsVolume2. Les deux instructions suivantes instancient les deux objets en mémoire.

    Les trois instructions suivantes attribuent des valeurs aux propriétés de l'objet de classe ClsArea.

    L'arrêt L'instruction donne une pause dans l'exécution du code afin que nous puissions vérifier les valeurs de la propriété de l'objet dans la fenêtre Locals.

    Le Set Vol.CArea =CA L'instruction attribue l'autorité de certification d'objet de classe ClsArea, en tant qu'objet enfant dans le Vol (ClsVolume2) Objet.

    À l'étape suivante, dblHeight La propriété de ClsVolume2 Class Object est affectée de la valeur 10.

    Les instructions suivantes avant l'instruction Stop impriment les valeurs de la mémoire dans la fenêtre de débogage.

    Les deux prochains Set Les instructions suppriment les objets de la mémoire avant de terminer le programme.

    Afficher la fenêtre Locals.

  2. Sélectionnez Fenêtre Locales Option du menu Affichage.
  3. Cliquez quelque part au milieu du code et appuyez sur F5 pour exécuter le code jusqu'à ce que le programme s'arrête au Stop déclaration. Vous pouvez également appuyer sur F8 pour exécuter le code une étape à la fois pour inspecter la fenêtre Locals pour les modifications, à chaque étape.
  4. Cliquez sur [+] Symbole pour développer et afficher à la fois les propriétés et les valeurs des objets.
  5. Vérifiez la zone CA et p_Area Référence d'objet dans la Valeur colonne du Vol Objet. La valeur qui s'y trouve s'affiche comme Rien car nous n'avons pas encore transmis l'objet CA à l'objet Vol.
  6. Si vous avez terminé de visualiser le contenu de la fenêtre Locals, exécutez le code jusqu'au prochain Stop déclaration. Maintenant, la CArea Obtenir la procédure de propriété et p_Area Les objets sont assignés avec l'objet de classe ClsArea.

Nous allons essayer un autre exemple de variante de ces deux classes ClsArea et ClsVolume2.

Nouveau module de classe ClsVolume3.

1. Insérez un nouveau module de classe et changez son nom Valeur de propriété en ClsVolume3 .

2. Copiez et collez le code VBA suivant dans le module de classe ClsVolume3 :

Option Compare Database
Option Explicit
'Method three 
Private p_Height As Double
Public 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 * Me.dblHeight
End Function

Private Sub Class_Initialize()
    Set p_Area = New ClsArea
End Sub

Private Sub Class_Terminate()
    Set p_Area = Nothing
End Sub

Vérifiez le code depuis le début :p_Height déclaré propriété privée. La p_Area Propriété de la classe ClsVolume3 déclarée comme Public Objet ClsArea. Cela signifie p_Area apparaîtra comme une propriété de la classe ClsVolume3 avec ses propres propriétés affichables pour un Get/Let direct opérations dans le programme utilisateur du module standard. Même si l'objet de classe ClsArea a été déclaré comme propriété publique de la classe ClsVolume3, ses propriétés sont encapsulées dans la classe ClsArea elle-même.

Vérifiez la Class_Initialize() et Class_Terminate() Sous-routines. L'objet ClsArea est instancié dans le code Class_Initialize() et supprime l'objet de la mémoire dans le code Class_Terminate(), lorsque le programme utilisateur se termine.

Le programme de test.

L'exemple de code VBA de test est donné ci-dessous.

Copiez et collez le code dans le module standard.

Public Sub SNewVol3()
'Here ClsArea class is declared as a Public Property of ClsVolume3
Dim volm As ClsVolume3

Set volm = New ClsVolume3

volm.p_Area.strDesc = "Bed Room"
volm.p_Area.dblLength = 15 'assign length
volm.p_Area.dblWidth = 10 'assign width in clsArea
volm.dblHeight = 10 'assign height to ClsVolume2

Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
With volm.p_Area
   Debug.Print .strDesc, .dblLength, .dblWidth, .Area, volm.dblHeight, volm.Volume
End With
Set volm = Nothing

End Sub

Affichez la fenêtre Locals (Affichage -> Fenêtre Locals), si elle n'est pas déjà ouverte.

Cliquez quelque part au milieu du code et appuyez sur F8 pour exécuter le code VBA une ligne à la fois et regarder la fenêtre locale pour suivre ce qui se passe à chaque étape.

Toutes les variantes ci-dessus de la classe ClsVolume ont été écrites avec moins de code, à l'exception du premier exemple de la classe ClsVolume.

Travailler avec l'objet Recordset.

La semaine prochaine, nous travaillerons avec un objet intégré DAO.Recordset et créez un module de classe à :

  1. Calculer et mettre à jour un Champ,
  2. Trier les données,
  3. Imprimer les données triées dans la fenêtre de débogage,
  4. et créer un clone de la table avec des données triées.

C'est beaucoup d'action la semaine prochaine.

Liste de tous les liens 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. Mettre à jour l'élément du dictionnaire d'objets de classe sur le formulaire