sql >> Databáze >  >> RDS >> Access

Základní třída MS-Access a odvozené objekty

Úvod.

Pokud jste neviděli předchozí příspěvky o modulu Microsoft Access Class Module, projděte si je prosím, než budete pokračovat, odkazy jsou uvedeny níže.

  1. MS-Access Class Module a VBA.
  2. Pole objektů třídy VBA MS Access.

Oblast Cls Třída může fungovat jako základní třída v jiném objektu třídy, výpočet provedený základní třídou lze použít jako součást výpočtů nového objektu. Může být například součástí objektu, který vypočítává objem něčeho,

dbl v dblLength a dblWidth Názvy procedur vlastností pro Get/Let Procedury jsou jednoduše indikací toho, že objekt třídy očekává hodnoty délky a šířky v číslech s dvojnásobnou přesností. Podobně, pokud změníme názvy procedur vlastností na množství a jednotkovou cenu, pak první hodnota vynásobená druhou hodnotou nám dá celkovou cenu nějaké položky.

Jednoduše to znamená, že můžete použít třídu ClsArea jako základní třídu, kdekoli potřebujete výsledek první hodnoty vynásobený druhou hodnotou, například Celková cena * Sazba daně pro výpočet částky daně nebo Celková cena * Sazba slevy pro zjištění výše slevy a tak dále.

Přestože jsme vyvinuli jednoduchý modul třídy, může být součástí mnoha dalších odvozených tříd. Možnosti jsou otevřené vaší představivosti a kreativitě.

Naše třída ClsArea počítá plochu materiálů, místností nebo podobných položek pouze s vlastnostmi délky a šířky. Nepočítá plochu trojúhelníku nebo kruhu. Může však být součástí nového objektu třídy, který vypočítává objem místností, skladů, aby zjistil úložnou kapacitu. K tomu potřebujeme ještě jednu hodnotu Height of Room, Warehouse atd.

Třída Volume:ClsVolume.

Vytvořme nový modul třídy ClsVolume pomocí ClsArea jako základní třídy. Vložte modul třídy a změňte jeho Název Vlastnost na ClsVolume . Zadejte nebo zkopírujte a vložte následující kód do modulu třídy.

Option Compare DatabaseOption ExplicitPrivate p_Area As ClsAreaPrivate p_Height As DoublePrivate Sub Class_Initialize() Set p_Area =Nová ClsAreaEnd SubPrivate Sub Class_Terminate() Set p_Area =NothingEnd SubPublic Property LetblEnd DoubleVelity p_Area 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) And (p_Height> 0) Then Volume =p_Area.Area * p_HeightElse MsgBox "Zadejte platné hodnoty pro délku, šířku a výšku.", , "ClsVolume"End IfEnd Function

Kód objektu třídy ClsVolume ještě není kompletní. Podívejme se na kód řádek po řádku. Ve třetím řádku deklarováno jako Private Property p_Area objektu třídy ClsArea.

Další řádek deklaruje soukromý majetek s názvem p_Height datového typu Double.

Podrutiny Class_Initialize() a Class_Terminate().

Další dva dílčí rutiny (Initialize() a Ukončit() ) jsou zde velmi důležité.

Funkce Initialize() spustí a vytvoří instanci ClsArea Object v paměti, když použijeme a vytvoříme instanci třídy ClsVolume Objekt v našem programu Standardní modul.

Když provedeme příkaz Set ClsVolume =Nothing v programu Standardní modul, chcete-li vymazat objekt ClsVolume z paměti, použijte Terminate() Sub-Routine se spustí a uvolní paměťový prostor obsazený objektem ClsArea.

Vlastnost Získejte dblHeight Procedura vrací hodnotu z p_Height Vlastnost volajícímu programu.

Vlastnost Let dblHeight Procedura ověřuje hodnotu předanou do NewValue parametr a přiřadí jej do soukromé vlastnosti p_Height .

Veřejná funkce Volume() vypočítá objem voláním p_Area.Area() Funkce a vrácená hodnota oblasti se vynásobí p_Height pro výpočet objemu s výrazem:Volume =p_Area.Area * p_Height. Před provedením tohoto příkazu však provádíme kontrolu ověření, abychom zajistili, že funkce p_Area.Area() vrátí hodnotu větší než nula, což znamená, že vlastnosti p_Area.dblLength, p_Area.dblWidth mají platné hodnoty a hodnota vlastnosti p_Height je větší než nula.

Poznámka: Vzhledem k tomu, p_Area Objekt třídy ClsArea je definován jako Soukromý Vlastnost třídy ClsVolume musíme vytvořit její vlastnosti (strDesc, dblLength, dblWidth a Area() funkce) viditelné pro vnější svět pro Get/Let Operace a vrátit hodnotu oblasti. To znamená, že musíme definovat procedury vlastností Get/Let pro vlastnosti strDesc, dblLength, dblWidth a Area() objektu třídy ClsArea v modulu třídy ClsVolume.

