Access
 sql >> база данни >  >> RDS >> Access

Варианти на основен клас и производен обект

Въведение.

Миналата седмица опитахме пример за предаване на обект от базов клас през Set Процедура за свойство, за да стане част от Обекта в паметта. Преданият обект става разширение или дъщерен обект на главния обект в паметта. В нашата по-ранна програма предаването на дъщерния обект към целевия обект беше направено във фазата на инстанциране на нашата тестова програма. Присвоихме стойности на предадените свойства на обекта в по-късната част на програмата. Следващият пример е малко по-различен.

За тези, които биха искали да преминат през по-ранните статии за модула за клас MS-Access, връзките са дадени по-долу:

  • Модул за MS-Access Class и VBA
  • Обектни масиви от клас VBA на MS-Access
  • Основен клас на MS-Access и производни обекти
  • Основен клас на VBA и производен обект-2

Този път ще отворим и двата обекта (ClsArea – базовият клас, ClsVolume2 – целевият клас) поотделно в нашата тестова програма. Задайте стойности в свойствата на базовия клас ClsArea, преди да ги предадете на целевия обект на клас ClsVolume2. Не забравяйте, че класът Volume2 има само едно собствено свойство, p_Height Свойство и неговият метод Volume() се нуждае от дължината и Ширина Стойности на базовия клас ClsArea за изчисляване на обема.

  1. Копирайте и поставете следния примерен тестов код в стандартен модул.

    Процедурата SetNewVol2_2.

    Public Sub SetNewVol2_2()
    'Method 2/2
    Dim CA As ClsArea
    Dim Vol As ClsVolume2
    
    Set CA = New ClsArea
    Set Vol = New ClsVolume2
    
    CA.strDesc = "Bed Room"
    CA.dblLength = 90
    CA.dblWidth = 10
    Stop
    
    
    'Here ClsArea class Object CA is passed to the 
    ‘Property procedure Set CArea of ClsVolume2 object Vol
    Set Vol.CArea = CA 'Pass ClsArea obj to ClsVolume2
    
    Vol.dblHeight = 10 'assign height to ClsVolume2
    
    
    Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
    With Vol.CArea
      Debug.Print .strDesc, .dblLength, .dblWidth, .Area(), Vol.dblHeight, Vol.Volume()
    End With
    Stop
    
    Set CA = Nothing
    Set Vol = Nothing
    
    End Sub
    

    Преглед на VBA код.

    В първиятдим изявление, CA се дефинира като ClsArea Object и Vol като обект ClsVolume2. Следващите два оператора инстанцират и двата обекта в паметта.

    Следващите три израза присвояват стойности на свойствата на ClsArea Class Object.

    Стоп операторът дава пауза в изпълнението на кода, за да можем да проверим стойностите на свойствата на обекта в прозореца Locals.

    Задайте Vol.CArea =CA оператор присвоява ClsArea Class Object CA, като дъщерен обект в Vol (ClsVolume2) Обект.

    В следващата стъпка dblHeight Свойството на ClsVolume2 Class Object е присвоено със стойност 10.

    Следващите оператори преди оператора Stop отпечатват стойностите от паметта в прозореца за отстраняване на грешки.

    Следващите двенастройки Изявленията премахват обектите от паметта, преди да прекрати програмата.

    Показване на прозореца Locals.

  2. Изберете Прозорец Locals Опция от менюто Преглед.
  3. Щракнете някъде в средата на кода и натиснете F5 за да стартирате кода, докато програмата спре на Стоп изявление. Като алтернатива можете да натиснете F8 да изпълнявате кода стъпка по стъпка, за да проверявате прозореца Locals за промени на всяка стъпка.
  4. Кликнете върху [+] Символ за разгъване и показване както на свойствата на обектите, така и на стойностите.
  5. Проверете CArea и p_Area Препратка към обекта в Стойност колона на том Обекти. Стойността там се показва като Нищо защото все още не сме предали CA обект на Vol обекта.
  6. Ако сте приключили с разглеждането на съдържанието на прозореца Locals, след това стартирайте кода до следващото Спиране изявление. Сега, CAREa Вземете процедура за собственост и p_Area Обектите се присвояват с ClsArea Class Object.

