sql >> Databasteknik >  >> RDS >> Access

MS-Access basklass och härledda objekt

Introduktion.

Om du inte har sett de tidigare inläggen på Microsoft Access Class Module, gå igenom dem innan du fortsätter, länkarna finns nedan.

  1. MS-Access Class Module och VBA.
  2. MS-Access VBA Class Object Array.

ClsArea Klass kan fungera som en basklass i ett annat klassobjekt, beräkningen som utförs av basklassen kan användas som en del av det nya objektets beräkningar. Det kan till exempel vara en del av ett objekt som beräknar volymen av något,

dbl i dblLength och dblWidth Egendomsprocedurnamn för Get/Let Procedurerna är helt enkelt en indikation på att klassobjektet förväntar sig längd- och breddvärdena i dubbla precisionstal. På samma sätt, om vi ändrar egenskapsförfarandets namn till Kvantitet och UnitPrice så ger det första värdet multiplicerat med det andra värdet oss det totala priset för en vara.

Det betyder helt enkelt att du kan använda ClsArea-klassen som basklass, varhelst du behöver resultatet av det första värdet multiplicerat med det andra värdet, som Totalpris * Skattesats för att beräkna skattebeloppet eller Totalpris * Rabattsats för att hitta rabattbelopp och så vidare.

Även om vi har utvecklat en enkel klassmodul kan den vara en del av många andra härledda klasser. Möjligheterna är öppna för din fantasi och kreativitet.

Vår ClsArea Class beräknar arean av material, rum eller liknande föremål med endast längd- och breddegenskaper. Den beräknar inte arean av triangeln eller cirkeln. Men det kan vara en del av ett nytt klassobjekt som beräknar volymen av rum, lager för att hitta lagringskapacitet. För det behöver vi ytterligare en värdehöjd på rummet, lager, etc.

Volymklassen:ClsVolume.

Låt oss skapa en ny klassmodul ClsVolume, använder ClsArea som basklass. Infoga en klassmodul och ändra dess namn Egenskap till ClsVolume . Skriv eller kopiera och klistra in följande kod i klassmodulen.

Alternativ Jämför DatabasOption ExplicitPrivate p_Area As ClsAreaPrivate p_Height As DoublePrivate Sub Class_Initialize() Set p_Area =New ClsAreaEnd SubPrivate Sub Class_Terminate() Set p_Area =NothingEnd SubPublic Property As dbl_BHeal Property As dbl(EndHealth Property As dbl(Eng) As Double) Do While Val(Nz(dblNewValue, 0)) <=0 dblNewValue =InputBox("Negative/0 Values ​​Invalid:", "dblHeight()", 0) Loop p_Height =dblNewValueEnd PropertyPublic Function Volume() Som DoubleIf ( p_Area.Area()> 0) Och (p_Height> 0) Sedan Volym =p_Area.Area * p_HeightElse MsgBox "Ange giltiga värden för Length,Width och Height.", , "ClsVolume"End IfEnd Function

ClsVolume Class Objects kod är ännu inte komplett. Låt oss undersöka koden rad för rad. I den tredje raden deklareras som Privat egendom p_Area av ClsArea Class Object.

Nästa rad deklarerar en privat egendom med namnet p_Height av datatyp Dubbel.

Underrutinerna Class_Initialize() och Class_Terminate().

De nästa två underrutinerna (Initialize() och Terminate() ) är mycket viktiga här.

Initialize() kör och instansierar ClsArea Object i minnet när vi använder och instansierar ClsVolume Class Objekt i vårt standardmodulprogram.

När vi kör uttalandet Ange ClsVolume =Ingenting i standardmodulprogrammet, för att rensa ClsVolume-objektet från minnet, Terminate() Sub-Rutine körs och frigör minnesutrymmet som upptas av ClsArea-objektet.

Fastigheten Få dblHeight Procedur returnerar värdet från p_Height Egendom till det anropande programmet.

Egenskapen Låt dblHeight Proceduren validerar värdet som skickas till NewValue parametern och tilldelar den till den privata egenskapen p_Height .

Public Function Volume() beräknar volymen genom att anropa p_Area.Area() Funktion och det returnerade areavärdet multipliceras med p_Height för att beräkna Volym, med uttrycket:Volym =p_Area.Area * p_Height. Men innan vi kör den här satsen utför vi en valideringskontroll för att säkerställa att funktionen p_Area.Area() returnerar ett värde som är större än noll, vilket indikerar att p_Area.dblLength, p_Area.dblWidth Properties har giltiga värden i dem och p_Height egenskapsvärdet är större än noll.

