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

Базов клас VBA и производен обект-2

Въведение.

Миналата седмица създадохме обект на извлечен клас ClsVolume, използвайки клас ClsArea като основен клас. Създадохме процедури за свойства в извлечения клас, за да изложим свойствата и функцията на основния клас на потребителските програми на обекта. Този метод изисква повторение на всички процедури за свойства на основния клас и в производния клас. Тук изследваме как да създадем същия клас Derived ClsVolume, без да повтаряме процедурите за свойства на основния клас ClsArea.

Научихме как се използва Get и Нека Процедури за собственост в класове. Има още една процедура за свойства, използвана в класовете:Set Процедура за собственост. Процедурата за свойство Set директно присвоява обект на обект от клас от същия тип.

Преди да продължите по-нататък, можете да посетите предишните страници по тази тема, ако още не сте го направили, връзките са дадени по-долу:

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

Клас ClsVolume, преобразяването.

Ще създадем различен вариант на същия ClsVolume Class Module, който създадохме миналата седмица, използвайки ClsArea като основен клас, с различен подход и с по-малко код.

Създайте нов модул за клас и променете неговата стойност на свойството на име на ClsVolume2 .

Копирайте и поставете следния код в модула Class ClsVolume2 и запазете модула:

Option Compare Database
Option Explicit
'Method two-1
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 = p_Area.dblLength * p_Area.dblWidth * p_Height
End Function

„Ново Вземете и Задаване Процедура за свойства за ClsArea ObjectsPublic Property Вземете CArea() Като ClsArea Задайте CArea =p_AreaEnd PropertyPublic Property Set CArea(ByRef AreaValue като ClsArea) Задайте p_Area =AreaValue

Изберете Компилиране Име на проекта от Отстраняване на грешки Меню за компилиране на VBA кода в базата данни, за да се гарантира, че целият код на VBA проект е без грешки. Ако сте срещнали грешка в другите си VBA програми, моля, проследете грешката, коригирайте я и прекомпилирайте своя проект. В противен случай VBA IntelliSense, който показва списък със свойства и функции на обекти, няма да работи. Това няма да ни попречи да присвояваме/извличаме стойности към/от свойствата на обекта. Но докато учите, е важно да видите как изскачат свойствата на обекта и показва списъка, като помощник в кодирането.


Вземете/Задайте вместо процедурата Get/Let Property.

Пропуснахме всички процедури за свойства на ClsArea, създадени в последната версия на ClsVolume Class, и ги заменихме с Get/Set Процедури за собственост, вместо Get/Let . Проверете областта на декларацията, където сме декларирали p_Area е деклариран като обект на клас ClsArea.

Когато обектът е деклариран по този начин, обикновено трябва да създадем екземпляр на този обект в процедурата Class_Initialize() в горния код. Не го направихме тук, защото планираме да го направим в потребителската програма и да попълним нейните свойства с подходящи стойности и след това да го предадем на класа ClsVolume2, преди последната фаза на изчисление, за да използваме техните стойности.

Обърнете внимание на Задаване на CArea() процедура. Това е ByRef параметър AreaValue е деклариран като ClsArea Object. Той ще приеме обекта на класа ClsArea, когато се предаде на Набор на свойства CArea(ByRef AreaValue като ClsArea) , в обектна променлива AreaValue, и присвоява на p_Area Свойство на ClsVolume2 Обект.

Вземете CArea() Процедурата Property връща обекта към извикващата програма.

В предишните ни програми сме написали процедури за свойства за отделни елементи (дължина, ширина, височина) на обект за присвояване/връщане стойности До/От тях. Тук разликата е, че предаваме цял обект като параметър на процедурата Set. За да извлечем стойността на свойството на този обект (да речем lblHeight), трябва да го адресираме като CArea.dblLength . Get/Set Име на процедурата CArea става дъщерен обект на главния обект, когато е деклариран в основната програма и техните процедури за свойства могат да бъдат достъпни директно чрез адреса на обекта Vol.CArea.dblLength.

Тестова програма в стандартния модул.

Ще напишем малка програма в стандартния модул, за да тестваме нашия нов извлечен обект на клас ClsVolume2.

Поставете нов стандартен модул във вашия проект. Копирайте и поставете следния код в модула и запазете кода:

Public Sub SetNewVol2_1()
'Method 1/2
Dim Vol As New ClsVolume2

'ClsArea Object instantiated and passed to the
'Property Procedure Set CArea in ClsVolume2.

Set Vol.CArea = New ClsArea 'declare and instantiate the object in one statement

Stop

Vol.CArea.strDesc = "Bed Room"
Vol.CArea.dblLength = 90
Vol.CArea.dblWidth = 10

Vol.dblHeight = 10 'assign height to ClsVolume2

Stop

Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
Debug.Print Vol.CArea.strDesc, Vol.CArea.dblLength, Vol.CArea.dblWidth, Vol.CArea.Area, Vol.dblHeight, Vol.Volume

Set Vol.CArea = Nothing
Set Vol = Nothing

End Sub

Преглед на код Ред по ред.

