Access
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Access

Truy cập mô-đun lớp và các lớp gói

Giới thiệu.

Đôi khi, một Mô-đun lớp cụ thể cần được khởi tạo nhiều lần, để sử dụng một bộ giá trị tương tự cho một Ứng dụng cụ thể.

Ví dụ:Mô-đun Lớp ClsArea của chúng tôi, chúng tôi đã thiết kế để tính toán diện tích thảm của các Phòng là một ứng cử viên cho các ứng dụng tương tự. Giả sử rằng chúng ta muốn tìm xem chúng ta cần đặt bao nhiêu viên gạch lát sàn trong một căn phòng thì chúng ta cũng có thể nhập các giá trị Chiều dài và Chiều rộng của Ngói, bên cạnh các giá trị kích thước của Sàn. Vì cả Tầng và Ngói đều có các giá trị Thuộc tính tương tự như đầu vào, chúng ta có thể sử dụng hai phiên bản của Mô-đun lớp ClsArea, một phiên bản cho khu vực FLOOR và phiên bản thứ hai cho khu vực TILE. Diện tích sàn / Diện tích ô gạch cho biết tổng số ô lát cho một căn phòng cụ thể.

Hai phiên bản của cùng một mô-đun lớp.

Chúng tôi có thể thực hiện việc này bằng cách tạo hai phiên bản khác nhau của Mô-đun lớp ClsArea trong Chương trình mô-đun tiêu chuẩn nếu chỉ có một Phòng.

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

Xử lý một mảng đối tượng.

Tuy nhiên, nếu chúng ta cần áp dụng phương pháp trên cho một mảng gồm nhiều phòng với các kích thước hoặc màu sắc gạch lát khác nhau thì sao? Câu trả lời là tạo Mô-đun lớp mới với hai bản sao của ClsArea giống nhau Lớp, một ví dụ cho Tầng, và cái còn lại cho Ô Tính chất. Cả hai phiên bản đều được bao bọc trong Mô-đun lớp mới.

Hãy để chúng tôi làm điều đó.

  1. Mở Cơ sở dữ liệu của bạn và hiển thị Cửa sổ chỉnh sửa mã (ALT + F11).
  2. Chọn Mô-đun lớp từ Chèn Thực đơn.
  3. Thay đổi Tên Giá trị thuộc tính thành ClsTiles .
  4. Sao chép và dán Mã VBA sau vào Mô-đun lớp ClsTiles và lưu Mã:
    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
    

    Cả hai phiên bản, pFLOOR và pTILES đều được khai báo là Thuộc tính Riêng của Đối tượng Lớp ClsTiles.

    Class_Initialize () Chương trình con khởi tạo cả hai đối tượng trong bộ nhớ khi ClsTiles Mô-đun lớp được khởi tạo trong chương trình người dùng.

    Class_Termina () chương trình con xóa cả hai phiên bản (pFLOOR và pTILES) khỏi bộ nhớ khi phiên bản Mô-đun lớp ClsTiles được đặt thành Không có gì trong chương trình người dùng.

    Nhận Đặt Các thủ tục thuộc tính cho phép truy xuất và gán các giá trị, từ và đến cá thể pFLOOR tương ứng, trong Đối tượng lớp ClsTiles.

    Thủ tục Lấy và Đặt thuộc tính tiếp theo cho phép các hoạt động tương tự trong phiên bản pTILES của Lớp ClsArea.

    Chúng tôi đã thêm một chức năng mới NoOfTiles () trong Mô-đun lớp mới, để tính toán số lượng ô xếp, dựa trên Kích thước Tầng và Kích thước Ô.

    Hãy để chúng tôi viết một Chương trình và tìm hiểu cách sử dụng nhiều phiên bản của cùng một Đối tượng Lớp, trong Mô-đun Lớp mới:ClsTiles.

  5. Sao chép và dán Mã VBA sau vào Mô-đun chuẩn:
    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. Giữ Cửa sổ gỡ lỗi mở (CTRL + G) để in dữ liệu kiểm tra.
  7. Nhấp vào một nơi nào đó ở giữa Mã VBA và nhấn F5 Phím để chạy Mã. Kết quả được in trên Cửa sổ gỡ lỗi.

    Nếu bạn muốn tính toán các yêu cầu về gạch của một số phòng hoặc phòng của một số tầng của một tòa nhà cao tầng thì bạn nên chạy chương trình trên một số lần và ghi lại các giá trị, điều này thực tế là rất khó.

    Yêu cầu tìm ô xếp của một số phòng.

    Bây giờ, chúng ta hãy viết một chương trình khác để tìm các yêu cầu về Ngói của một số Phòng, với Mảng ClsTiles Đối tượng bằng cách nhập các giá trị Thuộc tính trực tiếp từ bàn phím.

  8. Sao chép và dán mã VBA sau vào một mô-đun chuẩn.
    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. Giữ Cửa sổ gỡ lỗi mở để in đầu ra ở đó.
  10. Chạy Mã như trước và nhập các giá trị cho kích thước Tầng và Ngói cho ba Phòng.