Ще опитаме друг вариант вариант на двата класа ClsArea и ClsVolume2.

Нов модул за клас ClsVolume3.

1. Поставете нов клас модул и променете името му Property Value на ClsVolume3 .

2. Копирайте и поставете следния VBA код в ClsVolume3 Class Module:

Option Compare Database
Option Explicit
'Method three 
Private p_Height As Double
Public 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 = p_Area.dblLength * p_Area.dblWidth * Me.dblHeight
End Function

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

Private Sub Class_Terminate()
    Set p_Area = Nothing
End Sub

Проверете кода от началото:p_Height обявен за частна собственост. p_Area Свойство на клас ClsVolume3 е деклариран като Публичен Обект ClsArea. Това означава p_Area ще се появи като свойство на класа ClsVolume3 със свои собствени показваеми свойства за директен Get/Let операции в потребителската програма в стандартния модул. Въпреки че обектът на клас ClsArea е деклариран като публична собственост на клас ClsVolume3, неговите свойства са капсулирани в самия клас ClsArea.

Проверете Class_Initialize() и Class_Terminate() Подпрограми. Обектът ClsArea се инстанцира в Class_Initialize() Code и премахва обекта от паметта в Class_Terminate() Code, когато потребителската програма приключи.

Програмата за тестване.

Примерният тестов VBA код е даден по-долу.

Копирайте и поставете кода в стандартния модул.

Public Sub SNewVol3()
'Here ClsArea class is declared as a Public Property of ClsVolume3
Dim volm As ClsVolume3

Set volm = New ClsVolume3

volm.p_Area.strDesc = "Bed Room"
volm.p_Area.dblLength = 15 'assign length
volm.p_Area.dblWidth = 10 'assign width in clsArea
volm.dblHeight = 10 'assign height to ClsVolume2

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

End Sub

Покажете прозореца Locals (Преглед - -> Прозорец Locals), ако още не е отворен.

Кликнете някъде в средата на кода и натиснете F8 за да изпълните VBA кода един ред наведнъж и да наблюдавате локалния прозорец, за да проследите какво се случва на всяка стъпка.

Всички горепосочени варианти на класа ClsVolume са написани с по-малко код, с изключение на първия пример за клас ClsVolume.

Работа с обекта Recordset.

Следващата седмица ще работим с вграден обект DAO.Recordset и изградете модул за клас до:

  1. Изчислете и актуализирайте поле,
  2. Сортирайте данните,
  3. Отпечатайте сортираните данни в прозореца за отстраняване на грешки,
  4. и Създайте клонинг на таблицата със сортирани данни.

Това е много действия следващата седмица.

Списък с всички връзки по тази тема.

  1. Модул за MS-Access Class и VBA
  2. Обектни масиви от клас VBA на MS-Access
  3. Основен клас на MS-Access и производни обекти
  4. Базов клас на VBA и производни обекти-2
  5. Варианти на основен клас и производен обект
  6. Ms-Access Recordset and Class Module
  7. Достъп до модул за класове и класове за обвивка
  8. Преобразуване на функционалност на класа на обвивката
  9. Основи на Ms-Access и колекция обекти
  10. Модул за клас Ms-Access и обект на колекция
  11. Записи в таблицата в обект и форма на колекция
  12. Основи на обекта на речника
  13. Основи на обекта на речника-2
  14. Сортиране на ключове и елементи в речника
  15. Показване на записи от речник към формуляр
  16. Добавяне на обекти на клас като елементи от речника
  17. Актуализиране на елемент от речника за обект на клас във формуляра


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вижте моята презентация „Оптимизиране на Microsoft Access със SQL Server“.

  2. Заобиколно решение за ограничението за достъп до 255 колони

  3. Как Access общува с ODBC източници на данни? част 6

  4. Нашият запис на сесията на Microsoft Ignite вече е достъпен за гледане!

  5. Въведение в специалните заявки