sql >> Database >  >> RDS >> Access

Basisklasse en afgeleide objectvarianten

Inleiding.

Vorige week hebben we een voorbeeld geprobeerd om een ​​basisklasse-object door te geven, via de Set Eigenschap Procedure, om onderdeel te worden van het Object in het geheugen. Het doorgegeven object wordt een extensie of onderliggend object van het hoofdobject in het geheugen. In ons eerdere programma werd het doorgeven van het onderliggende object aan het doelobject gedaan in de instantiërende fase van ons testprogramma. We hebben waarden toegewezen aan de doorgegeven objecteigenschappen in het latere deel van het programma. Het volgende voorbeeld is iets anders.

Voor degenen die de eerdere artikelen over de MS-Access Class-module willen doornemen, staan ​​de links hieronder:

  • MS-Access Class-module en VBA
  • MS-Access VBA Class Object Arrays
  • MS-Access-basisklasse en afgeleide objecten
  • VBA-basisklasse en afgeleid object-2

Deze keer zullen we beide Objecten (ClsArea – de basisklasse, ClsVolume2 – de doelklasse) afzonderlijk openen in ons testprogramma. Wijs waarden toe aan de Base Class ClsArea Properties, voordat u ze doorgeeft aan het doelklasse ClsVolume2-object. Onthoud dat de Volume2-klasse slechts één eigen eigenschap heeft, de p_Height Eigenschap en zijn methode Volume() heeft de Lengte . nodig en Breedte Waarden van de basisklasse ClsArea om het volume te berekenen.

  1. Kopieer en plak de volgende voorbeeldtestcode in een standaardmodule.

    De SetNewVol2_2-procedure.

    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
    

    VBA-codebeoordeling.

    In de eerste Dim verklaring, CA is gedefinieerd als ClsArea Object en Vol als ClsVolume2-object. De volgende twee instructies instantiëren beide objecten in het geheugen.

    De volgende drie instructies wijzen waarden toe aan de eigenschappen van ClsArea Class Object.

    De Stop statement geeft een pauze in de uitvoering van de Code zodat we de Object Property-waarden in het Locals-venster kunnen verifiëren.

    De Set Vol.CArea =CA instructie wijst de ClsArea Class Object CA toe als een onderliggend object in de Vol (ClsVolume2) Object.

    In de volgende stap dblHeight Eigenschap van ClsVolume2 Class Object is toegewezen met de waarde 10.

    De volgende instructies voor de Stop-instructie printen de waarden uit het geheugen naar het Debug-venster.

    De volgende twee Set Statements verwijdert de objecten uit het geheugen voordat het programma wordt beëindigd.

    Geef het Locals-venster weer.

  2. Selecteer Locals-venster Optie in het menu Beeld.
  3. Klik ergens in het midden van de code en druk op F5 om de code uit te voeren totdat het programma pauzeert bij de Stop uitspraak. U kunt ook op F8 . drukken om de code stap voor stap uit te voeren om het Locals-venster bij elke stap op wijzigingen te controleren.
  4. Klik op de [+] Symbool om uit te vouwen en zowel Objecteigenschappen als waarden weer te geven.
  5. Controleer de CArea en p_Area Objectverwijzing in de Waarde kolom van de Vol Voorwerp. De waarde daarin wordt weergegeven als Niets omdat we het CA-object nog niet hebben doorgegeven aan het Vol-object.
  6. Als u klaar bent met het bekijken van de inhoud van het Locals-venster, voert u de code uit tot de volgende Stop uitspraak. Nu, de CArea Verkrijg Property Procedure en p_Area Object wordt toegewezen aan het ClsArea Class Object.

We zullen een ander variantvoorbeeld van beide klassen ClsArea en ClsVolume2 proberen.

Nieuwe klasmodule ClsVolume3.

1. Voeg een nieuwe klassemodule in en wijzig de naam Eigenschapswaarde in ClsVolume3 .

2. Kopieer en plak de volgende VBA-code in de ClsVolume3-klassenmodule:

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

Controleer de code vanaf het begin:p_Height verklaard als privé-eigendom. De p_Area Eigendom van ClsVolume3-klasse verklaard als Openbaar ClsArea-object. Dat betekent p_Area zal verschijnen als een eigenschap van de ClsVolume3-klasse met zijn eigen weer te geven eigenschappen voor directe Get/Let bewerkingen in het gebruikersprogramma in de standaardmodule. Hoewel ClsArea Class Object is gedeclareerd als openbaar eigendom van ClsVolume3-klasse, zijn de eigenschappen ervan ingekapseld in ClsArea Class zelf.

Controleer de Class_Initialize() en Class_Terminate() Subroutines. Het ClsArea-object wordt geïnstantieerd in de Class_Initialize()-code en verwijdert het object uit het geheugen in de Class_Terminate()-code, wanneer het gebruikersprogramma eindigt.

Het testprogramma.

De voorbeeldtest VBA-code wordt hieronder gegeven.

Kopieer en plak de code in de standaardmodule.

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

Geef het Locals-venster weer (Bekijken -> Locals-venster), als het nog niet open is.

Klik ergens in het midden van de code en druk op F8 om de VBA-code regel voor regel uit te voeren en het lokale venster te bekijken om bij te houden wat er bij elke stap gebeurt.

Alle bovenstaande varianten van de ClsVolume-klasse zijn geschreven met minder code, behalve het eerste voorbeeld van de ClsVolume-klasse.

Werken met het Recordset-object.

Volgende week gaan we aan de slag met een ingebouwd Object DAO.Recordset en bouw een klasmodule naar:

  1. Een veld berekenen en bijwerken,
  2. De gegevens sorteren,
  3. Druk de gesorteerde gegevens af in het foutopsporingsvenster,
  4. en maak een kloon van de tabel met gesorteerde gegevens.

Dat is veel actie volgende week.

Lijst met alle links over dit onderwerp.

  1. MS-Access Class-module en VBA
  2. MS-Access VBA Class Object Arrays
  3. MS-Access-basisklasse en afgeleide objecten
  4. VBA-basisklasse en afgeleide objecten-2
  5. Basisklasse en afgeleide objectvarianten
  6. Ms-Access Recordset en Class Module
  7. Toegang tot klassenmodule en wrapperklassen
  8. Transformatie van functionaliteit van wrapperklasse
  9. Basisprincipes voor MS-Access en verzamelingsobjecten
  10. Ms-Access Class-module en verzamelobject
  11. Tabelrecords in verzamelobject en formulier
  12. Basisprincipes van woordenboekobjecten
  13. Basisprincipes van woordenboekobjecten-2
  14. Woordenboek-objectsleutels en items sorteren
  15. Records van woordenboek naar formulier weergeven
  16. Klasobjecten toevoegen als woordenboekitems
  17. Klasobject woordenboekitem op formulier bijwerken


  1. Hoe postgresql op ubuntu grondig te zuiveren en opnieuw te installeren?

  2. sp_executesql is traag met parameters

  3. SQL Server - stop of verbreek de uitvoering van een SQL-script

  4. SQLite DATEADD() Equivalent