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

Clase base VBA y objeto derivado-2

Introducción.

La semana pasada creamos un objeto ClsVolume de clase derivada, usando Class ClsArea como clase base. Hemos creado procedimientos de propiedad en la clase derivada para exponer las propiedades y la función de la clase base a los programas de usuario de objetos. Este método exige la repetición de todos los procedimientos de propiedad de la clase base también en la clase derivada. Aquí exploramos cómo crear la misma clase ClsVolume derivada sin repetir los procedimientos de propiedad de la clase ClsArea base.

Hemos aprendido el uso de Get y Dejar Procedimientos de Propiedad en Clases. Hay un procedimiento de propiedad más que se usa en las clases:el conjunto Procedimiento de Propiedad. El procedimiento Establecer propiedad asigna directamente un objeto a un objeto de clase del mismo tipo.

Antes de continuar, puede visitar las páginas anteriores sobre este tema, si aún no lo ha hecho, 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

La clase ClsVolume, el cambio de imagen.

Crearemos una variante diferente del mismo módulo de clase ClsVolume que creamos la semana pasada, usando ClsArea como clase base, con un enfoque diferente y con menos código.

Cree un nuevo módulo de clase y cambie su valor de propiedad de nombre a ClsVolume2 .

Copie y pegue el siguiente código en el módulo de clase ClsVolume2 y guarde el módulo:

Option Compare Database
Option Explicit
'Method two-1
Private p_Height As Double
Private 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 * p_Height
End Function

'Nuevo Obtener y Establecer Procedimiento de propiedad para ClsArea ObjectsPublic Property Get CArea() As ClsArea Set CArea =p_AreaEnd PropertyPublic Property Set CArea(ByRef AreaValue As ClsArea) Set p_Area =AreaValueEnd Property

Seleccione Compilar Nombre del proyecto de Debug Menú para compilar el código VBA en la base de datos para garantizar que todo el código del proyecto VBA esté libre de errores. Si ha encontrado un error en sus otros programas de VBA, localice el error, corríjalo y vuelva a compilar su proyecto. De lo contrario, VBA IntelliSense que muestra una lista de propiedades y funciones de los objetos no funcionará. Eso no nos impedirá asignar/recuperar valores a/de las propiedades del objeto. Pero, mientras aprende, es importante ver las propiedades de un objeto emergente y mostrar la lista, como un asistente en la codificación.


Obtener/Establecer en lugar del procedimiento de propiedad Get/Let.

Hemos omitido todos los procedimientos de propiedad de ClsArea, creados en la última versión de ClsVolume Class, y los hemos reemplazado con Get/Set Procedimientos de propiedad, en lugar de Get/Let . Revisa el Área de declaración donde hemos declarado p_Area se declara como objeto de clase ClsArea.

Cuando se declara un Objeto de esta manera, normalmente deberíamos crear una instancia de este objeto en el Procedimiento Class_Initialize() en el Código anterior. No lo hicimos aquí porque planeamos hacerlo en el Programa del usuario y llenar sus Propiedades con los valores apropiados y luego pasarlo a la Clase ClsVolume2, antes de la fase de cálculo final para usar sus valores.

Tome nota de Establecer CArea() procedimiento. Su parámetro ByRef AreaValue se declara como ClsArea Object. Aceptará el objeto de clase ClsArea cuando se pase a Property Set CArea(ByRef AreaValue as ClsArea) , en la variable de objeto AreaValue, y asigna a la p_Area Propiedad de ClsVolume2 Objeto.

El Obtener CArea() El procedimiento de propiedad devuelve el objeto al programa de llamada.

En nuestros programas anteriores, hemos escrito procedimientos de propiedad para elementos individuales (largo, ancho, alto) de un objeto para asignar/devolver valores Hacia/Desde a ellos. Aquí, la diferencia es que estamos pasando un Objeto completo como Parámetro al Procedimiento Establecer. Para recuperar el valor de propiedad de este objeto (por ejemplo, lblHeight), debemos abordarlo como CArea.dblLength . El Obtener/Establecer Nombre del procedimiento de propiedad CArea se convierte en el objeto secundario del Objeto principal cuando se declara en el Programa principal y se puede acceder a sus Procedimientos de propiedad directamente a través de la Dirección del objeto Vol.CArea.dblLength.

Un programa de prueba en el módulo estándar.

Escribiremos un pequeño programa en el módulo estándar para probar nuestro nuevo objeto de clase derivado ClsVolume2.

Inserte un nuevo módulo estándar en su proyecto. Copie y pegue el siguiente código en el módulo y guarde el código:

Public Sub SetNewVol2_1()
'Method 1/2
Dim Vol As New ClsVolume2

'ClsArea Object instantiated and passed to the
'Property Procedure Set CArea in ClsVolume2.

Set Vol.CArea = New ClsArea 'declare and instantiate the object in one statement

Stop

Vol.CArea.strDesc = "Bed Room"
Vol.CArea.dblLength = 90
Vol.CArea.dblWidth = 10

Vol.dblHeight = 10 'assign height to ClsVolume2

Stop

Debug.Print "Description", "Length", "Width", "Area", "Height", "Volume"
Debug.Print Vol.CArea.strDesc, Vol.CArea.dblLength, Vol.CArea.dblWidth, Vol.CArea.Area, Vol.dblHeight, Vol.Volume

Set Vol.CArea = Nothing
Set Vol = Nothing

End Sub

Revisión de código línea por línea.

