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

Lớp cơ sở MS-Access và các đối tượng có nguồn gốc

Giới thiệu.

Nếu bạn chưa thấy Mô-đun Lớp học Access trên Microsoft Access trước đó, vui lòng xem qua chúng trước khi tiếp tục, các liên kết được cung cấp bên dưới.

  1. Mô-đun lớp MS-Access và VBA.
  2. Mảng đối tượng lớp VBA MS-Access.

ClsArea Lớp có thể thực hiện như một Lớp cơ sở trong một Đối tượng Lớp khác, phép tính do lớp cơ sở thực hiện có thể được sử dụng như một phần của các phép tính của đối tượng mới. Ví dụ:Nó có thể là một phần của Đối tượng tính Khối lượng của một thứ gì đó,

dbl trong dblLength dblWidth Tên thủ tục tài sản cho Nhận / Cho phép Các thủ tục chỉ đơn giản là một dấu hiệu cho thấy Đối tượng Lớp mong đợi Giá trị Chiều dài và Chiều rộng bằng số chính xác gấp đôi. Tương tự, nếu chúng ta thay đổi Tên thủ tục thuộc tính thành Số lượng và Đơn vị giá thì giá trị đầu tiên nhân với giá trị thứ hai sẽ cho chúng ta Tổng giá của một số mặt hàng.

Điều đó đơn giản có nghĩa là bạn có thể sử dụng ClsArea Class làm lớp cơ sở, bất cứ khi nào bạn cần kết quả của giá trị đầu tiên nhân với giá trị thứ hai, như Tổng giá * Thuế suất để tính số tiền thuế hoặc Tổng giá * Tỷ lệ chiết khấu để tìm Số tiền chiết khấu và như thế.

Mặc dù chúng tôi đã phát triển một Mô-đun lớp đơn giản, nó có thể là một phần của nhiều Lớp dẫn xuất khác. Khả năng mở ra cho trí tưởng tượng và sự sáng tạo của bạn.

Lớp ClsArea của chúng tôi tính toán diện tích vật liệu, Phòng hoặc các hạng mục tương tự chỉ với Thuộc tính Chiều dài và Chiều rộng. Nó không tính diện tích của Tam giác hoặc Hình tròn. Tuy nhiên, nó có thể là một phần của Đối tượng Lớp mới tính toán Khối lượng Phòng, Kho để tìm dung lượng lưu trữ. Để làm được điều đó, chúng tôi cần thêm một giá trị Chiều cao của Phòng, Nhà kho, v.v.

Lớp Khối lượng:ClsVolume.

Hãy để chúng tôi tạo Mô-đun lớp mới ClsVolume, sử dụng ClsArea làm Lớp cơ sở. Chèn Mô-đun lớp và thay đổi Tên của nó Thuộc tính cho ClsVolume . Nhập hoặc Sao chép và Dán Mã sau vào Mô-đun Lớp.

Option Compare Database
Option Explicit

Private p_Area As ClsArea
Private p_Height As Double

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

Private Sub Class_Terminate()
    Set p_Area = Nothing
End Sub

Public Property Get dblHeight() As Double
    dblHeight = p_Height
End Property 

Public Property Let dblHeight(ByVal dblNewValue As Double)
   Do While Val(Nz(dblNewValue, 0)) <= 0
      dblNewValue = InputBox("Negative/0 Values Invalid:", "dblHeight()", 0)
    Loop
    p_Height = dblNewValue
End Property

Public Function Volume() As Double

If (p_Area.Area() > 0) And (p_Height > 0) Then
    Volume = p_Area.Area * p_Height
Else
    MsgBox "Enter Valid Values for Length,Width and Height.", , "ClsVolume"
End If

End Function

Mã đối tượng lớp ClsVolume chưa hoàn chỉnh. Hãy để chúng tôi kiểm tra từng dòng mã. Trong dòng thứ ba được khai báo là Sở hữu tư nhân p_Area của Đối tượng Lớp ClsArea.

Dòng tiếp theo khai báo Thuộc tính riêng với tên p_Height của kiểu dữ liệu Double.

Các quy trình con Class_Initialize () và Class_Termina ().

Hai quy trình con tiếp theo ( Khởi tạo () Chấm dứt () ) rất quan trọng ở đây.

