Access
 sql >> Base de Dados >  >> RDS >> Access

Classe Base e Variantes de Objeto Derivado

Introdução.


Na semana passada tentamos um exemplo para passar um Objeto de Classe Base, através do Set Property Procedure, para se tornar parte do Objeto na memória. O objeto passado se torna uma extensão ou objeto filho do objeto principal na memória. Em nosso programa anterior, a passagem do objeto filho para o objeto de destino era feita na fase de instanciação do nosso programa de teste. Atribuímos valores às Propriedades do Objeto passadas na parte posterior do programa. O próximo exemplo é um pouco diferente.

Para aqueles que gostariam de ler os artigos anteriores sobre o MS-Access Class Module, os links são fornecidos abaixo:
  • Módulo de classe MS-Access e VBA
  • Matrizes de objetos de classe VBA do MS-Access
  • Classe base do MS-Access e objetos derivados
  • Classe base VBA e objeto derivado 2

Desta vez, abriremos os dois objetos (ClsArea – a classe base, ClsVolume2 – a classe de destino) separadamente em nosso programa de teste. Atribua valores às propriedades ClsArea da classe base, antes de passá-los para o objeto ClsVolume2 da classe de destino. Lembre-se de que a classe Volume2 tem apenas uma propriedade própria, a p_Height Propriedade e seu método Volume() precisa do Comprimento e Largura Valores da Classe Base ClsArea para calcular o Volume.
  1. Copie e cole o seguinte exemplo de código de teste em um módulo padrão.

    O procedimento 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
    

    Revisão de código VBA.


    No primeiro Dim declaração, CA é definido como ClsArea Object e Vol como objeto ClsVolume2. As próximas duas instruções instanciam ambos os objetos na memória.

    As próximas três instruções atribuem valores às propriedades de ClsArea Class Object.

    A Parada A instrução dá uma pausa na execução do código para que possamos verificar os valores da propriedade do objeto na janela Locals.

    O Definir Vol.CArea =CA A instrução atribui o objeto de classe ClsArea CA, como um objeto filho no Vol (ClsVolume2) Objeto.

    Na próxima etapa dblHeight A propriedade do objeto de classe ClsVolume2 é atribuída com o valor 10.

    As próximas instruções antes da instrução Stop imprime os valores da memória para a janela de depuração.

    Os próximos dois Conjunto Declarações remove os Objetos da memória, antes de encerrar o programa.

    Exiba a janela Locals.

  2. Selecione Janela Locais Opção no menu Visualizar.
  3. Clique em algum lugar no meio do Código e pressione F5 para executar o código até que o programa pare no Parar demonstração. Como alternativa, você pode pressionar F8 para executar o código uma etapa de cada vez para inspecionar a janela Locals em busca de alterações a cada etapa.
  4. Clique no [+] Símbolo para expandir e exibir propriedades e valores de objetos.
  5. Verifique a Área e p_Area Referência de objeto no Valor coluna do Vol Objeto. O valor está sendo exibido como Nada porque ainda não passamos o objeto CA para o objeto Vol.
  6. Se você terminou de visualizar o conteúdo da janela Locals, execute o código até a próxima Parada demonstração. Agora, a Área Obter procedimento de propriedade e p_Area Objeto são atribuídos com o objeto de classe ClsArea.

Tentaremos outro exemplo de variante dessas duas classes ClsArea e ClsVolume2.

Novo módulo de classe ClsVolume3.


1. Insira um novo módulo de classe e altere seu nome Valor da propriedade para ClsVolume3 .

2. Copie e cole o seguinte código VBA no módulo de 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

Verifique o Código desde o início:p_Height declarado como propriedade privada. A p_Area Propriedade da classe ClsVolume3 declarada como Pública Objeto ClsArea. Isso significa p_Area aparecerá como uma propriedade da classe ClsVolume3 com suas próprias propriedades exibíveis para Get/Let direto operações no Programa do Usuário no Módulo Padrão. Mesmo que o objeto da classe ClsArea tenha sido declarado como propriedade pública da classe ClsVolume3, suas propriedades são encapsuladas na própria classe ClsArea.

Verifique o Class_Initialize() e Class_Terminate() Sub-rotinas. O Objeto ClsArea é instanciado no Código Class_Initialize() e remove o Objeto da memória no Código Class_Terminate(), quando o programa do usuário termina.

O Programa de Testes.


O exemplo de código VBA de teste é fornecido abaixo.

Copie e cole o código no Módulo Padrão.
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

Exiba a janela Locals (View - -> Locals Window), se ainda não estiver aberta.

Clique em algum lugar no meio do código e pressione F8 para executar o código VBA uma linha por vez e observar a janela local para acompanhar o que acontece em cada etapa.

Todas as variantes acima da classe ClsVolume foram escritas com menos código, exceto o primeiro exemplo da classe ClsVolume.

Trabalhando com o objeto Recordset.


Na próxima semana, trabalharemos com um objeto interno DAO.Recordset e crie um módulo de classe para:
  1. Calcular e atualizar um campo,
  2. Classifique os dados,
  3. Imprima os dados classificados na janela de depuração,
  4. e crie um clone da tabela com dados classificados.

Isso é muita ação na próxima semana.

Lista de todos os links neste tópico.

  1. Módulo de classe MS-Access e VBA
  2. Matrizes de objetos de classe VBA do MS-Access
  3. Classe base do MS-Access e objetos derivados
  4. Classe básica do VBA e objetos derivados-2
  5. Classe base e variantes de objetos derivados
  6. Ms-Access Recordset and Class Module
  7. Módulo de classe de acesso e classes wrapper
  8. Transformação da funcionalidade da classe wrapper
  9. Noções básicas de Ms-Access e objetos de coleção
  10. Módulo de classe Ms-Access e objeto de coleção
  11. Registros de tabela no objeto e formulário de coleção
  12. Noções básicas de objetos do dicionário
  13. Noções básicas de objetos do dicionário-2
  14. Classificação de chaves e itens de objetos de dicionário
  15. Exibir registros do dicionário para o formulário
  16. Adicionar objetos de classe como itens de dicionário
  17. Atualizar item do dicionário de objetos de classe no formulário