Access
 sql >> Datenbank >  >> RDS >> Access

Basisklasse und abgeleitete Objektvarianten

Einführung.

Letzte Woche haben wir ein Beispiel ausprobiert, um ein Basisklassenobjekt durch das Set zu übergeben Eigenschaftsprozedur, um Teil des Objekts im Speicher zu werden. Das übergebene Objekt wird zu einem Erweiterungs- oder untergeordneten Objekt des Hauptobjekts im Speicher. In unserem früheren Programm erfolgte die Übergabe des untergeordneten Objekts an das Zielobjekt in der Instanziierungsphase unseres Testprogramms. Wir haben den übergebenen Objekteigenschaften im späteren Teil des Programms Werte zugewiesen. Das nächste Beispiel ist etwas anders.

Für diejenigen, die die früheren Artikel zum MS-Access-Klassenmodul durchgehen möchten, sind die Links unten angegeben:

  • MS-Access-Klassenmodul und VBA
  • MS-Access-VBA-Klassenobjekt-Arrays
  • MS-Access-Basisklasse und abgeleitete Objekte
  • VBA-Basisklasse und abgeleitetes Objekt-2

Diesmal werden wir beide Objekte (ClsArea – die Basisklasse, ClsVolume2 – die Zielklasse) separat in unserem Testprogramm öffnen. Weisen Sie den ClsArea-Eigenschaften der Basisklasse Werte zu, bevor Sie sie an das ClsVolume2-Objekt der Zielklasse übergeben. Denken Sie daran, dass die Volume2-Klasse nur eine eigene Eigenschaft hat, die p_Height Eigenschaft und ihre Methode Volume() benötigt die Länge und Breite Werte der Basisklasse ClsArea zur Berechnung des Volumens.

  1. Kopieren Sie den folgenden Beispieltestcode und fügen Sie ihn in ein Standardmodul ein.

    Das SetNewVol2_2-Verfahren.

    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
    

    Überprüfung des VBA-Codes.

    Im ersten Dim Anweisung, CA ist als ClsArea-Objekt und Vol definiert als ClsVolume2-Objekt. Die nächsten beiden Anweisungen instanziieren beide Objekte im Speicher.

    Die nächsten drei Anweisungen weisen den Eigenschaften von ClsArea Class Object.

    Werte zu

    Der Halt -Anweisung gibt eine Pause in der Codeausführung, damit wir die Object Property-Werte im Locals-Fenster überprüfen können.

    Das Set Vol.CArea =CA -Anweisung weist das ClsArea-Klassenobjekt CA als untergeordnetes Objekt dem Vol zu (ClsVolume2) Objekt.

    Im nächsten Schritt dblHeight Property of ClsVolume2 Class Object wird der Wert 10 zugewiesen.

    Die nächsten Anweisungen vor der Stop-Anweisung geben die Werte aus dem Speicher in das Debug-Fenster aus.

    Die nächsten beiden Sets Statements entfernt die Objekte aus dem Speicher, bevor das Programm beendet wird.

    Lokale Fenster anzeigen.

  2. Wählen Sie Lokales Fenster Option aus dem Ansicht-Menü.
  3. Klicken Sie irgendwo in die Mitte des Codes und drücken Sie F5 um den Code auszuführen, bis das Programm am Stopp pausiert Erklärung. Alternativ können Sie F8 drücken um den Code Schritt für Schritt auszuführen, um das Locals-Fenster bei jedem Schritt auf Änderungen zu überprüfen.
  4. Klicken Sie auf das [+] Symbol zum Erweitern und Anzeigen von Objekteigenschaften und Werten.
  5. Überprüfen Sie den CArea und p_Area Objektreferenz im Wert Spalte des Vol Objekt. Der Wert darin wird als Nichts angezeigt weil wir das CA-Objekt noch nicht an das Vol-Objekt übergeben haben.
  6. Wenn Sie den Inhalt des Locals-Fensters vollständig angesehen haben, führen Sie den Code bis zum nächsten Stopp aus Erklärung. Nun, die CArea Property Procedure und p_Area abrufen Objekt werden mit dem ClsArea-Klassenobjekt zugewiesen.