.Echemos un vistazo rápido al código VBA anterior. First-line crea una instancia de Class ClsVolume2 con el nombre Vol. Después de las siguientes dos líneas de comentarios, Set declaración con el Vol.CArea Se llama al procedimiento de propiedad y pasa el Nuevo ClsArea instanciado Objeto como parámetro.

Puse un Stop declaración en la siguiente línea para hacer una pausa en el Programa para ver cómo se asigna el objeto al Conjunto Área CA Objeto. ¿Cómo? ¿Exploraremos eso en un minuto?

Las siguientes cuatro líneas asignan valores al objeto ClsArea y a la propiedad Height del objeto ClsVolume2.

La próxima Parada crea una pausa en el Programa para que podamos inspeccionar la memoria de cómo se mantienen los valores en la memoria.

La siguiente línea imprime los encabezados en la ventana de depuración para los valores impresos en la siguiente línea.

La siguiente línea imprime los valores de las propiedades del objeto de la memoria en la ventana de depuración.

Ejecutar el código hasta la siguiente declaración de parada

Ejecutemos el Código e inspeccionemos la memoria para ver qué sucede allí en cada etapa, donde coloco la instrucción Stop.

  1. Haga clic en algún lugar en medio del código y presione F5 para ejecutar el código y pausar el programa en la primera declaración de detención.
  2. Seleccione ventana Locales desde Ver Menú para abrir una nueva ventana debajo de la ventana de código, para mostrar cómo se mantienen en la memoria los objetos ClsArea y ClsVolume2, sus propiedades y los procedimientos de propiedad de sus miembros. Una imagen de muestra de la ventana Locales se da a continuación.

    La Ventana Local Ver.



  3. Arrastre los controladores de tamaño de otras ventanas hacia arriba para reducir su altura y dar más espacio para la visualización de locales Ventana. Mejor, cierre la ventana de depuración, por el momento, use Ctrl+G para recuperarla cuando la necesite más tarde.

    Podemos tener una vista gráfica de todos los objetos y sus Propiedades en los Locales Ventana. El primer nombre con el símbolo más [+] muestra el nombre del Módulo Estándar, desde donde se ejecuta nuestro programa.

    El siguiente símbolo más [+] con el nombre Vol es el objeto instanciado de ClsVolume2 en la memoria.

  4. Haga clic en los símbolos [+] para expandir y mostrar los detalles.

    Encontrará el siguiente nivel de Objetos y Propiedades.

    El [+]Área CA indica que este Objeto tiene el siguiente nivel de Propiedades y sus Valores.

    dblHeight El procedimiento de obtención de propiedad se encuentra directamente debajo del objeto Vol.

    El [+]p_Área es la Propiedad Privada declarada como ClsArea Clase en la clase ClsVolume2.

    La p_Altura es también la Propiedad Privada declarada en el ClsVolume2.

  5. Haga clic en el signo más [+] símbolos para expandir los objetos para mostrar sus propiedades y valores.

    La expansión de [+]CArea nos da la vista del objeto ClsArea que hemos pasado al procedimiento de propiedad Set CArea().

    La expansión de [+]p_Area da la vista de la Propiedad ClsArea declarada como Privada.

    Tenga en cuenta el p_Area Propiedad privada, del objeto de clase ClsVolume2, y todos sus elementos son accesibles solo a través del CArea Objeto Propiedad Obtener/Establecer Trámites al mundo exterior.

    La segunda columna de la ventana Locales mostrará los valores asignados a las propiedades del objeto y actualmente no hay valores en ellas.

    La tercera columna muestra el tipo de datos o los nombres de los módulos de clase de objeto.

  6. Presione F5 para continuar con la ejecución del programa, hasta que se detenga en la siguiente instrucción Stop, para asignar algunos valores a las propiedades del objeto. El programa se detendrá en la próxima Parada declaración. Verifique la Ventana de Locales para el cambio de Valores.

Dentro del área CA Objeto:las dos primeras líneas con valores 90, 10 y la última strDesc con valor "Bed Room" son Obtener Trámites de la Propiedad. p_Desc, p_Length y p_width son valores asignados a través de Set Procedimientos de propiedad a p_Area Propiedad del objeto de clase ClsVolume2.

El p_Área El objeto de la clase ClsArea declarado como propiedad privada de ClsVolume2 se ve con su Get/Set Procedimientos de propiedad y valores asignados.

Compruebe el Tipo Columna de [-]CArea y [-]p_Area ambos objetos se derivan de la clase base ClsArea.

Uso de objetos de clase ClsArea y ClsVolume2 de manera diferente.

La próxima semana intentaremos otro enfoque con los mismos dos objetos. Si quieres probarlo tú mismo, aquí tienes la pista de cómo probarlo tú mismo.

  1. Crea una instancia de ClsVolume2 y ClsArea Class como dos objetos diferentes en el programa del módulo estándar.
  2. Asigne valores a ambas propiedades del objeto.
  3. Asigne el Objeto instanciado ClsArea al CArea Objeto en el objeto de clase ClsVolume2, antes de imprimir los valores en la ventana de depuración.

En este ejemplo, podemos lograr el mismo resultado que obtuvimos en el ejemplo anterior, sin repetir los procedimientos de propiedad Get/Let como hicimos en el módulo de clase ClsVolume.

Los enlaces de todas las páginas 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. Agregar objetos de clase como elementos de diccionario
  18. Actualizar elemento del diccionario de objetos de clase en el formulario