Khởi tạo () chạy và khởi tạo Đối tượng ClsArea trong bộ nhớ khi chúng tôi sử dụng và khởi tạo ClsVolume Class Đối tượng trong chương trình Mô-đun tiêu chuẩn của chúng tôi.

Khi chúng tôi thực hiện Câu lệnh Đặt ClsVolume =Không có gì trong chương trình Mô-đun tiêu chuẩn, để xóa Đối tượng ClsVolume khỏi bộ nhớ, Termina () Quy trình con chạy và giải phóng không gian bộ nhớ do Đối tượng ClsArea chiếm giữ.

Thuộc tính Nhận dblHeight Thủ tục trả về giá trị từ p_Height Thuộc tính của Chương trình đang gọi.

Thuộc tính Hãy để dblHeight Thủ tục xác thực giá trị được chuyển đến NewValue và gán nó vào thuộc tính riêng p_Height .

Khối lượng chức năng công khai () tính toán Khối lượng, bằng cách gọi p_Area.Area () Hàm và giá trị vùng trả về được nhân với p_Height để tính Khối lượng, với biểu thức:Khối lượng =p_Area.Area * p_Height. Tuy nhiên, trước khi thực hiện câu lệnh này, chúng tôi đang thực hiện kiểm tra xác thực để đảm bảo rằng hàm p_Area.Area () trả về giá trị lớn hơn 0, cho biết rằng các Thuộc tính p_Area.dblLength, p_Area.dblWidth có các giá trị hợp lệ trong đó và giá trị thuộc tính p_Height lớn hơn không.

Lưu ý: Kể từ, p_Area Đối tượng của Class ClsArea được định nghĩa là Riêng tư Thuộc tính của Lớp ClsVolume chúng ta phải tạo Thuộc tính của nó ( strDesc, dblLength, dblWidth Khu vực () chức năng) hiển thị với thế giới bên ngoài đối với Nhận / Cho phép Hoạt động và trả về Giá trị khu vực. Điều đó có nghĩa là chúng ta phải xác định các Thủ tục Thuộc tính Get / Let cho các Thuộc tính strDesc, dblLength, dblWidth và hàm Area () của Đối tượng Lớp ClsArea trong Mô-đun Lớp ClsVolume.

Thủ tục Cho / Nhận Tài sản.

Thêm Thuộc tính sau Nhận / Cho phép Thủ tục và Khu vực () chức năng đối với Mã mô-đun lớp ClsVolume:

Public Property Get strDesc() As String
   strDesc = p_Area.strDesc
End Property

Public Property Let strDesc(ByVal NewValue As String)
   p_Area.strDesc = NewValue
End Property

Public Property Get dblLength() As Double
   dblLength = p_Area.dblLength
End Property

Public Property Let dblLength(ByVal NewValue As Double)
   p_Area.dblLength = NewValue
End Property

Public Property Get dblWidth() As Double
   dblWidth = p_Area.dblWidth
End Property

Public Property Let dblWidth(ByVal NewValue As Double)
   p_Area.dblWidth = NewValue
End Property

Public Function Area() As Double
    Area = p_Area.Area()
End Function

Kiểm tra các thủ tục thuộc tính strDesc () Nhận / Cho các dòng Mã. Việc sử dụng tên Thủ tục strDesc chỉ đơn giản là một vấn đề của sự lựa chọn, nếu bạn muốn sử dụng một tên khác, bạn được hoan nghênh. Tuy nhiên, Tên thuộc tính ban đầu mà chúng tôi đã sử dụng trong Lớp ClsArea là strDesc. Việc sử dụng tên gốc đó ở đây nhắc nhở chúng ta về mối quan hệ với Đối tượng lớp ClsArea ban đầu.

Trong Thủ tục thuộc tính Get dblLength () tiếp theo, biểu thức ở bên phải của = ký tên p_Area.dblLength đọc giá trị dblLength được lưu trữ trong Đối tượng lớp ClsArea và quay trở lại chương trình gọi.

Thủ tục Thuộc tính Let gán giá trị tham số trong biến NewValue cho Thuộc tính p_Area.dblLength của Đối tượng Lớp ClsArea. Ở đây, chúng tôi không chạy bất kỳ kiểm tra xác thực nào đối với giá trị nhận được trong biến tham số NewValue. Kiểm tra xác thực sẽ được thực hiện trong chính Lớp ClsArea khi chúng tôi chỉ định giá trị cho p_Area.dblLength tài sản.