Như bạn có thể thấy từ đoạn mã trên rằng cả hai giá trị của kích thước Room và Tile đều đi vào cùng một cá thể Mảng đối tượng lớp, cạnh nhau.

Chương trình trên là bản demo chỉ chạy cho ba bộ giá trị trong For. . . Vòng lặp tiếp theo. Nó có thể được sửa đổi bằng một vòng lặp có điều kiện chạy trong một số lần bắt buộc cho đến khi mã ngắt có điều kiện kết thúc chương trình.

Chương trình có thể được sửa đổi để lưu từng bộ giá trị dữ liệu và kết quả tính toán trong một Bảng để tham khảo trong tương lai.

A Lớp gói Vùng chứa Lớp dành cho các thể hiện của Lớp, Cấu trúc dữ liệu khác hoặc tập hợp các thể hiện của các đối tượng khác. Ở đây, chúng tôi đã sử dụng nó để giữ hai phiên bản của cùng một lớp Đối tượng.

Danh sách Tất cả các Liên kết về Chủ đề này.

  1. Mô-đun lớp MS-Access và VBA
  2. Mảng đối tượng lớp VBA MS-Access
  3. Lớp cơ sở MS-Access và các đối tượng có nguồn gốc
  4. Lớp cơ sở VBA và các đối tượng có nguồn gốc-2
  5. Lớp cơ sở và các biến thể đối tượng có nguồn gốc
  6. Tập bản ghi Ms-Access và Mô-đun lớp
  7. Truy cập mô-đun lớp và các lớp gói
  8. Chuyển đổi chức năng lớp bao bọc
  9. Thông tin cơ bản về Ms-Access và Đối tượng Bộ sưu tập
  10. Mô-đun lớp Ms-Access và Đối tượng Bộ sưu tập
  11. Bản ghi Bảng trong Đối tượng và Biểu mẫu Bộ sưu tập
  12. Khái niệm cơ bản về đối tượng từ điển
  13. Khái niệm cơ bản về đối tượng từ điển-2
  14. Sắp xếp các mục và khóa đối tượng từ điển
  15. Hiển thị Bản ghi từ Từ điển sang Biểu mẫu
  16. Thêm các đối tượng lớp dưới dạng các mục từ điển
  17. Thêm các đối tượng lớp dưới dạng các mục từ điển
  18. Cập nhật Mục Từ điển Đối tượng Lớp trên Biểu mẫu

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn cơ sở dữ liệu là gì?

  2. 5 lợi ích được hưởng khi bạn nâng cấp cơ sở dữ liệu của mình

  3. Tôi có nên sử dụng Macro hoặc Mã VBA không?

  4. Gán hình ảnh cho các mục ListView Hướng dẫn-03

  5. Xử lý lỗi cấp độ sau đại học