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

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

Въведение.

Ако не сте виждали по-ранните публикации в модула за клас на Microsoft Access, моля, прегледайте ги, преди да продължите, връзките са дадени по-долу.

  1. Модул за MS-Access Class и VBA.
  2. MS-Access VBA клас обектен масив.

ClsArea Класът може да се изпълнява като основен клас в друг обект на клас, изчислението, извършено от базовия клас, може да се използва като част от изчисленията на новия обект. Например, може да бъде част от обект, който изчислява обема на нещо,

Вдблът в dblLength и dblWidth Имена на процедурите за свойства за Get/Let Процедурите са просто индикация, че обектът на класа очаква стойностите за дължина и ширина в числа с двойна точност. По същия начин, ако променим имената на процедурите за свойства на Quantity и UnitPrice, тогава първата стойност, умножена по втората стойност, ни дава Общата цена на даден артикул.

Това просто означава, че можете да използвате класа ClsArea като основен клас, където имате нужда от резултата от първата стойност, умножен по втората стойност, като Обща цена * Данъчна ставка за изчисляване на сумата на данъка или Обща цена * Процент на отстъпка, за да намерите сумата на отстъпката и така нататък.

Въпреки че сме разработили прост модул за класове, той може да бъде част от много други производни класове. Възможностите са отворени за вашето въображение и креативност.

Нашият клас ClsArea изчислява площта на материалите, стаите или подобни елементи само със свойства за дължина и ширина. Той не изчислява площта на триъгълника или кръга. Но може да бъде част от нов обект на клас, който изчислява обема на стаите, складовете, за да намери капацитет за съхранение. За това ни трябва още една стойност Височина на помещение, Склад и т.н.

Класът Volume:ClsVolume.

Нека създадем нов модул за клас ClsVolume, използвайки ClsArea като основен клас. Поставете модул за клас и променете неговото име Свойство на ClsVolume . Въведете или копирайте и поставете следния код в модула за клас.

Опция Compare DatabaseOption ExplicitPrivate p_Area като ClsAreaPrivate p_Height като DoublePrivate Sub Class_Initialize() Задайте p_Area =New ClsAreaEnd SubPrivate Sub Class_Terminate() Задайте p_Area =NothingEnd SubClass_Terminate() Задайте p_Area =NothingEnd SubPubLight As Double) Do While Val(Nz(dblNewValue, 0)) <=0 dblNewValue =InputBox("Negative/0 Values ​​Invalid:", "dblHeight()", 0) Loop p_Height =dblNewValueEnd PropertyPublic Function Volume() As p_Area.Area()> 0) И (p_Height> 0) Тогава Volume =p_Area.Area * p_HeightElse MsgBox "Въведете валидни стойности за дължина, ширина и височина.", , "ClsVolume"End IfEnd функция

Кодът на обекта на класа ClsVolume все още не е завършен. Нека разгледаме кода ред по ред. На третия ред е деклариран като частна собственост p_Area на обект на клас ClsArea.

Следващият ред декларира частна собственост с името p_Height от тип данни Double.

Подпрограмите Class_Initialize() и Class_Terminate().

Следващите две подпрограми (Initialize() и Прекратяване() ) са много важни тук.

Функцията Initialize() изпълнява и инстанцира обекта ClsArea в паметта, когато използваме и инстанцираме ClsVolume Class Обект в нашата програма за стандартен модул.

Когато изпълним оператора Задайте ClsVolume =нищо в програмата Standard Module, за да изчистите обекта ClsVolume от паметта, Terminate() Подпрограмата се изпълнява и освобождава пространството в паметта, заето от обекта ClsArea.

Свойството Вземете dblHeight Процедурата връща стойността от p_Height Свойство на извикващата програма.

Свойството Let dblHeight Процедурата потвърждава стойността, предадена на NewValue параметър и го присвоява в частното свойство p_Height .

Публичната функция Volume() изчислява обема чрез извикване на p_Area.Area() Функцията и върнатата стойност на площта се умножават по p_Height за изчисляване на обема с израза:Volume =p_Area.Area * p_Height. Но преди да изпълним този израз, ние извършваме проверка за валидиране, за да гарантираме, че функцията p_Area.Area() връща стойност, по-голяма от нула, което показва, че свойствата p_Area.dblLength, p_Area.dblWidth имат валидни стойности в тях и стойността на свойството p_Height е по-голяма от нула.