Procedury Let/Get Property.

Přidejte následující vlastnost Get/Let Postupy a Area() funkce ke kódu modulu třídy ClsVolume:

Veřejný majetek Získat strDesc() jako řetězec strDesc =p_Area.strDescEnd PropertyPublic Property Nechat strDesc(ByVal NewValue As String) p_Area.strDesc =NewValueEnd PropertyPublic Property () Získat dblengLength() Jako Dvojitý pbldLength PropertyPutEnt Double dblAreLeng NewValue As Double) p_Area.dblLength =NewValueEnd PropertyPublic Property Získat dblWidth() jako dvojitou dblWidth =p_Area.dblWidthEnd PropertyPublic Property Nechat dblWidth(ByVal NewValue As Double) p_AreadAread PropertyPublic Funkce p_Area.dblWAublic NewAublic. )Ukončit funkci

Zkontrolujte procedury vlastností strDesc() Get/Let řádků kódu. Použití názvu procedury strDesc je jen otázkou volby, pokud chcete používat jiné jméno, jste vítáni. Ale původní název vlastnosti, který jsme použili ve třídě ClsArea, je strDesc. Použití tohoto původního názvu nám zde připomíná vztah s původním objektem třídy ClsArea.

V další proceduře vlastnosti Get dblLength() výraz napravo od = podepsat p_Area.dblLength přečte hodnotu dblLength uloženou v objektu třídy ClsArea a vrátí se volajícímu programu.

Procedura Let Property Procedure přiřadí hodnotu parametru v proměnné NewValue vlastnosti p_Area.dblLength objektu třídy ClsArea. Zde neprovádíme žádnou kontrolu ověření přijaté hodnoty v proměnné parametru NewValue. Kontrola ověření bude provedena v rámci samotné třídy ClsArea, když přiřadíme hodnotu p_Area.dblLength vlastnost.

Podobně jsou přidány procedury vlastnosti Get/Let pro vlastnost p_Area.dblWidth,

Dále p_Area.Area() Funkce je zviditelněna prostřednictvím objektu třídy ClsVolume pro volající program.

Kód modulu třídy odvozený od ClsVolume.

Dokončený kód modulu třídy ClsVolume je uveden níže.