Obs! Sedan, p_Area Objekt av klass ClsArea definieras som Privat Egenskapen för ClsVolume Class måste vi göra dess egenskaper (strDesc, dblLength, dblWidth och Area() funktion) synlig för omvärlden för Get/Let Verksamhet och att returnera Area Value. Det betyder att vi måste definiera Get/Let Property Procedures för strDesc, dblLength, dblWidth Properties och Area() funktion för ClsArea Class Object i ClsVolume Class Module.

Utlåt/skaffa egendom.

Lägg till följande egendom Get/Let Procedurer och Area() funktion till ClsVolume Class Module Code:

Public Property Get strDesc() As String strDesc =p_Area.strDescEnd PropertyPublic Property Let strDesc(ByVal NewValue As String) p_Area.strDesc =NewValueEnd PropertyPublic Property Get dblLength() As Double dbLength.dblAlength. NewValue As Double) p_Area.dblLength =NewValueEnd PropertyPublic Property Get dblWidth() As Double dblWidth =p_Area.dblWidthEnd PropertyPublic Property Let dblWidth(ByVal NewValue As Double) p_Area.dblWidth =NewEigendom pValA(_PubArea. )Avsluta funktion

Kontrollera egenskapsprocedurerna för strDesc() Get/Let kodrader. Användningen av procedurnamnet strDesc är helt enkelt en fråga om val, om du vill använda ett annat namn är du välkommen. Men det ursprungliga egenskapsnamnet vi har använt i ClsArea-klassen är strDesc. Att använda det ursprungliga namnet här påminner oss om förhållandet till det ursprungliga ClsArea Class Object.

I nästa Get dblLength() Property Procedur, uttrycket till höger om = tecken p_Area.dblLength läser dblLength-värdet lagrat i ClsArea Class Object och återgår till det anropande programmet.

Proceduren Let Property tilldelar parametervärdet i variabeln NewValue till egenskapen p_Area.dblLength för ClsArea Class Object. Här kör vi ingen valideringskontroll av det mottagna värdet i parametervariabeln NewValue. Valideringskontrollen kommer att utföras inom själva ClsArea-klassen när vi tilldelar värdet till p_Area.dblLength egendom.

På samma sätt läggs Get/Let-egenskapsprocedurerna till för egenskapen p_Area.dblWidth,

Nästa, p_Area.Area() Funktionen görs synlig genom ClsVolume Class Object för det anropande programmet.

ClsVolume Derived Class Module Code.

Den ifyllda koden för ClsVolume Class Module ges nedan.

Alternativ Jämför DatabasOption ExplicitPrivate p_Area As ClsAreaPrivate p_Height As DoublePrivate Sub Class_Initialize()'Öppna ClsArea-objekt i minnet med namnet p_Area Set p_Area =New ClsArea End SubPrivate Sub Class_Terminate the() p_Aremothing the() p_Aremothing End SubPublic Property Get dblHeight() As Double dblHeight =p_HeightEnd PropertyPublic 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 =dblNewValueEnd PropertyPublic Function Volume() As DoubleIf (p_Area.Area()> 0) Och (Me.dblHeight> 0) Då Volym =p_Area.Area * Me.dblHeightElse MsgBox "Enter Valid för Length,Width och Height.",vbUtrop , "ClsVolume"End IfEnd Function'ClsArea Class Property Procedurer och metod exponeras härPublic Property Get strDesc() As String strDesc =p_Area.strDescEnd Property Public Property Let strDesc(ByVal NewValue As String) p_Area.strDesc =NewValueEnd PropertyPublic Property Get dblLength() As Double dblLength =p_Area.dblLengthEnd PropertyPublic Property Let dblLength(ByVal NewValue Get As Double) p_Area Dubble AsbldBlW Property dblLength(ByVal NewValue As Double) p_Area. p_Area.dblWidthEnd PropertyPublic Property Leta dblWidth(ByVal NewValue As Double) p_Area.dblWidth =NewValueEnd PropertyPublic Function Area() As Double Area =p_Area.Area()End Function

Jag vet, vad du tänker nu:som "det här är dubbelarbete, det är trevligt om vi på något sätt kan hoppa över de här stegen att upprepa ClsArea Property Procedures igen i ClsVolume Class". Eller säg, vi kunde ha lagt till egenskapen dblWidth i själva ClsArea och kört metoderna Area() och Volume() därifrån, eller hur?

