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

Classe base e varianti di oggetti derivati

Introduzione.

La scorsa settimana abbiamo provato un esempio per passare un oggetto di classe base, attraverso il Set Property Procedura, per entrare a far parte dell'Oggetto in memoria. L'oggetto passato diventa un'estensione o un oggetto figlio dell'oggetto principale in memoria. Nel nostro programma precedente il passaggio dell'Oggetto figlio all'Oggetto di destinazione veniva eseguito nella fase di istanziazione del nostro programma di test. Abbiamo assegnato valori alle proprietà oggetto passate nella parte successiva del programma. L'esempio successivo è leggermente diverso.

Per coloro che desiderano esaminare i precedenti articoli sul modulo MS-Access Class, i collegamenti sono riportati di seguito:

  • Modulo di classe MS-Access e VBA
  • Matrici di oggetti di classe VBA MS-Access
  • Classe base MS-Access e oggetti derivati
  • Classe base VBA e oggetto derivato-2

Questa volta apriremo entrambi gli oggetti (ClsArea – la classe base, ClsVolume2 – la classe target) separatamente nel nostro programma di test. Assegnare valori nelle proprietà ClsArea della classe base, prima di passarli all'oggetto Class ClsVolume2 di destinazione. Ricorda che la classe Volume2 ha una sola proprietà, la p_Height Proprietà e relativo metodo Volume() ha bisogno della Lunghezza e Larghezza Valori della Classe Base ClsArea per calcolare il Volume.

  1. Copia e incolla il seguente codice di prova di esempio in un modulo standard.

    La procedura SetNewVol2_2.

    Public Sub SetNewVol2_2()
    'Method 2/2
    Dim CA As ClsArea
    Dim Vol As ClsVolume2
    
    Set CA = New ClsArea
    Set Vol = New ClsVolume2
    
    CA.strDesc = "Bed Room"
    CA.dblLength = 90
    CA.dblWidth = 10
    Stop
    
    
    'Here ClsArea class Object CA is passed to the 
    ‘Property procedure Set CArea of ClsVolume2 object Vol
    Set Vol.CArea = CA 'Pass ClsArea obj to ClsVolume2
    
    Vol.dblHeight = 10 'assign height to ClsVolume2
    
    
    Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
    With Vol.CArea
      Debug.Print .strDesc, .dblLength, .dblWidth, .Area(), Vol.dblHeight, Vol.Volume()
    End With
    Stop
    
    Set CA = Nothing
    Set Vol = Nothing
    
    End Sub
    

    Revisione del codice VBA.

    Nel primo Dim dichiarazione, CA è definito come ClsArea Object e Vol come Oggetto ClsVolume2. Le due istruzioni successive istanziano entrambi gli oggetti in memoria.

    Le tre istruzioni successive assegnano valori alle proprietà di ClsArea Class Object.

    La Ferma fornisce una pausa nell'esecuzione del codice in modo da poter verificare i valori della proprietà dell'oggetto nella finestra Locals.

    Il Imposta Vol.CArea =CA assegna la ClsArea Class Object CA, come oggetto figlio nel Vol (ClsVolume2) Oggetto.

    Nel passaggio successivo dblHeight La proprietà dell'oggetto classe ClsVolume2 è assegnata con il valore 10.

    Le istruzioni successive prima dell'istruzione Stop stampano i valori dalla memoria nella finestra di debug.

    I prossimi due Set Le istruzioni rimuove gli oggetti dalla memoria, prima di terminare il programma.

    Visualizza la finestra Locals.

  2. Seleziona Finestra Locali Opzione dal menu Visualizza.
  3. Fai clic da qualche parte nel mezzo del codice e premi F5 per eseguire il codice finché il programma non si ferma allo Stop dichiarazione. In alternativa, puoi premere F8 per eseguire il codice un passaggio alla volta per esaminare la finestra Locals per le modifiche, a ogni passaggio.
  4. Fai clic su [+] Simbolo per espandere e visualizzare sia le proprietà che i valori degli oggetti.
  5. Controlla l'Carea e p_Area Riferimento all'oggetto nel Valore colonna del Vol Oggetto. Il valore è visualizzato come Niente perché non abbiamo ancora passato l'oggetto CA all'oggetto Vol.
  6. Se hai finito di visualizzare i contenuti della finestra Locals, esegui il codice fino al prossimo Stop dichiarazione. Ora, l'CArea Ottieni procedura proprietà e p_Area Gli oggetti vengono assegnati con l'oggetto classe ClsArea.