Option Compare DatabaseOption ExplicitPrivate p_Area As ClsAreaPrivate p_Height As DoublePrivate Sub Class_Initialize()'Otevřít objekt ClsArea v paměti s názvem p_Area Set p_Area =New ClsArea End SubPrivate Sub Class_Removes the p_AreaMemory' End SubPublic Property Získat dblHeight() jako dvojitou dblHeight =p_HeightEnd PropertyPublic Property Nechat dblHeight(ByVal dblNewValue As Double)Udělat Zatímco Val(Nz(dblNewValue, 0)) <=0 dblNewValue =InputBox("Negativní/0 hodnoty", Negativní:dblHeight()", 0) Loop p_Height =dblNewValueEnd PropertyPublic Function Volume() As DoubleIf (p_Area.Area()> 0) And (Me.dblHeight> 0) Then Volume =p_Area.Area * Me.dblHeightElse ValidBox "Zadejte for Length,Width and Height.",vbExclamation , "ClsVolume"End IfEnd Function'Vlastnost třídy ClsArea Postupy a metoda jsou uvedeny zde Veřejná vlastnost Získat strDesc() jako řetězec strDesc =p_Area.strDescEnd Vlastnost Public Property Let strDesc(ByVal NewValue As String) p_Area.strDesc =NewValueEnd PropertyPublic Property Získat dblLength() jako dvojitou dblLength =p_Area.dblLengthEnd PropertyPublic Property Nechat dblLength(ByVal NewValue)Dvojitá vlastnost Jak získat.dblue As Double p_Area.dblWidthEnd PropertyPublic Property Nechat dblWidth(ByVal NewValue As Double) p_Area.dblWidth =NewValueEnd PropertyPublic Function Area() As Double Area =p_Area.Area()End Function

Vím, co si teď myslíte:jako „toto je dvojitá práce, je hezké, když můžeme nějakým způsobem přeskočit tyto kroky opakování procedur vlastností ClsArea znovu ve třídě ClsVolume“. Nebo řekněme, že jsme mohli přidat vlastnost dblWidth do samotné ClsArea a spustit metody Area() a Volume() odtud, že?

Jde o to, jak se objekt základní třídy může stát součástí návrhu jiného objektu třídy.

Pamatujte si, že celá myšlenka navrhnout Opakovaně použitelný objekt modulu třídy spočívá v tom, že hlavní programy využívající objekt třídy budou jednoduché a složitosti zabudované do objektu třídy zůstanou skryté.

Ano, můžeme to udělat více než jedním způsobem, také s kompaktním kódem. Prozkoumáme je později, ale prozatím pokračujme v našem původním plánu.

Hlavní program, který používá třídu ClsVolume.

Pojďme otestovat naši novou třídu ClsVolume v hlavním programu ve standardním modulu. Ukázkový kód je uveden níže.

Public Sub TestVolume()Dim vol As ClsVolumeSet vol =New ClsVolumevol.strDesc ="Warehouse"vol.dblLength =25vol.dblWidth =30vol.dblHeight =10Debug.Print "Popis", "Length", "Wid" Výška", "Area", "Volume"With vol Debug.Print .strDesc, .dblLength, .dblWidth, .dblHeight, .Area(), .Volume()End WithEnd Sub

Vidíte, jak jednoduchý je hlavní program bez tiskových linek?

Zkopírujte a vložte kód do standardního modulu. Stisknutím kláves Ctrl+G zobrazíte okno ladění, pokud ještě není v otevřeném stavu. Klikněte někam doprostřed kódu a stiskněte F5 Klíč ke spuštění kódu. Ukázkový výstup v okně ladění je uveden níže.

Popis Délka Šířka Výška Oblast Objem Sklad 25 30 10 750 7500 

Popis Délka Šířka Výška Plocha Objem
Sklad 25 30 10 750 7500

Ověřovací kontroly Testy výkonu.

Spustíme testy, abychom viděli, že kontrola ověření vstupní hodnoty třídy ClsArea základní třídy funguje, když jsou do ní předány hodnoty prostřednictvím třídy ClsVolume. Provedli jsme také některé ověřovací kontroly ve funkcích Area() a Volume().

Zkusme je jeden po druhém:

Nejprve předáme zápornou hodnotu vlastnosti ClsArea.dblLength prostřednictvím třídy ClsVolume. Mělo by to spustit chybovou zprávu a otevřít funkci Inputbox() v rámci Do While…Loop pro zadání správné hodnoty.

1. Nahraďte hodnotu 25 v řádku Vol.dblLength =25 , s –5 a stiskněte F5 Klíč ke spuštění kódu.

Kontrola ověření spustí chybu a požádá o hodnotu větší než nula. Zadejte hodnotu větší než 0. Poté obnovte v řádku hodnotu 25 a nahraďte ji –5.

2. Vypněte řádek Vol.dblHeight =10 vložením symbolu komentáře (‘) na začátek řádku, jak je znázorněno:‘Vol.dblHeight =10 . Po změně stiskněte klávesu F5 pro spuštění kódu.

Protože vlastnostem není předána žádná vstupní hodnota, funkce Vol.Volume() vygeneruje chybu, která říká, že všechny tři vlastnosti:dblLength, dblWidth a dblHeight by měly mít hodnoty pro spuštění funkce Volume.

Podobně můžete také zkontrolovat výkon funkce Vol.Area().

Můžeme vytvořit funkci tisku dat a předat funkci ClsVolume Object jako parametr a vytisknout hodnoty v okně Debug.

Změněný kód hlavních programů.

Změněný kód pro oba programy je uveden níže:

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

Příští týden vytvoříme objekt Volume Class s menším množstvím kódu.

Odkazy všech stránek na toto téma.

  1. MS-Access Class Module a VBA
  2. Pole objektů třídy VBA MS Access
  3. Základní třída MS-Access a odvozené objekty
  4. Základní třída VBA a odvozené objekty-2
  5. Základní třída a varianty odvozených objektů
  6. Sada záznamů a modul třídy Ms-Access
  7. Přístup k modulu třídy a třídám Wrapper
  8. Transformace funkčnosti třídy Wrapper
  9. Základy přístupu a shromažďovacích objektů
  10. Modul třídy Ms-Access a objekt kolekce
  11. Záznamy tabulek v objektu a formuláři kolekce
  12. Základy objektů slovníku
  13. Základy objektů slovníku-2
  14. Řazení klíčů a položek objektů slovníku
  15. Zobrazení záznamů ze slovníku do formuláře
  16. Přidat objekty třídy jako položky slovníku
  17. Aktualizovat položku slovníku objektů třídy ve formuláři


  1. SQL Server Nepoužitý index

  2. Vytváření nových modulů pomocí PostgreSQL Create Extension

  3. Proč vůbec používat *DB.exec() nebo připravené příkazy v Golangu?

  4. Získejte datum/čas z unixového časového razítka v SQLite