Tương tự, các Thủ tục Thuộc tính Nhận / Cho phép cũng được thêm vào Thuộc tính p_Area.dblWidth,

Tiếp theo, p_Area.Area () Chức năng được hiển thị thông qua Đối tượng Lớp ClsVolume đối với chương trình gọi.

Mã mô-đun lớp lấy từ ClsVolume.

Mã hoàn chỉnh của Mô-đun lớp ClsVolume được cung cấp bên dưới.

Option Compare Database
Option Explicit

Private p_Area As ClsArea
Private p_Height As Double

Private Sub Class_Initialize()

‘Open ClsArea Object in Memory with the name p_Area
    Set p_Area = New ClsArea 

End Sub

Private Sub Class_Terminate()

‘Removes the Object p_Area from Memory
    Set p_Area = Nothing ‘
End Sub

Public Property Get dblHeight() As Double
    dblHeight = p_Height
End Property

Public Property Let dblHeight(ByVal dblNewValue As Double)

Do While Val(Nz(dblNewValue, 0)) <= 0
      dblNewValue = InputBox("Negative/0 Values Invalid:", "dblHeight()", 0)
    Loop
     p_Height = dblNewValue

End Property

Public Function Volume() As Double

If (p_Area.Area() > 0) And (Me.dblHeight > 0) Then
    Volume = p_Area.Area * Me.dblHeight
Else    

MsgBox "Enter Valid Values for Length,Width and Height.",vbExclamation , "ClsVolume"
End If

End Function

‘ClsArea Class Property Procedures and Method are exposed here

Public Property Get strDesc() As String
   strDesc = p_Area.strDesc
End Property 

Public Property Let strDesc(ByVal NewValue As String)
   p_Area.strDesc = NewValue
End Property

Public Property Get dblLength() As Double
   dblLength = p_Area.dblLength
End Property

Public Property Let dblLength(ByVal NewValue As Double)
   p_Area.dblLength = NewValue
End Property

Public Property Get dblWidth() As Double
   dblWidth = p_Area.dblWidth
End Property

Public Property Let dblWidth(ByVal NewValue As Double)
   p_Area.dblWidth = NewValue
End Property

Public Function Area() As Double
    Area = p_Area.Area()
End Function

Tôi biết, bây giờ bạn đang nghĩ gì:như “đây là công việc kép, thật tuyệt nếu chúng ta có thể, bằng cách nào đó, bỏ qua các bước lặp lại các Thủ tục Thuộc tính ClsArea này một lần nữa trong Lớp ClsVolume”. Hoặc giả sử, chúng ta có thể đã thêm Thuộc tính dblWidth trong chính ClsArea và chạy các phương thức Area () và Volume () từ chính nó, phải không?

Toàn bộ điểm ở đây là cách một Đối tượng Lớp Cơ sở có thể trở thành một phần của việc thiết kế Đối tượng Lớp khác.

Hãy nhớ rằng toàn bộ ý tưởng thiết kế Đối tượng mô-đun lớp có thể tái sử dụng là các chương trình chính, sử dụng Đối tượng Lớp, sẽ đơn giản và những điều phức tạp được tích hợp trong Đối tượng Lớp vẫn bị ẩn.

Có, chúng tôi có thể làm điều đó nhiều hơn một cách, với một mã nhỏ gọn. Chúng ta sẽ khám phá chúng sau, nhưng hiện tại, chúng ta hãy tiếp tục với kế hoạch ban đầu của mình.

Chương trình chính sử dụng lớp ClsVolume.

Hãy để chúng tôi kiểm tra Lớp ClsVolume mới của chúng tôi trong Chương trình chính trong Mô-đun Tiêu chuẩn. Mã mẫu được đưa ra bên dưới.

Public Sub TestVolume()
Dim vol As ClsVolume

Set vol = New ClsVolume

vol.strDesc = "Warehouse"
vol.dblLength = 25
vol.dblWidth = 30
vol.dblHeight = 10

Debug.Print "Description", "Length", "Width", "Height", "Area", "Volume"

