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

Chuyển đổi chức năng lớp bọc

Giới thiệu.

Tuần trước, chúng tôi đã tạo ClsTiles lớp Wrapper mới, sử dụng Lớp ClsArea hai lần trong Mô-đun lớp mới, một bản cho Tầng giá trị thứ nguyên và trường hợp thứ hai cho Ngói sàn kích thước, để tính toán số lượng Gạch cho căn phòng.

Trong Mô-đun lớp gói mới, chúng tôi sẽ chuyển đổi Lớp khối lượng (ClsVolume2) thành Lớp bán hàng (ClsSales). Với một số thay đổi về mỹ phẩm, chúng tôi sẽ nâng cấp toàn diện cho nó trong Lớp bọc, che giấu danh tính thực sự của nó là Lớp tính khối lượng và sử dụng nó để tính Giá bán của sản phẩm có chiết khấu.

Đúng vậy, Lớp ClsVolume2 của chúng tôi có tất cả các thuộc tính cần thiết để nhập các giá trị dữ liệu Bán hàng được yêu cầu như Mô tả, Số lượng, Đơn giá và Phần trăm chiết khấu, sẽ đi vào Thuộc tính Lớp Khối lượng strDesc, dblLength, dblWidth, dblHeight tương ứng.

Chúng ta không nên quên rằng Lớp ClsVolume2 là một Lớp có nguồn gốc , được xây dựng bằng cách sử dụng ClsArea làm Lớp cơ sở.

Đã thăm lại lớp ClsVolume2.

Tuy nhiên, trước tiên, Mã VBA của Mô-đun lớp ClsVolume2 (Lớp cơ sở cho Mô-đun lớp ClsSales mới của chúng tôi) được sao chép bên dưới để tham khảo:

Option Compare Database
Option Explicit

Private p_Height As Double
Private 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 = CArea.dblLength * CArea.dblWidth * Me.dblHeight
End Function

Public Property Get CArea() As ClsArea
   Set CArea = p_Area
End Property

Public Property Set CArea(ByRef AreaValue As ClsArea)
  Set p_Area = AreaValue
End Property

Private Sub Class_Initialize()
Set p_Area = New ClsArea
End Sub

Private Sub Class_Terminate()
Set p_Area = Nothing
End Sub

Sự cố duy nhất ngăn chúng tôi sử dụng ClsVolume2 Class trực tiếp cho Bán hàng nhập dữ liệu là các tên của thuộc tính Thủ tục thuộc tính dblLength, dblWidth, dblHeight không khớp với các giá trị thuộc tính Bán hàng Số lượng, Giá đơn vị, Phần trăm chiết khấu. Các kiểu dữ liệu số của Lớp ClsVolume2 đều là số chính xác kép và chúng phù hợp với Lớp Bán hàng của chúng tôi và có thể được sử dụng mà không cần thay đổi kiểu dữ liệu. Các hàm công cộng Tên khu vực () và Khối lượng () cũng không phù hợp nhưng công thức tính toán của chúng có thể được sử dụng để tính Doanh số mà không cần thay đổi.

a) Diện tích =dblLength * dblWidth phù hợp với TotalPrice =Quantity * UnitPrice

b) Khối lượng =Diện tích * dbl Chiều cao phù hợp với Chiết khấu Số tiền =Tổng Giá * Phần trăm chiết khấu

Ở đây, chúng tôi có hai lựa chọn để sử dụng ClsVolume2 Class làm ClsSales Class.

  1. Cách dễ nhất là tạo một bản sao của Lớp ClsVolume2 và lưu nó trong một Mô-đun lớp mới với tên ClsSales. Thực hiện các thay đổi thích hợp đối với các tên thuộc tính và chức năng công khai phù hợp với các giá trị và tính toán bán hàng. Thêm các chức năng khác, nếu cần, trong mô-đun lớp mới.
  2. Tạo Lớp bao bọc bằng cách sử dụng ClsVolume2 làm Lớp cơ sở và tạo các thủ tục thuộc tính phù hợp và thay đổi tên chức năng công khai, che đi các tên chức năng và Thủ tục thuộc tính của Lớp cơ sở. Tạo các hàm mới trong Lớp gói, nếu cần.

Tùy chọn đầu tiên có phần thẳng thắn và dễ thực hiện. Tuy nhiên, chúng tôi sẽ chọn tùy chọn thứ hai để tìm hiểu cách giải quyết các Thuộc tính của Lớp cơ sở trong Lớp trình bao bọc mới và cách che tên thuộc tính ban đầu của nó với các tên thuộc tính mới.