Wir werden ein weiteres Variantenbeispiel dieser beiden Klassen ClsArea und ClsVolume2 ausprobieren.

Neues Klassenmodul ClsVolume3.

1. Fügen Sie ein neues Klassenmodul ein und ändern Sie seinen Namenseigenschaftswert in ClsVolume3 .

2. Kopieren Sie den folgenden VBA-Code und fügen Sie ihn in das ClsVolume3-Klassenmodul ein:

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

Überprüfen Sie den Code von Anfang an:p_Height als Privateigentum deklariert. Die p_Area Als Public deklarierte Eigenschaft der Klasse ClsVolume3 ClsArea-Objekt. Das bedeutet p_Area erscheint als Eigenschaft der Klasse ClsVolume3 mit eigenen anzeigbaren Eigenschaften für direktes Get/Let Operationen im Benutzerprogramm im Standardmodul. Obwohl das ClsArea-Klassenobjekt als öffentliches Eigentum der ClsVolume3-Klasse deklariert wurde, sind seine Eigenschaften in der ClsArea-Klasse selbst gekapselt.

Überprüfen Sie die Class_Initialize() und Class_Terminate() Unterroutinen. Das ClsArea-Objekt wird im Class_Initialize()-Code instanziiert und entfernt das Objekt im Class_Terminate()-Code aus dem Speicher, wenn das Benutzerprogramm endet.

Das Testprogramm.

Der Beispiel-Test-VBA-Code ist unten angegeben.

Kopieren Sie den Code und fügen Sie ihn in das Standardmodul ein.

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

Zeigen Sie das Locals-Fenster an (Ansicht -> Locals-Fenster), falls es noch nicht geöffnet ist.

Klicken Sie irgendwo in die Mitte des Codes und drücken Sie F8 um den VBA-Code zeilenweise auszuführen und das lokale Fenster zu beobachten, um zu verfolgen, was bei jedem Schritt passiert.

Alle obigen Varianten der ClsVolume-Klasse wurden mit weniger Code geschrieben, mit Ausnahme des ersten Beispiels der ClsVolume-Klasse.

Arbeiten mit dem Recordset-Objekt.

Nächste Woche werden wir mit einem eingebauten Objekt DAO.Recordset arbeiten und erstellen Sie ein Klassenmodul zu:

  1. Ein Feld berechnen und aktualisieren
  2. Sortieren Sie die Daten,
  3. Drucken Sie die sortierten Daten in das Debug-Fenster,
  4. und Erstellen Sie einen Klon der Tabelle mit sortierten Daten.

Das ist jede Menge Action nächste Woche.

Liste aller Links zu diesem Thema.

  1. MS-Access-Klassenmodul und VBA
  2. MS-Access-VBA-Klassenobjekt-Arrays
  3. MS-Access-Basisklasse und abgeleitete Objekte
  4. VBA-Basisklasse und abgeleitete Objekte-2
  5. Basisklasse und abgeleitete Objektvarianten
  6. Ms-Access Recordset und Klassenmodul
  7. Zugriff auf Klassenmodul und Wrapper-Klassen
  8. Umwandlung der Wrapper-Klassenfunktionalität
  9. Grundlagen von MS-Access und Erfassungsobjekten
  10. MS-Access-Klassenmodul und Sammlungsobjekt
  11. Tabellensätze in Sammlungsobjekt und Formular
  12. Wörterbuchobjekt-Grundlagen
  13. Wörterbuchobjekt-Grundlagen-2
  14. Sortieren von Dictionary-Objektschlüsseln und -Elementen
  15. Datensätze aus Wörterbuch in Formular anzeigen
  16. Klassenobjekte als Wörterbucheinträge hinzufügen
  17. Klassenobjekt-Wörterbuchelement auf Formular aktualisieren