.Нека да разгледаме набързо VBA кода по-горе. Първият ред инстанцира класа ClsVolume2 с името Vol. След следващите два реда за коментари Set изявление с Vol.CArea Процедура за собственост се извиква и преминава Нова инстанциран ClsArea Обект като параметър.

Сложих Стоп изявление в следващия ред, за да направите пауза в програмата, за да видите как обектът се присвоява на Набор CAREa Обект. Как? ще проучим това след минута?

Следващите четири реда присвояват стойности на обекта ClsArea и на свойството Height на обекта ClsVolume2.

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

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

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

Изпълнете кода към следващия оператор за спиране

Нека стартираме кода и да проверим паметта, за да видим какво се случва там на всеки етап, където поставям оператора Stop.

  1. Щракнете някъде в средата на кода и натиснете F5 за да стартирате кода и да поставите програмата на пауза при първото изявление за спиране
  2. Изберете Прозорец Locals от Преглед Меню, за да отворите нов прозорец под прозореца на кода, за да покажете как обектите ClsArea и ClsVolume2, техните свойства и процедурите им за свойства на членове се съхраняват в паметта. Примерно изображение на Прозорец Locals е даден по-долу.

    Прозорецът Locals Преглед.



  3. Плъзнете други манипулатори за оразмеряване на Windows нагоре, за да намалите височината им, за да дадете повече място за показване на Местни прозорец. По-добре, затворете прозореца за отстраняване на грешки, за момента използвайте Ctrl+G, за да го върнете, когато е необходимо по-късно.

    Можем да имаме графичен изглед на всички обекти и техните свойства в Locals прозорец. Първото име със символа плюс [+] показва името на стандартния модул, откъдето се изпълнява нашата програма.

    Следващият символ плюс [+] с името Vol е ClsVolume2 инстанциран обект в паметта.

  4. Щракнете върху символите [+], за да разгънете и покажете подробностите.

    Ще намерите следващото ниво на обекти и свойства.

    Зо [+]CAREA показва, че този обект има следващото ниво на свойства и техните стойности.

    dblHeight Процедурата за получаване на свойство идва директно под обекта Vol.

    [+]p_Area е частната собственост, декларирана като ClsArea Клас в класа ClsVolume2.

    p_Height също е частна собственост, декларирана в ClsVolume2.

  5. Кликнете върху плюса [+] символи за разширяване на обектите, за да покажат техните свойства и стойности.

    Разширяването на [+]CArea ни дава изгледа на обекта ClsArea, който сме предали на процедурата за свойство Set CArea().

    Разширяването на [+]p_Area дава изглед на собствеността ClsArea, обявена за частна.

    Обърнете внимание на p_Area Частна собственост на ClsVolume2 Class Object и всички негови елементи са достъпни само чрез CArea Свойство на обект Вземете/задайте Процедури към външния свят.

    Втората колона на прозореца Locals ще покаже стойностите, присвоени на свойствата на обекта и в момента няма стойности в тях.

    Третата колона показва имената на модула на типа данни или класа на обекта.

  6. Натиснете F5, за да стартирате програмата по-нататък, докато не бъде поставена на пауза при следващия оператор Stop, за да присвоите някои стойности в свойствата на обекта. Програмата ще спре при следващото спиране изявление. Проверете прозореца Locals за промяна на стойностите.

Вътре в CAREa Обект на първите два реда със стойности 90, 10 и последния strDesc със стойност "Bed Room" са Get Процедури за собственост. p_Desc, p_Length и p_width са стойности, присвоени чрез Set Процедури за свойства на p_Area Свойство на обект на клас ClsVolume2.

p_Area Обект на клас ClsArea, деклариран като частна собственост на ClsVolume2, се вижда с неговия Get/Set Процедури за свойства и присвоени стойности.

Проверете Тип Колона на [-]CArea и [-]p_Area и двата обекта са получени от ClsArea Base Class.

Използване на ClsArea и ClsVolume2 клас обекти по различен начин.

Следващата седмица ще опитаме друг подход със същите два обекта. Ако искате да го опитате сами, ето уликата как да го изпробвате сами.

  1. Създайте ClsVolume2 и ClsArea клас като два различни обекта в стандартната модулна програма.
  2. Задайте стойности и на двете свойства на обекта.
  3. Присвоете инстанциирания обект ClsArea към CArea Обект в ClsVolume2 Class Object, преди да отпечатате стойностите в прозореца за отстраняване на грешки.

В този пример можем да постигнем същия резултат, както направихме в горния пример, без да повтаряме процедурите за свойства Get/Let, както направихме в модула за клас ClsVolume.

Връзките на всички страници по тази тема.

  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. Добавяне на обекти на клас като елементи от речника
  18. Актуализиране на елемент от речника за обект на клас във формуляра


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция за промяна на регистра на VBA

  2. АКТУАЛИЗИРАНО:Грешка причинява Microsoft Office 365 Build 2105 прекъсва достъпа на приложения

  3. Търсене на данни на Microsoft Access с Elasticsearch

  4. Урок за управление на Microsoft TreeView

  5. Как да създадете заявка за параметри в Access