Lớp ClsVolume2 được Biến đổi.

  1. Mở Cơ sở dữ liệu của bạn và hiển thị Cửa sổ chỉnh sửa VBA (Alt + F11).
  2. Chọn Mô-đun lớp từ Chèn Menu, để chèn Mô-đun lớp mới.
  3. Thay đổi Giá trị thuộc tính Tên của Mô-đun lớp từ Class1 thành ClsSales .
  4. Sao chép và Dán Mã VBA sau vào Mô-đun và Lưu Mã:
    Option Compare Database
    Option Explicit
    
    Private m_Sales As ClsVolume2
    
    Private Sub Class_Initialize()
        'instantiate the Base Class in Memory
        Set m_Sales = New ClsVolume2
    End Sub
    
    Private Sub Class_Terminate()
        'Clear the Base Class from Memory
        Set m_Sales = Nothing
    End Sub
    
    Public Property Get Description() As String
      Description = m_Sales.CArea.strDesc 'Get from Base Class
    End Property
    
    Public Property Let Description(ByVal strValue As String)
      m_Sales.CArea.strDesc = strValue ' Assign to Base Class
    End Property
    
    Public Property Get Quantity() As Double
    Quantity = m_Sales.CArea.dblLength
    End Property
    
    Public Property Let Quantity(ByVal dblValue As Double)
       If dblValue > 0 Then
         m_Sales.CArea.dblLength = dblValue ' Assign to clsArea, Base Class of ClsVolume2
       Else
         MsgBox "Quantity: " & dblValue & " Invalid.", vbExclamation, "ClsSales"
         Do While m_Sales.CArea.dblLength <= 0
              m_Sales.CArea.dblLength = InputBox("Quantity:, Valid Value >0")
         Loop
       End If
    End Property
    
    Public Property Get UnitPrice() As Double
       UnitPrice = m_Sales.CArea.dblWidth
    End Property
    
    Public Property Let UnitPrice(ByVal dblValue As Double)
       If dblValue > 0 Then
          m_Sales.CArea.dblWidth = dblValue ' Assign to clsArea, Base Class of ClsVolume2
       Else
         MsgBox "UnitPrice: " & dblValue & " Invalid.", vbExclamation, "ClsSales"
           Do While m_Sales.CArea.dblWidth <= 0
              m_Sales.CArea.dblWidth = InputBox("UnitPrice:, Valid Value >0")
           Loop
       End If
    End Property
    
    Public Property Get DiscountPercent() As Double
       DiscountPercent = m_Sales.dblHeight
    End Property
    
    Public Property Let DiscountPercent(ByVal dblValue As Double)
    ' Assign to Class .dblHeight of ClsVolume2
    Select Case dblValue
        Case Is <= 0
           MsgBox "Discount % -ve Value" & dblValue & " Invalid!", vbExclamation, "ClsSales"
           Do While m_Sales.dblHeight <= 0
              m_Sales.dblHeight = InputBox("Discount %, Valid Value >0")
           Loop
        Case Is >= 1
           m_Sales.dblHeight = dblValue / 100
        Case 0.01 To 0.75
           m_Sales.dblHeight = dblValue
    End Select
    End Property
    
    Public Function TotalPrice() As Double
    Dim Q As Double, U As Double
    Q = m_Sales.CArea.dblLength
    U = m_Sales.CArea.dblWidth
    If (Q * U) = 0 Then
       MsgBox "Quantity / UnitPrice Value(s) 0", vbExclamation, "ClsVolume"
    Else
       TotalPrice = m_Sales.CArea.Area 'Get from Base Class ClsArea
    End If
    End Function
    
    Public Function DiscountAmount() As Double
       DiscountAmount = TotalPrice * DiscountPercent
    End Function
    
    Public Function PriceAfterDiscount()
       PriceAfterDiscount = TotalPrice - DiscountAmount
    End Function
     

Chúng tôi đã làm gì trong Lớp học gói? Đã tạo một phiên bản của Lớp ClsVolume2 và thay đổi Tên thuộc tính, Tên chức năng và bổ sung kiểm tra Xác thực với các thông báo lỗi thích hợp và ngăn chặn việc rơi vào kiểm tra xác thực của Lớp cơ sở với các thông báo lỗi không phù hợp, như 'Giá trị trong dblLength thuộc tính không hợp lệ 'có thể bật lên từ Lớp khối lượng.

Kiểm tra các dòng tôi đã đánh dấu trong Mã trên và tôi hy vọng bạn sẽ có thể tìm ra cách các giá trị thuộc tính được gán / truy xuất đến / từ Lớp cơ sở ClsVolume2.