Hela poängen här är att hur ett basklassobjekt kan bli en del av att designa ett annat klassobjekt.

Kom ihåg att hela idén med att designa ett Återanvändbart klassmodulobjekt är att huvudprogrammen, som använder klassobjektet, kommer att vara enkla och krångligheterna som är inbyggda i klassobjektet förblir dolda.

Ja, vi kan göra det på mer än ett sätt, med en kompakt kod också. Vi kommer att utforska dem senare, men för nu, låt oss fortsätta med vår ursprungliga plan.

Huvudprogrammet som använder ClsVolume-klassen.

Låt oss testa vår nya ClsVolume Class i huvudprogrammet i Standard Module. Exempelkoden ges nedan.

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

Du kan se hur enkelt huvudprogrammet är, utan utskriftslinjerna?

Kopiera och klistra in koden i en standardmodul. Tryck på Ctrl+G-tangenterna för att visa felsökningsfönstret om det inte redan är öppet. Klicka någonstans i mitten av koden och tryck på F5 Nyckel för att köra koden. Exempelutdata i felsökningsfönstret visas nedan.

Beskrivning Längd Bredd Höjd Area VolymWarehouse 25 30 10 750 7500 

Beskrivning Längd Bredd Höjd Yta Volym
Lager 25 30 10 750 7500

Valideringskontroller prestandatester.

Vi kommer att köra tester för att se att Base Class ClsArea Class valideringskontroll av ingångsvärden fungerar när värden skickas till den genom ClsVolume Class. Vi har också utfört några valideringskontroller i funktionerna Area() och Volume().

Låt oss prova dem en efter en:

Först skickar vi ett negativt värde till egenskapen ClsArea.dblLength genom klassen ClsVolume. Det bör utlösa felmeddelandet och öppna funktionen Inputbox() i Do While...-loopen för att mata in rätt värde.

1. Byt ut värdet 25 på raden Vol.dblLength =25 , med –5 och tryck på F5 Nyckel för att köra koden.

Valideringskontrollen utlöser felet och frågar efter ett värde som är större än noll. Ange ett värde som är större än 0. Efter det återställer du värdet 25 på raden och ersätter –5.

2. Inaktivera raden Vol.dblHeight =10 genom att infoga en kommentarsymbol (‘) i början av raden som visas:‘Vol.dblHeight =10 . Efter ändringen trycker du på F5-tangenten för att köra koden.

Eftersom det inte finns något indatavärde som skickas till egenskapen kommer Vol.Volume()-funktionen att generera ett fel som säger att alla tre egenskaperna:dblLength, dblWidth och dblHeight, bör ha värden i sig för att köra volymfunktionen.

På samma sätt kan du kontrollera Vol.Area()-funktionens prestanda också.

Vi kan skapa en datautskriftsfunktion och skicka ClsVolume-objektet som en parameter till funktionen och skriva ut värdena i Debug-fönstret.

Den ändrade koden för huvudprogram.

Den ändrade koden för båda programmen ges nedan:

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

Nästa vecka kommer vi att bygga volymklassobjektet med mindre kod.

Länkarna på alla sidor om detta ämne.

  1. MS-Access Class Module och VBA
  2. MS-Access VBA Class Object Arrays
  3. MS-Access basklass och härledda objekt
  4. VBA-basklass och härledda objekt-2
  5. Basklass- och härledda objektvarianter
  6. Ms-Access Recordset och Class Module
  7. Åtkomst till klassmoduler och omslagsklasser
  8. Omvandling av omslagsklassfunktionalitet
  9. Ms-Access och Collection Object Basics
  10. Ms-Access Class Module och Collection Object
  11. Tabellposter i samlingsobjekt och form
  12. Grundläggande om ordbokobjekt
  13. Dictionary Object Basics-2
  14. Sortera ordboksobjektnycklar och objekt
  15. Visa poster från ordbok till formulär
  16. Lägg till klassobjekt som ordboksobjekt
  17. Uppdatera Class Object Dictionary-objekt på formulär


  1. Hur man installerar Neo4j på Ubuntu 20.04

  2. ORA-01830:datumformatbilden slutar innan hela inmatningssträngen konverteras / Välj summa där datumfrågan

  3. viloläge orakelsekvens producerar stort gap

  4. Hur man ansluter till databasen från Unity