sql >> Database teknologi >  >> RDS >> Access

Adgang til klassemodul og indpakningsklasser

Introduktion.

Der er tidspunkter, hvor et bestemt klassemodul skal instansieres mere end én gang for at bruge et lignende sæt værdier til en bestemt applikation.

For eksempel vores ClsArea Class Module, vi har designet til at beregne tæppearealet i Rooms er en kandidat til lignende applikationer. Antag, at vi gerne vil finde ud af, hvor mange gulvfliser vi skal lægge i et rum, så burde vi være i stand til at indtaste længde- og breddeværdierne for fliser også, udover dimensionsværdierne for gulv. Da både Floor og Tile har lignende egenskabsværdier som input, kan vi bruge to forekomster af ClsArea Class Module, en forekomst for FLOOR-området og den anden forekomst for TILE-området. Floor-Area / Tile-Area angiver det samlede antal fliser for et bestemt rum.

To forekomster af det samme klassemodul.

Vi kan gøre dette ved at oprette to forskellige forekomster af ClsArea-klassemodulet i standardmodulprogrammet, hvis der kun er ét rum.

Public Sub FloorTiles()
Dim FLOOR As ClsArea
Dim TILES As ClsArea
Dim flrArea As Double, tilearea As Double
Dim lngTiles As Long

Set FLOOR = New ClsArea
Set TILES = New ClsArea

FLOOR.strDesc = "Bed Room1"
FLOOR.dblLength = 25
FLOOR.dblWidth = 15
flrArea = FLOOR.Area()

TILES.strDesc = "Off-White"
TILES.dblLength = 2.5
TILES.dblWidth = 1.25
tilearea = TILES.Area()

lngTiles = flrArea / tilearea

Debug.Print FLOOR.strDesc & " Required Tiles: " & lngTiles & " Numbers - Color: " & TILES.strDesc

Set FLOOR = Nothing
Set TILES = Nothing

End Sub

Håndtering af en række objekter.

Men hvad nu hvis vi skal anvende ovenstående metode til en række af flere rum med forskellige størrelser eller farver af fliser? Svaret på det er at oprette et nyt klassemodul med to forekomster af det samme ClsArea Klasse, én forekomst for Etage, og den anden til Fliser Ejendomme. Begge forekomster er pakket ind i et nyt klassemodul.