Забележка: Тъй като, p_Area Обектът на клас ClsArea е дефиниран като Частен Свойство на класа ClsVolume трябва да направим неговите свойства (strDesc, dblLength, dblWidth и Area() функция), видима от външния свят за Get/Let Операции и за връщане на стойност на площта. Това означава, че трябва да дефинираме Get/Let Property Properties за strDesc, dblLength, dblWidth Properties и Area() функция на ClsArea Class Object в ClsVolume Class Module също.

Процедурите за даване/получаване на собственост.

Добавете следното свойство Get/Let Процедури и Площ() функция към ClsVolume Class Module Code:

Обществена собственост Вземете strDesc() като низ strDesc =p_Area.strDescEnd Property Public Property Нека strDesc(ByVal NewValue As String) p_Area.strDesc =NewValueEnd PropertyPublic Property (Собственост на NewValueEnd) Вземете dblLnd Property(Dublic Property) NewValue As Double) p_Area.dblLength =NewValueEnd PropertyPublic Property Вземете dblWidth() As Double dblWidth =p_Area.dblWidthEnd PropertyPublic Property Нека dblWidth(ByVal =NewValue As Double.) p_Walue =NewValue As Double. )Крайна функция

Проверете процедурите за свойства на strDesc() Get/Let редове от код. Използването на името на процедурата strDesc е просто въпрос на избор, ако искате да използвате различно име, добре дошли. Но оригиналното име на свойство, което използвахме в класа ClsArea, е strDesc. Използването на това оригинално име тук ни напомня за връзката с оригиналния обект на клас ClsArea.

В следващата процедура за свойство Get dblLength() изразът вдясно от = знак p_Area.dblLength чете стойността dblLength, съхранена в ClsArea Class Object и се връща към извикващата програма.

Процедурата Let Property присвоява стойността на параметъра в променливата NewValue на свойството p_Area.dblLength на обекта на клас ClsArea. Тук не изпълняваме никаква проверка за валидиране на получената стойност в променливата на параметъра NewValue. Проверката за валидиране ще се извърши в рамките на самия клас ClsArea, когато присвоим стойността на p_Area.dblLength собственост.

По същия начин, процедурите за свойство Get/Let се добавят и за свойството p_Area.dblWidth,

След това p_Area.Area() Функцията се прави видима чрез ClsVolume Class Object за извикващата програма.

Кодът на модула за клас, извлечен от ClsVolume.

Попълненият код на ClsVolume Class Module е даден по-долу.

Option Compare DatabaseOption ExplicitPrivate p_Area As ClsAreaPrivate p_Height As DoublePrivate Sub Class_Initialize()'Open ClsArea Object in Memory with the name p_Area Set p_Area =New ClsArea End the SubArething (Нов ClsArea End Sub Class_) End SubPublic Property Get dblHeight() As Double dblHeight =p_HeightEnd PropertyPublic Property Нека dblHeight(ByVal dblNewValue As Double)Do While Val(Nz(dblNewValue, 0)) <=0 dblNewValue =Neg InputBox/0", dblHeight()", 0) Цикъл p_Height =dblNewValueEnd PropertyPublic Функция Volume() As DoubleIf (p_Area.Area()> 0) И (Me.dblHeight> 0) Тогава Volume =p_Area.Area * Me.dblHeightElse "E MsgBoxElse" за дължина, ширина и височина.",vbExclamation , "ClsVolume"End IfEnd Function'ClsArea Клас Процедури за свойства и метод са изложени тук Public Property Get strDesc() As String strDesc =p_Area.strDescEnd Let Property Public Property Property strDesc(ByVal NewValue As String) p_Area.strDesc =NewValueEnd PropertyPublic Property Вземете dblLength() As Double dblLength =p_Area.dblLengthEnd PropertyPublic Property PropertyPublic Property Нека dblLength(ByValEnd) Вземете dblLength (ByVal As NewValue Property) dblLength (ByVal As News) p_Area.dblWidthEnd PropertyPublic Property Нека dblWidth(ByVal NewValue As Double) p_Area.dblWidth =NewValueEnd PropertyPublic Function Area() As Double Area =p_Area.Area()End Function

Знам какво си мислите досега:като „това е двойна работа, хубаво е, ако можем по някакъв начин да пропуснем тези стъпки за повтаряне на процедурите за свойства на ClsArea отново в класа ClsVolume“. Или да кажем, бихме могли да добавим свойството dblWidth в самия ClsArea и да стартираме методите Area() и Volume() от там, нали?

