sql >> Database teknologi >  >> RDS >> Access

Ms-Access VBA Class Object Arrays

Introduktion.

I sidste uge havde vi en kort introduktion af et simpelt Custom Class Object med kun to egenskaber, for Længde og Bredde Værdier. En metode til beregning af areal af hvad som helst, med længde- og breddeværdier. Håber du forstod det grundlæggende i et Ms-Access Custom Class-modul. Hvis ikke, her er linket:Ms-Access Class Module og VBA. Besøg siden, før du fortsætter.

Klassemodulobjekter gemmer en masse kode i dine programmer. Når du fandt noget, som du gør gentagne gange i kode, tænk på et klassemodulobjekt. Den gentagne kode kan også omdannes til en hjælpefunktion, men for klasseobjekter skal du tage en anden tilgang.

For en simpel opgave kan det tage mere kode at forfine funktionerne i klassemodulobjektet, men dine hovedmodulprogrammer vil være enkle, og al den komplicerede kode, der er udviklet og forfinet, forbliver skjult for andre.

Men indtil videre har vi et simpelt klassemodul i hånden, vi vil prøve at skabe en række objekter for at beregne arealet af mange elementer.

ClassArray()-underrutinen.

Eksempel-VBA-koden i standardmodulet opretter et array af fem objekter af ClsArea-klassen og udskriver deres egenskabsværdier og metoderesultat i fejlfindingsvinduet. Kopiér og indsæt (eller bedre, hvis du skriver dem ind, for bedre at kende hver linje, hvad de gør) følgende kode i et standardmodul:

Public Sub ClassArray()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
Dim L As Long, U As Long

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea

tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
Set tmpA = Nothing 'Remove temporary object from memory.
Next


‘PRINTING SECTION
'Print the Array contents into the Debug Window
L = LBound(CA)
U = UBound(CA)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With CA(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

’stop

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub
 

Klik et sted i midten af ​​koden, og tryk på F5 for at udføre koden. Indtast værdierne for beskrivelse, længde og bredde fra tastaturet for 5 forskellige elementer efter hinanden.

Eksempler på programmets kørsel er angivet nedenfor:

Description   Length        Width         Area
Door Mat       5             8             40 
Carpet         12            23            276 
Bed Room       21            23            483 
Store Room     15            25            375 
Terrace        40            50            2000 

Gennemgang af kode linje for linje.

Lad os undersøge koden linje for linje. I deklarationsområdet har vi erklæret en objektvariabel tmpA af ClsArea Type. I den anden linje erklærede en tom Array CA() af ClsArea Type. Det nødvendige antal elementer omdimensioneres senere i programmet.

I de næste to linjer har vi erklæret variabler title af strengtype og j, L, og U variabler af typen Langt heltal.

Derefter initialiseres titelvariablen med strengen 'ClassArray' og vil blive brugt som en titel i InputBox()-funktionen. For….Next loop indstilles med en kontrolvariabel j at køre løkken fem gange. Efter de næste to kommentarlinjer vises Sæt sætning instanserer (allokerer hukommelse) ClsArea klasseobjekt i hukommelsen med navnet tmpA .

De næste tre linjer kode tjener til at indtaste værdier for strDesc , dblLength, og dblWidth Egenskaber for tmpA-klasseobjekt.

Efter den næste kommentarlinje omdimensioneres ClsArea Class Object (CA) til 1 til j gange (1 til 1 gang) ved at bevare de eksisterende objektelementer, hvis nogen (dette er det første objekt i arrayet). Dette vil blive ved med at stige gennem ReDim sætning, til 1 til 2, 1 til 3, 1 til 4 og 1 til 5 ved at bevare de tidligere objektværdier i For . . . Næste sløjfe. Bevar nøgleordet sikrer, at de eksisterende array-objekter ikke går tabt.

Bemærk: Re-Dimension-sætningen øger/mindsker antallet af angivne objektelementer, men sletter de eksisterende objekter, der er indlæst i arrayet tidligere, uden Bevar søgeord.

Sættet sætning i den næste linje kopierer tmpA-objektet med dets data til CA(j) ClsArea Object nyoprettet j array element.

Næste linje Sæt tmpA =Ingenting fjerner det midlertidige objekt fra hukommelsen.

For...Next-løkken gentager denne handling fire gange mere for at indtaste andre elementer i det nyligt instansierede midlertidige objekt tmpA, efter hinanden, og kopierer objektet til CA Object Array.

De næste to linjer, efter kommentarlinjen, skal du finde Object Array-indeksområdet (finder det laveste og højeste indekstal.

Den næste Debug.Print sætning udskriver en overskriftslinje i 14 kolonnezoner i fejlfindingsvinduet. Den For . . . Næste sløjfe med L og U bundne array-indeksnummerområder kører de indre sætninger for at få adgang til hvert objekt fra Array CA, med indeksnummer i kontrolvariabel j.

Den aktuelle objektreference er indstillet i Med. . . Slut med struktur, i stedet for at gentage objektnavnet CA(j).strDesc, CA(j).dblLength, CA(j).dblWidth og CA(j).Area for at udskrive objektets egenskabsværdier og metodeområde() resultater i fejlfindingsvinduet.

Fjern kommentarsymbolet fra 'Stop sætning for at oprette en pause i programmet på Stop-sætningen. Kør koden igen, og indtast 5 elementdetaljer, så du kan eksperimentere med Array-objektet. Du kan selektivt adressere enhver af objektegenskaberne med Array Index-nummeret for at redigere eller udskrive en hvilken som helst værdi i fejlfindingsvinduet som vist nedenfor.


Udsagnet Sæt CA(j) =Ingenting inden for For. . . Next Loop rydder array-objekterne én efter én fra hukommelsen.

Giv Class Object Array som funktionsparameter.

Vi kan videregive Class Object Array som en parameter til et program, som vi gjorde med User-Defined Data Type.

Lad os oprette en simpel udskrivningsunderrutine ved at klippe udskrivningssektionskoden for hovedprogrammet og placere den i det nye program.

Kopiér ClassArray()-underrutinekoden, indsæt den i det samme standardmodul og skift navnet som ClassArray2(), som vist nedenfor.

Public Sub ClassArray2()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String
Dim L As Long, U As Long

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea

     tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
 Set tmpA = Nothing 'Remove temporary object from memory.
Next

‘PRINTING SECTION
'Print the Array contents into the Debug Window
L = LBound(CA)
U = UBound(CA)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With CA(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

’stop

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub
 

ClassArray2-koden uden udskrivning.

Opret en ny underrutine som angivet nedenfor:

Public Sub ClassPrint(ByRef clsPrint() As ClsArea)
Dim L As Long, U As Long
Dim j As Long

End Sub

Fremhæv Udskrivningssektionen op til 'Stop-sætningen i ClassArray2()-programmet, klip det fremhævede område af Code, og indsæt det under Dim udsagn i ClassPrint() Program. Den ændrede version af begge koder er angivet nedenfor:

Public Sub ClassArray2()
Dim tmpA As ClsArea
Dim CA() As ClsArea
Dim j As Long, title As String

title = "ClassArray"
For j = 1 To 5 ‘the Loop is set for 5 items
  'instantiate temporary ClsArea Object
  'to enter input
  Set tmpA = New ClsArea
     tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "")
     tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0)
     tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0)
    
  'Redimension Array
  ReDim Preserve CA(1 To j) As ClsArea
  Set CA(j) = tmpA   'Copy Object to Array
  
 Set tmpA = Nothing 'Remove temporary object from memory.
