Access
 sql >> Baza danych >  >> RDS >> Access

Dostęp do modułu klas i klas opakowujących

Wprowadzenie.

Zdarza się, że konkretny moduł klasy musi zostać utworzony więcej niż jeden raz, aby użyć podobnego zestawu wartości dla określonej aplikacji.

Na przykład nasz moduł klasy ClsArea, który zaprojektowaliśmy do obliczania powierzchni dywanów w pokojach, jest kandydatem do podobnych zastosowań. Załóżmy, że chcielibyśmy dowiedzieć się, ile płytek podłogowych musimy ułożyć w pokoju, wtedy powinniśmy być w stanie wprowadzić również wartości długości i szerokości płytki, oprócz wartości wymiarów podłogi. Ponieważ zarówno Floor, jak i Tile mają podobne wartości Property jako dane wejściowe, możemy użyć dwóch instancji modułu ClsArea Class Module, jednej instancji dla obszaru FLOOR i drugiej instancji dla obszaru TILE. Floor-Area / Tile-Area podaje całkowitą liczbę płytek dla danego pomieszczenia.

Dwie instancje tego samego modułu klasy.

Możemy to zrobić, tworząc dwie różne instancje modułu klasy ClsArea w programie modułu standardowego, jeśli jest tylko jeden pokój.

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

Obsługa tablicy obiektów.

Ale co, jeśli musimy zastosować powyższą metodę dla szeregu pomieszczeń o różnych rozmiarach lub kolorach płytek? Odpowiedzią na to jest utworzenie nowego modułu klasy z dwoma wystąpieniami tego samego ClsArea Klasa, jedna instancja dla Piętro, a drugi dla kafelków Nieruchomości. Obie instancje są opakowane w nowy moduł klasy.

Zróbmy to.

  1. Otwórz swoją bazę danych i wyświetl okno edycji kodu (ALT+F11).
  2. Wybierz Moduł zajęć od Wstaw Menu.
  3. Zmień nazwę Wartość właściwości do ClsTiles .
  4. Skopiuj i wklej następujący kod VBA do modułu klasy ClsTiles i zapisz kod:
    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
    

    Obie instancje, pFLOOR i pTILES są zadeklarowane jako prywatne właściwości obiektu klasy ClsTiles.

    Class_Initialize() Podprogram tworzy instancję obu obiektów w pamięci, gdy ClsTiles Moduł klasy jest tworzony w programie użytkownika.

    Class_Terminate() podprogram usuwa obie instancje (pFLOOR i pTILES) z pamięci, gdy instancja ClsTiles Class Module jest ustawiona na Nothing w programie użytkownika.

    Pobierz i Ustaw Procedury właściwości umożliwiają pobieranie i przypisywanie wartości odpowiednio z i do instancji pFLOOR w obiekcie klasy ClsTiles.

    Następna procedura pobierania i ustawiania właściwości zezwala na te same operacje w instancji pTILES klasy ClsArea.

    Dodaliśmy nową funkcję NoOfTiles() w nowym module klasy, aby obliczyć liczbę płytek w oparciu o wymiary podłogi i płytki.

    Napiszmy Program i nauczmy się korzystać z wielu wystąpień tego samego obiektu klasy w nowym module klasy:ClsTiles.

  5. Skopiuj i wklej następujący kod VBA do modułu standardowego:
    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. Utrzymuj otwarte okno debugowania (CTRL+G), aby wydrukować dane testowe.
  7. Kliknij gdzieś w środku kodu VBA i naciśnij F5 Klucz do uruchomienia kodu. Wynik jest drukowany w oknie debugowania.

    Jeśli chcesz obliczyć wymagania dotyczące płytek kilku pomieszczeń lub pomieszczeń kilku pięter wieżowca, powinieneś uruchomić powyższy program kilka razy i zanotować wartości, co jest praktycznie bardzo trudne.

    Znajdowanie wymagań dotyczących płytek dla kilku pomieszczeń.

    Teraz napiszemy inny program, aby znaleźć wymagania dotyczące płytek kilku pomieszczeń, z tablicą ClsTiles Obiekty, wprowadzając wartości właściwości bezpośrednio z klawiatury.

  8. Skopiuj i wklej następujący kod VBA do modułu standardowego.
    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. Pozostaw otwarte okno debugowania, aby wydrukować tam dane wyjściowe.
  10. Uruchom kod jak poprzednio i wprowadź wartości wymiarów podłogi i płytek dla trzech pomieszczeń.

Jak widać z powyższego kodu, obie wartości wymiarów Room i Tile trafiają do tej samej instancji Class Object Array, obok siebie.

Powyższy program to demo, które działa tylko dla trzech zestawów wartości w For. . . Następna pętla. Można go modyfikować za pomocą pętli warunkowej, która działa wymaganą liczbę razy, aż kod warunkowego przerwania zakończy program.

Program można zmodyfikować, aby zapisać każdy zestaw wartości danych i wyniki obliczeń w tabeli do wykorzystania w przyszłości.

Klasa opakowania to kontener Klasa instancji innych klas, struktur danych lub kolekcji instancji innych obiektów. Tutaj użyliśmy go do przechowywania dwóch instancji tej samej klasy Object.

Lista wszystkich linków na ten temat.

  1. Moduł klasy MS-Access i VBA
  2. Tablice obiektów klasy MS-Access VBA
  3. Klasa bazowa MS-Access i obiekty pochodne
  4. Klasa podstawowa VBA i obiekty pochodne-2
  5. Warianty klasy bazowej i obiektów pochodnych
  6. Ms-Access Recordset and Class Module
  7. Dostęp do modułu klas i klas opakowujących
  8. Transformacja funkcjonalności klasy opakowującej
  9. Podstawy dostępu do MS i obiektów kolekcji
  10. Moduł klasy Ms-Access i obiekt kolekcji
  11. Rekordy tabeli w obiekcie i formularzu kolekcji
  12. Podstawy obiektów słownikowych
  13. Podstawy obiektów słownika-2
  14. Sortowanie kluczy obiektów i elementów słownika
  15. Wyświetl rekordy ze słownika do formularza
  16. Dodaj obiekty klasy jako elementy słownika
  17. Dodaj obiekty klasy jako elementy słownika
  18. Aktualizuj element słownika obiektów klasy w formularzu

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wybrać odpowiednią bazę danych dla swojej firmy

  2. Jak utworzyć raport z tabeli w programie Access 2016

  3. Obejście dla limitu kolumn Access 255

  4. Jak zmienić kolor tła formularza w programie Access 2016

  5. Jak naprawić uszkodzoną bazę danych dostępu