Bạn có thể xem qua Mô-đun lớp ClsArea trước và bên cạnh Mô-đun lớp ClsVolume2 - Lớp dẫn xuất sử dụng Lớp ClsArea làm Lớp cơ sở. Sau khi xem qua cả hai Mã này, bạn có thể xem lại Mã trong Lớp gói này.

Chương trình Kiểm tra cho Lớp ClsSales trong Mô-đun Tiêu chuẩn.

Hãy để chúng tôi viết Chương trình thử nghiệm để dùng thử Lớp gói.

  1. Sao chép và dán mã VBA sau vào một mô-đun tiêu chuẩn.
    Public Sub SalesTest()
    Dim S As ClsSales
    
    Set S = New ClsSales
    
    S.Description = "Micro Drive"
    S.Quantity = 12
    S.UnitPrice = 25
    S.DiscountPercent = 0.07
    
    Debug.Print "Desccription", "Quantity", "UnitPrice", "Total Price", "Disc. Amt", "To Pay"
    With S
        Debug.Print .Description, .Quantity, .UnitPrice, .TotalPrice, .DiscountAmount, .PriceAfterDiscount
    End With
    End Sub

    Chạy mã.

  2. Luôn mở Cửa sổ gỡ lỗi (Ctrl + G).
  3. Nhấp vào một nơi nào đó ở giữa Mã và nhấn F5 để Chạy mã và in đầu ra trong Cửa sổ gỡ lỗi.
  4. Bạn có thể kiểm tra Mã thêm bằng cách nhập bất kỳ giá trị đầu vào nào có số Âm và chạy mã để kích hoạt Thông báo Lỗi mới. Tắt bất kỳ dòng nhập nào, có ký hiệu nhận xét ('), chạy mã và xem điều gì sẽ xảy ra.

Tính giá / chiết khấu cho một mảng sản phẩm.

Mã kiểm tra sau tạo một mảng gồm ba Sản phẩm và Giá trị Bán hàng bằng cách nhập trực tiếp từ Bàn phím.

Sao chép và dán mã sau vào một mô-đun tiêu chuẩn và chạy để kiểm tra thêm Lớp gói.

Public Sub SalesTest2()

Dim S() As ClsSales
Dim tmp As ClsSales
Dim j As Long

For j = 1 To 3
Set tmp = New ClsSales
   tmp.Description = InputBox(j & ") Description")
   tmp.Quantity = InputBox(j & ") Quantity")
   tmp.UnitPrice = InputBox(j & ") UnitPrice")
   tmp.DiscountPercent = InputBox(j & ") Discount Percentage")
 ReDim Preserve S(1 To j) As ClsSales
 Set S(j) = tmp
 Set tmp = Nothing
Next

'Output Section
Debug.Print "Desccription", "Quantity", "UnitPrice", "Total Price", "Disc. Amt", "To Pay"
For j = 1 To 3
   With S(j)
       Debug.Print .Description, .Quantity, .UnitPrice, .TotalPrice, .DiscountAmount, .PriceAfterDiscount
   End With
Next

For j = 1 To 3
  Set S(j) = Nothing
Next

End Sub

Sau khi nhập thành công các giá trị chính xác vào Mảng, tên sản phẩm và giá trị bán hàng được in trong cửa sổ Gỡ lỗi.

CÁC CHẾ ĐỘ LỚP.

  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

ĐỐI TƯỢNG THU.

  1. Thông tin cơ bản về Ms-Access và Đối tượng Bộ sưu tập
  2. Mô-đun lớp Ms-Access và Đối tượng Bộ sưu tập
  3. Bản ghi Bảng trong Đối tượng và Biểu mẫu Bộ sưu tập

ĐỐI TƯỢNG TỪ ĐIỂN.

  1. Khái niệm cơ bản về đối tượng từ điển
  2. Khái niệm cơ bản về đối tượng từ điển-2
  3. Sắp xếp các Mục và Khoá Đối tượng Từ điển
  4. Hiển thị Bản ghi từ Từ điển sang Biểu mẫu
  5. Thêm các đối tượng lớp dưới dạng các mục từ điển
  6. 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. 4 loại thông tin cần đưa vào cơ sở dữ liệu CRM của bạn

  2. Blog Công nghệ Truy cập Chính thức của Microsoft Hiện đã Trực tuyến!

  3. Cách xuất danh sách các Bảng được Liên kết sang Excel từ Access 2016

  4. 10 Mẹo Microsoft Access để tạo các truy vấn chọn lọc

  5. Quyền truy cập ODBC từ Windows Server Core