Next

Call ClassPrint(CA) ‘Pass the Object Array to print routine

'Clear array objects from memory
For j = L To U
   Set CA(j) = Nothing
Next

End Sub

Programmet ClassPrint().

Public Sub ClassPrint(ByRef clsPrint() As ClsArea)
Dim L As Long, U As Long
Dim j As Long

'Printing Section
'Print the Array Contents into the Debug Window.
L = LBound(clsPrint)
U = UBound(clsPrint)

Debug.Print "Description", "Length", "Width", "Area"
For j = L To U
  With clsPrint(j)
    Debug.Print .strDesc, .dblLength, .dblWidth, .Area
  End With
Next

End Sub

Tjek for kodeændringer i begge programmer og lav rettelser, hvor det er relevant. Klik i midten af ​​ClassArray2()-koden, og tryk på F5 for at køre programmet.

Call-sætningen i det første program sender CA Class Object Array som ByRef-parameter til ClassPrint()-underrutinen. Programmet udskriver objektegenskaberne og kalder funktionen Area() for at beregne og returnere værdien til print.

I næste uge lærer vi, hvordan du bruger vores ClsArea Class-modul som en basisklasse til at oprette et nyt VBA-klasseobjekt til at beregne Volumen af noget.

  1. MS-Access Class Module og VBA
  2. MS-Access VBA Class Object Arrays
  3. MS-Access Basisklasse og afledte objekter
  4. VBA-basisklasse og afledte objekter-2
  5. Basisklasse og afledte objektvarianter
  6. Ms-Access Recordset og klassemodul
  7. Adgang til klassemodul- og indpakningsklasser
  8. Wrapper Class Funktionalitet Transformation
  9. Grundlæggende om Ms-Access og Collection Object
  10. Ms-Access klassemodul og samlingsobjekt
  11. Tabelposter i samlingsobjekt og -form
  12. Grundlæggende om ordbogsobjekt
  13. Dictionary Object Basics-2
  14. Sortering af ordbogsobjektnøgler og -elementer
  15. Vis poster fra ordbog til formular
  16. Tilføj klasseobjekter som ordbogselementer
  17. Opdater Class Object Dictionary Element på formular


  1. Dynamisk pivot i oracle sql

  2. 2018 i anmeldelse:7 MariaDB-milepæle, du måske er gået glip af

  3. Automatisering af den tabelformede modelbehandling af SSAS-databaser i SQL Server

  4. Orbeon Forms Postgres DB-forbindelse