Целият смисъл тук е как един обект от базов клас може да стане част от проектирането на друг обект на клас.

Не забравяйте, че цялата идея за проектиране на Обект на клас модул за многократна употреба е, че основните програми, използващи Class Object, ще бъдат прости и тънкостите, вградени в Class Object, остават скрити.

Да, можем да го направим повече от един начин, с компактен код. Ще ги проучим по-късно, но засега нека продължим с първоначалния си план.

Основната програма, която използва класа ClsVolume.

Нека тестваме нашия нов клас ClsVolume в основната програма в стандартния модул. Примерният код е даден по-долу.

Public Sub TestVolume()Dim vol As ClsVolumeSet vol =New ClsVolumevol.strDesc ="Warehouse"vol.dblLength =25vol.dblWidth =30vol.dblHeight =10Debug.Print "Description", "Length", "Wid" Height", "Area", "Volume"С vol Debug.Print .strDesc, .dblLength, .dblWidth, .dblHeight, .Area(), .Volume()End WithEnd Sub

Можете да видите колко проста е основната програма, без линиите за печат?

Копирайте и поставете кода в стандартен модул. Натиснете клавишите Ctrl+G, за да покажете прозореца за отстраняване на грешки, ако той вече не е в отворено състояние. Щракнете някъде в средата на кода и натиснете F5 Ключ за стартиране на кода. Примерният изход в прозореца за отстраняване на грешки е показан по-долу.

Описание Дължина Ширина Височина Площ Обем Склад 25 30 10 750 7500 

Описание Дължина Ширина Височина Площ Обем
Склад 25 30 10 750 7500

Проверка за валидиране на тестове за ефективност.

Ще проведем тестове, за да видим, че проверката за валидиране на входната стойност на класа ClsArea на базовия клас работи, когато стойностите му се предават през класа ClsVolume. Извършихме някои проверки за валидиране и във функциите Area() и Volume().

Нека ги опитаме един по един:

Първо, ще предадем отрицателна стойност на свойството ClsArea.dblLength чрез класа ClsVolume. Той трябва да задейства съобщението за грешка и да отвори функцията Inputbox() в рамките на цикъла Do While..., за да въведете правилната стойност.

1. Заменете стойността 25 в реда Vol.dblLength =25 , с –5 и натиснете F5 Ключ за стартиране на кода.

Проверката за валидиране ще задейства грешката и ще поиска стойност, по-голяма от нула. Въведете стойност, по-голяма от 0. След това възстановете стойността 25 в реда, като замените –5.

2. Деактивирайте реда Vol.dblHeight =10, като вмъкнете символ за коментар (‘) в началото на реда, както е показано:‘Vol.dblHeight =10 . След промяната натиснете клавиша F5, за да стартирате кода.

Тъй като няма входна стойност, предадена на свойството, функцията Vol.Volume() ще генерира грешка, която казва, че и трите свойства:dblLength, dblWidth и dblHeight трябва да имат стойности в тях, за да стартират функцията Volume.

По същия начин можете да проверите и производителността на функцията Vol.Area().

Можем да създадем функция за печат на данни и да предадем обекта ClsVolume като параметър на функцията и да отпечатаме стойностите в прозореца за отстраняване на грешки.

Промененият код на основните програми.

Промененият код за двете програми е даден по-долу:

Public Sub TestVolume()Dim Vol As ClsVolumeSet Vol =New ClsVolumeVol.strDesc ="Warehouse"Vol.dblLength =25Vol.dblWidth =30Vol.dblHeight =10Call CVolPrint =(Vol)End Vol> 
Public Sub CVolPrint(volm As ClsVolume) Debug.Print "Description", "Length", "Width", "Height", "Area", "Volume" С volm Debug.Print .strDesc, .dblLength, .dblWidth , .dblHeight, .Area, .VolumeEnd WithEnd Sub

Следващата седмица ще изградим обекта Volume Class с по-малко код.

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

  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. Разплитане на новите ODBC и OLEDB драйвери на Microsoft SQL Server

  2. Мигриране на вашата база данни за достъп към SQL Server

  3. Как да използвате командата Compact and Repair в Access

  4. Вашият бизнес има ли нужда от база данни за човешки ресурси?

  5. Как да отстраните 10 проблема с Common Access 2019