sql >> Base de Datos >  >> RDS >> Access

Variantes de clase base y objeto derivado

Introducción.

La semana pasada probamos un ejemplo para pasar un Objeto de Clase Base, a través del Conjunto Procedimiento de Propiedad, para formar parte del Objeto en memoria. El objeto pasado se convierte en una extensión o un objeto secundario del objeto principal en la memoria. En nuestro programa anterior, pasar el objeto secundario al objeto de destino se realizó en la fase de creación de instancias de nuestro programa de prueba. Hemos asignado valores a las propiedades del objeto pasadas en la última parte del programa. El siguiente ejemplo es ligeramente diferente.

Para aquellos que deseen leer los artículos anteriores sobre el módulo de clase de MS-Access, los enlaces se proporcionan a continuación:

  • Módulo de clase MS-Access y VBA
  • Matrices de objetos de clase VBA de MS-Access
  • Clase base de MS-Access y objetos derivados
  • Clase base de VBA y objeto derivado-2

Esta vez abriremos ambos Objetos (ClsArea – la clase base, ClsVolume2 – la Clase objetivo) por separado en nuestro programa de prueba. Asigne valores a las propiedades de ClsArea de la clase base, antes de pasarlos al objeto Class ClsVolume2 de destino. Recuerde que la clase Volume2 solo tiene una propiedad propia, la p_Height Propiedad y su Método Volume() necesita la longitud y Ancho Valores de la Clase Base ClsArea para calcular Volumen.

  1. Copie y pegue el siguiente código de prueba de muestra en un módulo estándar.

    El procedimiento 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
    

    Revisión del código VBA.

    En el primer Dim declaración, CA se define como objeto ClsArea y Vol como objeto ClsVolume2. Las siguientes dos declaraciones instancian ambos objetos en la memoria.

    Las siguientes tres declaraciones asignan valores a las propiedades del objeto de clase ClsArea.

    La Parada La declaración da una pausa en la ejecución del código para que podamos verificar los valores de propiedad del objeto en la ventana Locales.

    El Establecer Vol.CArea =CA instrucción asigna el objeto de clase ClsArea CA, como un objeto secundario en el Vol (ClsVolume2) Objeto.

    En el siguiente paso dblHeight La propiedad del objeto de clase ClsVolume2 se asigna con el valor 10.

    Las siguientes instrucciones antes de la instrucción Stop imprimen los valores de la memoria en la ventana de depuración.

    Los siguientes dos Set Las declaraciones eliminan los objetos de la memoria antes de finalizar el programa.

    Mostrar la ventana Locales.

  2. Seleccione ventana Locales Opción del menú Ver.
  3. Haga clic en algún lugar en medio del Código y presione F5 para ejecutar el código hasta que el programa se detenga en Stop declaración. Alternativamente, puede presionar F8 para ejecutar el código paso a paso para inspeccionar la ventana Locales en busca de cambios, en cada paso.
  4. Haga clic en [+] Símbolo para expandir y mostrar tanto las propiedades como los valores de los objetos.
  5. Compruebe el área CA y p_Área Referencia de objeto en el Valor columna del Vol Objeto. El Valor allí se muestra como Nada porque aún no hemos pasado el Objeto CA al Objeto Vol.
  6. Si ha terminado de ver el contenido de la ventana Locales, ejecute el código hasta la próxima Parada. declaración. Ahora, el área CA Obtener procedimiento de propiedad y p_Area Los objetos se asignan con el objeto de clase ClsArea.

Probaremos con otro ejemplo de variante de estas dos clases ClsArea y ClsVolume2.

Nuevo módulo de clase ClsVolume3.

1. Inserte un nuevo módulo de clase y cambie su nombre Property Value a ClsVolume3 .

2. Copie y pegue el siguiente código VBA en el módulo de clase 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

Revisa el Código desde el principio:p_Height declarado como Propiedad Privada. El p_Área Propiedad de la clase ClsVolume3 declarada como Public Objeto ClsArea. Eso significa p_Area aparecerá como una Propiedad de la Clase ClsVolume3 con sus propias propiedades visualizables para Get/Let directo operaciones en el programa de usuario en el módulo estándar. Aunque el objeto de clase ClsArea se ha declarado como propiedad pública de la clase ClsVolume3, sus propiedades están encapsuladas en la propia clase ClsArea.

Compruebe el Class_Initialize() y Class_Terminate() Subrutinas. El objeto ClsArea se instancia en el código Class_Initialize() y elimina el objeto de la memoria en el código Class_Terminate(), cuando finaliza el programa de usuario.

El Programa de Pruebas.

El ejemplo de código VBA de prueba se proporciona a continuación.

Copie y pegue el código en el Módulo estándar.

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

Muestre la ventana Locales (Ver -> Ventana Locales), si aún no está abierta.

Haga clic en algún lugar en medio del código y presione F8 para ejecutar el código VBA una línea a la vez y observar la ventana local para realizar un seguimiento de lo que sucede en cada paso.

Todas las variantes anteriores de ClsVolume Class se han escrito con menos código, excepto el primer ejemplo de ClsVolume Class.

Trabajar con el objeto Recordset.

La próxima semana trabajaremos con un DAO.Recordset de objeto integrado. y crea un módulo de clase a:

  1. Calcular y actualizar un Campo,
  2. Ordenar los datos,
  3. Imprima los datos ordenados en la ventana de depuración,
  4. y crea un clon de la tabla con datos ordenados.

Eso es mucha acción la próxima semana.

Lista de todos los enlaces sobre este tema.

  1. Módulo de clase MS-Access y VBA
  2. Matrices de objetos de clase VBA de MS-Access
  3. Clase base de MS-Access y objetos derivados
  4. Clase base de VBA y objetos derivados-2
  5. Variantes de clase base y objeto derivado
  6. Conjunto de registros y módulo de clase Ms-Access
  7. Módulo de clase de acceso y clases contenedoras
  8. Transformación de la funcionalidad de la clase contenedora
  9. Conceptos básicos de Ms-Access y objetos de colección
  10. Módulo de clase Ms-Access y objeto de colección
  11. Registros de tabla en objeto y formulario de colección
  12. Conceptos básicos de objetos de diccionario
  13. Conceptos básicos de objetos de diccionario-2
  14. Ordenar elementos y claves de objetos del diccionario
  15. Mostrar registros del diccionario al formulario
  16. Agregar objetos de clase como elementos de diccionario
  17. Actualizar elemento del diccionario de objetos de clase en el formulario