Lad os gøre det.

  1. Åbn din database, og vis koderedigeringsvinduet (ALT+F11).
  2. Vælg Klassemodulet fra Indsæt Menu.
  3. Skift navnet Ejendomsværdi til ClsTiles .
  4. Kopiér og indsæt følgende VBA-kode i ClsTiles-klassemodulet og gem koden:
    Option Compare Database
    Option Explicit
    
    Private pFLOOR As ClsArea
    Private pTILES As ClsArea
    
    Private Sub Class_Initialize()
        Set pFLOOR = New ClsArea
        Set pTILES = New ClsArea
    End Sub
    
    Private Sub Class_Terminate()
        Set pFLOOR = Nothing
        Set pTILES = Nothing
    End Sub
    
    Public Property Get Floor() As ClsArea
     Set Floor = pFLOOR
    End Property
    
    Public Property Set Floor(ByRef NewValue As ClsArea)
      Set pFLOOR = NewValue
    End Property
    
    Public Property Get Tiles() As ClsArea
      Set Tiles = pTILES
    End Property
    
    Public Property Set Tiles(ByRef NewValue As ClsArea)
      Set pTILES = NewValue
    End Property
    
    Public Function NoOfTiles() As Long
       NoOfTiles = pFLOOR.Area() / pTILES.Area()
    End Function
    

    Begge forekomster, pFLOOR og pTILES er erklæret som private egenskaber for ClsTiles klasseobjekt.

    Class_Initialize() Subrutine instansierer begge objekter i hukommelsen, når ClsTiles Klassemodulet instansieres i brugerprogrammet.

    Class_Terminate() underrutinen fjerner begge forekomster (pFLOOR og pTILES) fra hukommelsen, når ClsTiles Class Module-forekomsten er indstillet til Intet i brugerprogrammet.

    Hent og Indstil Egenskabsprocedurer tillader hentning og tildeling af værdier, henholdsvis fra og til pFLOOR-forekomsten, i ClsTiles-klasseobjektet.

    Den næste Get and Set Property Procedure tillader de samme operationer i pTILES-forekomsten af ​​ClsArea-klassen.

    Vi har tilføjet en ny funktion NoOfTiles() i det nye klassemodul for at beregne antallet af fliser baseret på gulvareal og flisedimension.

    Lad os skrive et program og lære brugen af ​​flere forekomster af det samme klasseobjekt i et nyt klassemodul:ClsTiles.

  5. Kopiér og indsæt følgende VBA-kode i et standardmodul:
    Public Sub TilesCalc()
    Dim FTiles As ClsTiles
    Dim TotalTiles As Long
    
    Set FTiles = New ClsTiles
    
    FTiles.Floor.strDesc = "Warehouse"
    FTiles.Floor.dblLength = 100
    FTiles.Floor.dblWidth = 50
    
    FTiles.Tiles.dblLength = 2.5
    FTiles.Tiles.dblWidth = 1.75
    
    TotalTiles = FTiles.NoOfTiles()
    
    Debug.Print "Site Name", "Floor Area", "Tile Area", "No. of Tiles"
    Debug.Print FTiles.Floor.strDesc, FTiles.Floor.Area, FTiles.Tiles.Area, TotalTiles
    
    End Sub
     
  6. Hold fejlretningsvinduet åbent (CTRL+G) for at udskrive testdataene.
  7. Klik et sted i midten af ​​VBA-koden, og tryk på F5 Nøgle til at køre koden. Resultatet udskrives på fejlfindingsvinduet.

    Hvis du vil beregne flisekravene for flere rum eller rum i flere etager i et højhus, bør du køre ovenstående program et antal gange og notere værdierne, hvilket praktisk talt er meget svært.

    Sådan finder du krav om fliser i flere rum.

    Lad os nu skrive et andet program for at finde flisekravene for flere rum, med en række ClsTiles Objekter ved at indtaste egenskabsværdierne direkte fra tastaturet.

  8. Kopiér og indsæt følgende VBA-kode i et standardmodul.
    Public Sub TilesCalc2()
    Dim tmpFT As ClsTiles
    Dim FTiles() As ClsTiles
    Dim j As Long, L As Long, H As Long
    
    For j = 1 To 3
       Set tmpFT = New ClsTiles
          'Floor dimension
        With tmpFT.Floor
          .strDesc = InputBox(Str(j) & ") Floor Desc", , 0)
          .dblLength = InputBox(Str(j) & ") Floor Length", , 0)
          .dblWidth = InputBox(Str(j) & ") Floor Width", , 0)
        End With
        
        'Tile Dimension
        With tmpFT.Tiles
          .strDesc = InputBox(Str(j) & ") Tiles Desc", , 0)
          .dblLength = InputBox(Str(j) & ") Tile Length", , 0)
          .dblWidth = InputBox(Str(j) & ") Tile Width", , 0)
        End With
       
       ReDim Preserve FTiles(1 To j) As ClsTiles
       Set FTiles(j) = tmpFT
       
       Set tmpFT = Nothing
    Next
    
    'Take Printout
    L = LBound(FTiles)
    H = UBound(FTiles)
    
    Debug.Print "FLOOR", "Floor Area", "TILES", "Tile Area", "Total Tiles"
    For j = L To H
      With FTiles(j)
       Debug.Print .Floor.strDesc, .Floor.Area(), .Tiles.strDesc, .Tiles.Area(), .NoOfTiles
      End With
    Next
       
    'Remove all objects from memory
    For j = L To H
       Set FTiles(j) = Nothing
    Next
      
    End Sub
    
    
  9. Hold fejlfindingsvinduet åbent for at udskrive output der.
  10. Kør koden som før, og indtast værdier for gulv- og flisedimensioner for tre rum.

Som du kan se fra ovenstående kode, går både værdier af rum- og flisedimensioner ind i den samme Class Object Array-instans, side om side.

Ovenstående program er en demo, der kun kører for tre sæt værdier i For. . . Næste sløjfe. Den kan modificeres med en betinget løkke, der kører et krævet antal gange, indtil en betinget pausekode afslutter programmet.

Programmet kan modificeres for at gemme hvert sæt dataværdier og beregningsresultater i en tabel til fremtidig reference.

En Wrapper-klasse er en Container Klasse for forekomster af andre klasser, datastrukturer eller forekomstsamling af andre objekter. Her har vi brugt det til at holde to forekomster af den samme klasse Object.

Liste over alle links om dette emne.

  1. MS-Access Class Module og VBA
  2. MS-Access VBA Class Object Arrays
  3. MS-Access Basisklasse og afledte objekter
  4. VBA-basisklasse og afledte objekter-2
  5. Basisklasse og afledte objektvarianter
  6. Ms-Access Recordset og klassemodul
  7. Adgang til klassemodul- og indpakningsklasser
  8. Wrapper Class Funktionalitet Transformation
  9. Grundlæggende om Ms-Access og Collection Object
  10. Ms-Access klassemodul og samlingsobjekt
  11. Tabelposter i samlingsobjekt og -form
  12. Grundlæggende om ordbogsobjekt
  13. Dictionary Object Basics-2
  14. Sortering af ordbogsobjektnøgler og -elementer
  15. Vis poster fra ordbog til formular
  16. Tilføj klasseobjekter som ordbogselementer
  17. Tilføj klasseobjekter som ordbogselementer
  18. Opdater Class Object Dictionary Element på formular

  1. MariaDB i Tokyo

  2. Sådan indstiller du statuslinjefarve i SSMS til forskellige SQL Server-forekomster - SQL Server / TSQL vejledning del 6

  3. Om V-formatelementet i Oracle

  4. SQL BESTIL EFTER