Proveremo un altro esempio di variante di entrambe queste due classi ClsArea e ClsVolume2.

Nuovo modulo di classe ClsVolume3.

1. Inserisci un nuovo modulo di classe e cambia il suo nome Property Value in ClsVolume3 .

2. Copia e incolla il seguente codice VBA nel modulo di classe ClsVolume3:

Option Compare Database
Option Explicit
'Method three 
Private p_Height As Double
Public 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 * Me.dblHeight
End Function

Private Sub Class_Initialize()
    Set p_Area = New ClsArea
End Sub

Private Sub Class_Terminate()
    Set p_Area = Nothing
End Sub

Controlla il codice dall'inizio:p_Height dichiarata proprietà privata. L'p_Area Proprietà della classe ClsVolume3 dichiarata Pubblica Oggetto ClsArea. Ciò significa p_Area apparirà come una proprietà della classe ClsVolume3 con le proprie proprietà visualizzabili per Get/Let diretto operazioni nel Programma Utente nel Modulo Standard. Anche se l'oggetto classe ClsArea è stato dichiarato come proprietà pubblica della classe ClsVolume3, le sue proprietà sono incapsulate nella classe ClsArea stessa.

Controlla Class_Initialize() e Class_Terminate() Sottoprogrammi. L'oggetto ClsArea viene istanziato nel codice Class_Initialize() e rimuove l'oggetto dalla memoria nel codice Class_Terminate(), al termine del programma utente.

Il programma di test.

Il codice di prova VBA di esempio è riportato di seguito.

Copia e incolla il codice nel modulo standard.

Public Sub SNewVol3()
'Here ClsArea class is declared as a Public Property of ClsVolume3
Dim volm As ClsVolume3

Set volm = New ClsVolume3

volm.p_Area.strDesc = "Bed Room"
volm.p_Area.dblLength = 15 'assign length
volm.p_Area.dblWidth = 10 'assign width in clsArea
volm.dblHeight = 10 'assign height to ClsVolume2

Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
With volm.p_Area
   Debug.Print .strDesc, .dblLength, .dblWidth, .Area, volm.dblHeight, volm.Volume
End With
Set volm = Nothing

End Sub

Visualizza la finestra Locals (Visualizza -> Finestra Locals), se non è già aperta.

Fai clic da qualche parte nel mezzo del codice e premi F8 per eseguire il codice VBA una riga alla volta e guardare la finestra locale per tenere traccia di ciò che accade ad ogni passaggio.

Tutte le varianti di cui sopra della classe ClsVolume sono state scritte con meno codice, ad eccezione del primo esempio di classe ClsVolume.

Lavorare con l'oggetto Recordset.

La prossima settimana lavoreremo con un oggetto integrato DAO.Recordset e crea un modulo di classe a:

  1. Calcola e aggiorna un campo,
  2. Ordina i dati,
  3. Stampa i dati ordinati nella finestra di debug
  4. e crea un clone della tabella con dati ordinati.

C'è molta azione la prossima settimana.

Elenco di tutti i collegamenti su questo argomento.

  1. Modulo di classe MS-Access e VBA
  2. Matrici di oggetti di classe VBA MS-Access
  3. Classe base MS-Access e oggetti derivati
  4. Classe base VBA e oggetti derivati-2
  5. Classe base e varianti di oggetti derivati
  6. Recordset Ms-Access e modulo di classe
  7. Accedi al modulo di classe e alle classi wrapper
  8. Trasformazione della funzionalità della classe wrapper
  9. Nozioni di base su Ms-Access e Collection Object
  10. Modulo di classe Ms-Access e oggetto Collection
  11. Record di tabella nell'oggetto e nella forma della raccolta
  12. Nozioni di base sugli oggetti del dizionario
  13. Nozioni di base sugli oggetti del dizionario-2
  14. Ordinamento delle chiavi e degli elementi degli oggetti del dizionario
  15. Visualizza record dal dizionario al modulo
  16. Aggiungi oggetti classe come elementi del dizionario
  17. Aggiorna l'elemento del dizionario degli oggetti della classe nel modulo