With vol
    Debug.Print .strDesc, .dblLength, .dblWidth, .dblHeight, .Area(), .Volume()
End With
End Sub

Bạn có thể thấy chương trình chính đơn giản như thế nào, không có dòng in?

Sao chép và Dán mã vào một Mô-đun chuẩn. Nhấn Ctrl + G Phím để hiển thị Cửa sổ gỡ lỗi nếu nó chưa ở trạng thái mở. Nhấp vào một nơi nào đó ở giữa Mã và nhấn F5 Phím để chạy Mã. Kết quả mẫu trên Cửa sổ gỡ lỗi được hiển thị bên dưới.

Description   Length        Width         Height        Area          Volume
Warehouse      25            30            10            750           7500 
Mô tả
Chiều dài Chiều rộng Chiều cao Diện tích Khối lượng
Kho 25 30 10 750 7500

Kiểm tra Hiệu suất Kiểm tra Xác thực.

Chúng tôi sẽ chạy các bài kiểm tra để biết rằng kiểm tra xác thực giá trị đầu vào của Lớp ClsArea Lớp cơ sở hoạt động khi các giá trị được chuyển cho nó thông qua Lớp ClsVolume. Chúng tôi cũng đã thực hiện một số kiểm tra xác thực trong các hàm Area () và Volume ().

Hãy để chúng tôi thử từng cái một:

Đầu tiên, chúng tôi sẽ chuyển một giá trị âm cho thuộc tính ClsArea.dblLength thông qua Lớp ClsVolume. Nó sẽ kích hoạt thông báo lỗi và mở hàm Inputbox () trong vòng lặp Do While… để nhập giá trị chính xác.

1. Thay thế Giá trị 25, trong dòng Vol.dblLength =25 , với - 5 và nhấn F5 Chìa khóa để chạy Mã.

Kiểm tra xác thực sẽ kích hoạt lỗi và sẽ yêu cầu giá trị lớn hơn Zero. Nhập giá trị lớn hơn 0. Sau đó, khôi phục giá trị 25 trong dòng, thay thế –5.

2. Tắt dòng Vol.dblHeight =10 bằng cách chèn ký hiệu chú thích (‘) vào đầu dòng như hình:‘ Vol.dblHeight =10 . Sau khi thay đổi, nhấn phím F5 để chạy Mã.

Vì không có giá trị đầu vào nào được chuyển cho Thuộc tính nên hàm Vol.Volume () sẽ tạo ra Lỗi khi nói rằng tất cả ba Thuộc tính:dblLength, dblWidth và dblHeight, phải có các giá trị trong chúng để chạy hàm Volume.

Tương tự, bạn cũng có thể kiểm tra hiệu suất của hàm Vol.Area ().

Chúng ta có thể tạo một Hàm in dữ liệu và chuyển Đối tượng ClsVolume làm tham số cho hàm và in các giá trị trong Cửa sổ gỡ lỗi.

Mã đã thay đổi của các chương trình chính.

Mã đã thay đổi cho cả hai Chương trình được cung cấp dưới đây:

Public Sub TestVolume()
Dim Vol As ClsVolume

Set Vol = New ClsVolume

Vol.strDesc = "Warehouse"
Vol.dblLength = 25
Vol.dblWidth = 30
Vol.dblHeight = 10

Call CVolPrint(Vol)

Set Vol = Nothing

End Sub
Public Sub CVolPrint(volm As ClsVolume)

   Debug.Print "Description", "Length", "Width", "Height", "Area", "Volume"  
With volm
    Debug.Print .strDesc, .dblLength, .dblWidth, .dblHeight, .Area, .Volume
End With

End Sub

Tuần tới, chúng tôi sẽ xây dựng Đối tượng Lớp Khối lượng với ít Mã hơn.

Liên kết của Tất cả các Trang trên 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à Khoá Đố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. 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. Chèn hàng loạt hoặc Cập nhật cho các bảng có trường Phần đính kèm

  2. Tạo và truy cập cơ sở dữ liệu và bảng OLTP trong bộ nhớ

  3. Ngày sao lưu thế giới:4 sự thật thú vị về mất dữ liệu cần biết

  4. Lịch sử của cơ sở dữ liệu

  5. Cách người quản lý tài sản có thể cải thiện hiệu quả với cơ sở dữ liệu