sql >> Databáze >  >> RDS >> Access

Přístup k modulu třídy a třídám Wrapper

Úvod.

Existují případy, kdy je potřeba konkrétní modul třídy vytvořit více než jednou, aby bylo možné použít podobnou sadu hodnot pro konkrétní aplikaci.

Například náš modul třídy ClsArea, který jsme navrhli pro výpočet plochy koberce místností, je kandidátem pro podobné aplikace. Předpokládejme, že bychom chtěli zjistit, kolik dlaždic potřebujeme položit v místnosti, pak bychom měli být schopni zadat také hodnoty délky a šířky dlaždice kromě hodnot rozměrů podlahy. Protože podlaha i dlaždice mají jako vstup podobné hodnoty vlastností, můžeme použít dvě instance modulu třídy ClsArea, jednu instanci pro oblast PODLAHA a druhou instanci pro oblast TILE. Plocha podlahy / Plocha dlaždic udává celkový počet dlaždic pro konkrétní místnost.

Dvě instance stejného modulu třídy.

Můžeme to udělat vytvořením dvou různých instancí modulu třídy ClsArea v programu standardního modulu, pokud existuje pouze jedna místnost.

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

Zacházení s polem objektů.

Ale co když potřebujeme použít výše uvedenou metodu pro řadu několika místností s různými velikostmi nebo barvami dlaždic? Odpovědí na to je vytvoření nového modulu třídy se dvěma instancemi stejné ClsArea Třída, jedna instance pro Podlaží, a druhý pro Dlaždice Vlastnosti. Obě instance jsou zabaleny do nového modulu třídy.

Pojďme to udělat.

  1. Otevřete databázi a zobrazte okno pro úpravu kódu (ALT+F11).
  2. Vyberte Modul třídy z Vložit Menu.
  3. Změňte Název Hodnota vlastnosti na ClsTiles .
  4. Zkopírujte a vložte následující kód VBA do modulu třídy ClsTiles a uložte kód:
    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
    

    Obě instance, pFLOOR a pTILES jsou deklarovány jako soukromé vlastnosti objektu třídy ClsTiles.

    Funkce Class_Initialize() Podprogram vytvoří instanci obou objektů v paměti při ClsTiles Modul třídy je vytvořen v uživatelském programu.

    Funkce Class_Terminate() podprogram odstraní z paměti obě instance (pFLOOR a pTILES), když je instance modulu třídy ClsTiles v uživatelském programu nastavena na hodnotu Nothing.

    Možnost Získat a Nastavit Procedury vlastností umožňují načítání a přiřazování hodnot z instance pFLOOR a do instance v daném pořadí v objektu třídy ClsTiles.

    Další procedura získání a nastavení vlastností umožňuje stejné operace v instanci pTILES třídy ClsArea.

    Přidali jsme novou funkci NoOfTiles() v novém modulu třídy k výpočtu počtu dlaždic na základě rozměru podlahové plochy a dlaždic.

    Pojďme napsat program a naučit se používat více instancí stejného objektu třídy v novém modulu třídy:ClsTiles.

  5. Zkopírujte a vložte následující kód VBA do standardního modulu:
    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. Chcete-li vytisknout testovací data, nechejte okno ladění otevřené (CTRL+G).
  7. Klikněte někam doprostřed kódu VBA a stiskněte F5 Klíč ke spuštění kódu. Výsledek se vytiskne v okně ladění.

    Pokud chcete vypočítat požadavky na dlaždice pro několik místností nebo místností několika podlaží výškové budovy, měli byste výše uvedený program několikrát spustit a poznamenat si hodnoty, což je prakticky velmi obtížné.

    Nalezení požadavku na dlaždice pro několik místností.

    Nyní napíšeme další program pro nalezení požadavků na dlaždice pro několik místností s polem ClsTiles Objekty zadáním hodnot vlastností přímo z klávesnice.

  8. Zkopírujte a vložte následující kód VBA do standardního modulu.
    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. Ponechejte otevřené okno ladění, aby se výstup vytiskl.
  10. Spusťte kód jako dříve a zadejte hodnoty pro rozměry podlahy a dlaždic pro tři místnosti.

Jak můžete vidět z výše uvedeného kódu, obě hodnoty dimenzí Místnost a Dlaždice jdou do stejné instance Class Object Array, vedle sebe.

Výše uvedený program je demo, které běží pouze pro tři sady hodnot v rámci For. . . Další smyčka. Lze jej upravit pomocí podmíněné smyčky, která běží požadovaný počet opakování, dokud kód podmíněného přerušení neukončí program.

Program lze upravit tak, aby se každá sada hodnot dat a výsledky výpočtů uložila do tabulky pro budoucí použití.

Třída Wrapper je Kontejner Třída pro instance jiných tříd, datových struktur nebo kolekce instancí jiných objektů. Zde jsme jej použili k uložení dvou instancí stejné třídy Object.

Seznam všech odkazů na toto téma.

  1. MS-Access Class Module a VBA
  2. Pole objektů třídy VBA MS Access
  3. Základní třída MS-Access a odvozené objekty
  4. Základní třída VBA a odvozené objekty-2
  5. Základní třída a varianty odvozených objektů
  6. Sada záznamů a modul třídy Ms-Access
  7. Přístup k modulu třídy a třídám Wrapper
  8. Transformace funkčnosti třídy Wrapper
  9. Základy přístupu a shromažďovacích objektů
  10. Modul třídy Ms-Access a objekt kolekce
  11. Záznamy tabulek v objektu a formuláři kolekce
  12. Základy objektů slovníku
  13. Základy objektů slovníku-2
  14. Řazení klíčů a položek objektů slovníku
  15. Zobrazení záznamů ze slovníku do formuláře
  16. Přidat objekty třídy jako položky slovníku
  17. Přidat objekty třídy jako položky slovníku
  18. Aktualizovat položku slovníku objektů třídy ve formuláři

  1. mysql dvousloupcový primární klíč s automatickým přírůstkem

  2. ORA-01264:Nelze vytvořit název souboru protokolu

  3. Parametr Sniffing Primer

  4. CLR Strict Security na SQL Server 2017