Utilizando Classe no Access - A Classe Cliente
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito, através do Paypal.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.

Por: Plinio Mabesi
Chegou enfim a hora de criarmos a primeira parte funcional do nosso sistema. Depois de todo o sistema estar modelado e também estarem codificadas as classes auxiliares, vamos então dar vida ao programa.
A primeira classe a ser codificada será a classe Cliente. Após apresentar a estrutura da classe faremos a implementação da interface gráfica que manipulará os dados dos objetos.
Caso necessário relembre os conceitos anteriores sobre atributos, métodos, acesso às propriedades do objeto, instâncias e demais ensinamentos sobre a programação orientada a objetos, vistos nos primeiros artigos.
A Classe Cliente
O objetivo desta classe, conforme dito anteriormente, é oferecer funcionalidades de inclusão, consulta, atualização e exclusão dos objetos do tipo cliente.
Este é o código da classe, com todos os seus atributos e métodos, que se utilizam de funções próprias, bem como dos métodos dos objetos das classes Utilitario e ConexaoBD.
Código da classe:
Option Compare Database
Option Explicit
'Objeto da classe Utilitario
Private objUtil As New aclUtilitario
'Atributos da Classe
'Atributo de backup e atributo identificador da Classe
'PK - Código que identifica o cliente.
Private bkpCodCliente As Variant
Private lngCodCliente As Variant
'Classe social do cliente, calculada de acordo com a renda.
Private strClasse As Variant
'CPF do cliente.
Private strCpf As Variant
'E-mail do cliente.
Private strEmail As Variant
'Nome completo do cliente.
Private strNomeCliente As Variant
'Renda mensal do cliente, em reais.
Private curRenda As Variant
'Métodos Get, Set e Let da Classe
Property Get codCliente() As Variant
codCliente = lngCodCliente
End Property
Property Let codCliente(argCodCliente As Variant)
lngCodCliente = argCodCliente
If IsEmpty(bkpCodCliente) Then
bkpCodCliente = lngCodCliente
End If
End Property
Property Get classe() As Variant
classe = strClasse
End Property
Property Get cpf() As Variant
cpf = strCpf
End Property
Property Let cpf(argCpf As Variant)
If Not IsNull(argCpf) Then
If Not objUtil.validaCPF(argCpf) Then
MsgBox "O CPF <" & Format(argCpf, "000\.000\.000\-00") & _
"> não é válido.", vbExclamation, "CPF Inválido"
strCpf = Null
Else
strCpf = argCpf
End If
Else
strCpf = argCpf
End If
End Property
Property Get email() As Variant
email = strEmail
End Property
Property Let email(argEmail As Variant)
If Not IsNull(argEmail) Then
If Not objUtil.validaEmail(argEmail) Then
If MsgBox("O E-mail <" & argEmail & "> não possui um formato válido." _
& vbCrLf & "Deseja incluir este e-mail?", vbQuestion + vbYesNo, _
"E-mail Inválido") = vbYes Then
strEmail = argEmail
End If
Else
strEmail = argEmail
End If
Else
strEmail = argEmail
End If
End Property
Property Get nomeCliente() As Variant
nomeCliente = strNomeCliente
End Property
Property Let nomeCliente(argNomeCliente As Variant)
If Not IsNull(argNomeCliente) Then
strNomeCliente = objUtil.nomeProprio(argNomeCliente)
Else
strNomeCliente = argNomeCliente
End If
End Property
Property Get renda() As Variant
renda = curRenda
End Property
Property Let renda(argRenda As Variant)
curRenda = argRenda
'Alterar classe quando o valor da
'renda for alterado
strClasse = calculaClasse()
End Property
'Método Existe [Com conhecimento de SQL]
'Verifica a existência do objeto Cliente na tabela correspondente
'no Banco de Dados
Function existe(argCodCliente As Variant) As Boolean
On Error GoTo Err_existe
Dim objCon As New aclConexaoBD
Dim rstExiste As Recordset
Dim strSql As String
existe = False
strSql = "Select * " & _
"From Cliente " & _
"Where codCliente = " & objCon.valorSql(argCodCliente)
Set rstExiste = objCon.consulta(strSql)
If rstExiste.RecordCount > 0 Then
existe = True
End If
'Fecha o Recordset existe
rstExiste.Close
Exit_existe:
Set rstExiste = Nothing
Exit Function
Err_existe:
existe = False
GoTo Exit_existe
End Function
'Método Incluir [Com conhecimento de SQL]
'Inclui um novo objeto na tabela correspondente dentro do Banco de dados
Private Function incluir() As Boolean
On Error GoTo Err_incluir
Dim objCon As New aclConexaoBD
Dim strSql As String
strSql = "Insert Into " & _
"Cliente(codCliente,classe,cpf,email,nomeCliente,renda) " & _
"Values(" & objCon.valorSql(codCliente) & "," _
& objCon.valorSql(classe) & "," & objCon.valorSql(cpf) _
& "," & objCon.valorSql(email) & "," & objCon.valorSql(nomeCliente) _
& "," & objCon.valorSql(renda) & ")"
incluir = (objCon.executa(strSql) > 0)
If incluir Then
'Atualiza os campos de backup
bkpCodCliente = codCliente
End If
Exit_incluir:
Exit Function
Err_incluir:
incluir = False
GoTo Exit_incluir
End Function
'Método Excluir [Com conhecimento de SQL]
'Exclui o objeto atual na tabela correspondente dentro do Banco de dados
Function excluir() As Boolean
On Error GoTo Err_excluir
Dim objCon As New aclConexaoBD
Dim strSql As String
strSql = "Delete From Cliente " & _
"Where codCliente = " & objCon.valorSql(codCliente)
excluir = (objCon.executa(strSql) > 0)
Exit_excluir:
Exit Function
Err_excluir:
excluir = False
GoTo Exit_excluir
End Function
'Método Obter [Com conhecimento de SQL]
'Recupera o objeto Cliente através dos argumentos informados
Function obter(argCodCliente As Variant) As Boolean
On Error GoTo Err_obter
Dim objCon As New aclConexaoBD
Dim rstObter As Recordset
Dim strSql As String
strSql = "Select * " & _
"From Cliente " & _
"Where codCliente = " & objCon.valorSql(argCodCliente)
Set rstObter = objCon.consulta(strSql)
If rstObter.RecordCount = 0 Then
obter = False
Exit Function
End If
'Atualiza os campos de backup e os identificadores
codCliente = argCodCliente
bkpCodCliente = argCodCliente
'Atualiza os campos restantes
strClasse = rstObter.Fields("classe")
cpf = rstObter.Fields("cpf")
strEmail = rstObter.Fields("email")
nomeCliente = rstObter.Fields("nomeCliente")
renda = rstObter.Fields("renda")
obter = True
'Fecha o Recordset obter
rstObter.Close
Exit_obter:
Set rstObter = Nothing
Exit Function
Err_obter:
obter = False
MsgBox Err.Description
GoTo Exit_obter
End Function
'Método Salvar [Com conhecimento de SQL]
'Salva o objeto atual na tabela correspondente dentro do Banco de dados
Function salvar() As Boolean
On Error GoTo Err_salvar
Dim objCon As New aclConexaoBD
Dim strSql As String
If existe(bkpCodCliente) Then
strSql = "Update Cliente " & _
"Set codCliente = " & objCon.valorSql(codCliente) _
& ", classe = " & objCon.valorSql(classe) _
& ", cpf = " & objCon.valorSql(cpf) & ", email = " _
& objCon.valorSql(email) & ", nomeCliente = " _
& objCon.valorSql(nomeCliente) & ", renda = " _
& objCon.valorSql(renda) _
& " Where codCliente = " & objCon.valorSql(bkpCodCliente)
salvar = (objCon.executa(strSql) > 0)
Else
salvar = incluir
End If
If salvar Then
'Atualiza as variáveis de backup com o novo valor da chave
bkpCodCliente = codCliente
End If
Exit_salvar:
Exit Function
Err_salvar:
salvar = False
GoTo Exit_salvar
End Function
'Método calculaClasse
'Calcula a classe social do objeto atual baseado na
'renda informada e devolve uma letra correspondente
'à sua classificação dentro das faixas salariais.
Private Function calculaClasse() As String
If renda >= 15300 Then
calculaClasse = "A"
ElseIf renda >= 7650 Then
calculaClasse = "B"
ElseIf renda >= 3060 Then
calculaClasse = "C"
ElseIf renda >= 1020 Then
calculaClasse = "D"
ElseIf renda > 0 Then
calculaClasse = "E"
Else
calculaClasse = ""
End If
End Function
'Fim da classe...
Pontos Importantes
Nesta primeira classe referente a um objeto atualizável, com atributos modificáveis, passíveis de serem persistidos, podemos notar alguns pontos de interesse para o aprendizado da metodologia, conforme a seguir.
1. Atributos do tipo Variant: Como podemos encontrar objetos cujos campos não são de preenchimento obrigatório devemos manter a possibilidade de atribuir valores nulos aos atributos dos objetos, os quais serão reconhecidos pelo método valorSql(), da classe ConexaoBD, e convertidos da maneira correta para armazenagem na tabela. Caso utilizássemos atributos com os tipos pré-definidos não teríamos como reconhecer um atributo nulo de maneira tão fácil. Neste caso teríamos que procurar métodos alternativos de convenção e tratamento de valores que representariam a nulidade de atributos, como por exemplo uma seqüência de comprimento zero em uma string, ou um valor negativo que provavelmente nunca seria atribuído a um campo de código para chave primária, entre outros. Contudo, para o nosso projeto, contando com a facilidade da atribuição de valores e seus tipos às variáveis do tipo Variant, e a funcionalidade do método valorSql() esta será a forma que adotaremos.
'Nome completo do cliente. Private strNomeCliente As Variant
2. Criação do atributo de backup do objeto: Apesar de não ser necessário quando se usa atributos identificadores do tipo auto-numeração, esta é uma técnica que possibilita a alteração do código identificador do objeto permitindo salvar as modificações posteriormente, já que o antigo valor, que continua armazenado no banco de dados, ainda estará disponível no atributo de backup. Quando se usa qualquer tipo de código personalizado como a chave primária este recurso torna-se indispensável.
'Atributo de backup e atributo identificador da Classe 'PK - Código que identifica o cliente. Private bkpCodCliente As Variant Private lngCodCliente As Variant
3. Validação de dados no momento da atribuição do valor: Neste caso podemos visualizar na prática como validar um dado antes de atribuí-lo ao objeto. Como exemplo verificamos a validade de um CPF fornecido pelo usuário, permitindo ou não a sua utilização. Esta é uma tarefa que evita falhas de digitação e incorreções nos dados armazenados.
Property Let cpf(argCpf As Variant)
If Not IsNull(argCpf) Then
If Not objUtil.validaCPF(argCpf) Then
MsgBox "O CPF <" & Format(argCpf, "000\.000\.000\-00") _
& "> não é válido.", vbExclamation, "CPF Inválido"
strCpf = Null
Else
strCpf = argCpf
End If
Else
strCpf = argCpf
End If
End Property
4. Conversão de dados no momento da atribuição do valor: Neste caso podemos visualizar na prática como alterar um dado fornecido pelo usuário antes de atribuí-lo ao objeto. Esta tarefa é útil na padronização das informações armazenadas. Como exemplo armazenamos todos os nomes dos clientes no padrão de nomes próprios, com a primeira letra de cada parte do nome em maiúsculas e o restante em minúsculas. Esta funcionalidade é oferecida pelo método nomeProprio() da classe Utilitario, representada pelo objeto objUtil.
Property Let nomeCliente(argNomeCliente As Variant)
If Not IsNull(argNomeCliente) Then
strNomeCliente = objUtil.nomeProprio(argNomeCliente)
Else
strNomeCliente = argNomeCliente
End If
End Property
5. Determinação de uma propriedade baseada em outra: Apesar de não ser uma boa prática e estar diretamente contra as Formas Normais, esta funcionalidade foi colocada apenas para servir de exemplo. Aqui determinamos a classe social a que o cliente pertence a partir da sua renda informada. Para isto utilizamos o método calculaClasse() da própria classe Cliente. A informação é atribuída à propriedade classe e armazenada no banco de dados, lembrando mais uma vez que esta não é uma prática recomendada em sistemas profissionais.
Property Let renda(argRenda As Variant) curRenda = argRenda 'Alterar classe quando o valor da 'renda for alterado strClasse = calculaClasse() End Property
6. Ajuste de código SQL: Para que possamos montar nossas classes sem nos preocupar com o formato SQL dos dados, utilizamos a classe ConexaoBD e seus métodos para fazer todos os ajustes e nos deixar resolver os problemas mais sérios, que requerem nossa atenção. Veja que para nós não será necessário descobrir se o atributo e do tipo texto, data ou numérico. O método valorSql() se encarrega disto. Aqui a classe está representada pelo objeto objCon.
strSql = "Select * " & _
"From Cliente " & _
"Where codCliente = " & objCon.valorSql(argCodCliente)
7. Atributo classe: Para o cálculo da classe social a partir da renda foi utilizada uma tabela fictícia de exemplo, a qual não representa fielmente os valores publicados pelos órgãos competentes.
Outra funcionalidade importante que podemos encontrar nos códigos é o tratamento de erros com a instrução On Error. Apesar de não ser detalhado neste curso é altamente recomendado que o leitor pesquise e compreenda a sua utilização. Foram colocados exemplos simples nos métodos, porém o correto entendimento deste recurso possibilita alta capacidade de resolução de problemas na programação, evitando que possíveis e prováveis erros no projeto ou na implementação sejam visíveis para o usuário final de maneira inadequada.
Mais Funções Auxiliares
Neste projeto não utilizaremos códigos com auto-numeração diretamente nas tabelas. Sendo assim necessitaremos de uma função que realize esta tarefa.
Criaremos então um módulo padrão que conterá todas as funções auxiliares que necessitarmos durante o curso. Ele se chamará Funcoes e nossa primeira função será chamada proximoCodigo().
Este será o código da função:
Function proximoCodigo(argCampo As String, argTabela As String, _
Optional criterio As String = "") As Long
proximoCodigo = Nz(DMax(argCampo, argTabela, criterio), 0) + 1
End Function
Ela receberá como parâmetros o nome do campo, o nome da tabela e um critério de busca opcional, devolvendo um número que será o próximo código livre daquele campo numérico da tabela informada.
Desta maneira a função será genérica e servirá para qualquer tabela que contenha um campo chave de código numérico ordenado.
A Interface Gráfica
Para que possamos visualizar e manipular os dados dos clientes devemos criar um formulário com campos para preenchimento e botões de comando que coordenem as ações sobre os dados.
A seguir serão definidas as características para o formulário no qual iremos trabalhar com os dados dos objetos relativos aos clientes. As especificações de design são apenas sugestões, porém as informações de origem de dados, bloqueio de campos e formatos de dados são obrigatórias, sob pena de não obter a funcionalidade desejada. Estas especificações estarão marcadas com um asterisco vermelho ao lado.
No formulário teremos uma lista contendo os clientes cadastrados, um campo de texto para realizar buscas, alguns campos de texto para digitação das informações e os botões de comando para criar, salvar e excluir registros.
Obs: Somente as propriedades que foram alteradas para um valor diferente do padrão serão apresentadas. Para as demais utilize o padrão do sistema ou o valor que desejar, desde que não comprometa a funcionalidade do sistema.
Formulário
Nome: FCliente Largura: 20cm Altura: Cabeçalho (1cm) / Detalhe (10cm) Legenda: Sistema de Vendas Estilo da borda: fino Seletores de registro: Não Botões de navegação: Não Linhas divisórias: Não Barras de rolagem: Nenhuma Caixa de controle: Sim Botão Fechar: Sim Botões Min Max: Nenhum Popup: Sim Janela Restrita: Não
Controle Listbox
Nome: lstCliente * Origem da linha: SELECT Cliente.codCliente, Cliente.nomeCliente,
Format(Cliente.cpf,"000\.000\.000-00") AS cpf FROM Cliente
ORDER BY Cliente.nomeCliente; *
Tipo de Origem da Linha: Tabela/Consulta *
Coluna acoplada: 1 *
Número de colunas: 3 *
Largura das colunas: 0cm;5cm;3cm *
Largura: 8cm
Cor do fundo: Cinza claro
Controles Textbox
Nome: txtPesquisa * Cor do fundo: Amarelo Alinhamento: Esquerda Nome: txtCodigo * Ativado: Não * Bloqueado: Sim * Cor do fundo: Cinza Alinhamento: Centro Nome: txtCpf * Cor do fundo: Azul claro Máscara de entrada: 000.000.000\-00;;_ * Alinhamento: Centro Nome: txtNome * Cor do fundo: Azul claro Alinhamento: Esquerda Nome: txtEmail * Cor do fundo: Azul claro Alinhamento: Esquerda Nome: txtRenda * Cor do fundo: Azul claro Alinhamento: Direita Formato: Unidade Monetária Nome: txtClasse * Ativado: Não * Bloqueado: Sim * Cor do fundo: Cinza Alinhamento: Centro
Botões de Comando
Nome: btnNovo * Legenda: Novo Cor da Fonte: Azul escuro Nome: btnSalvar * Legenda: Salvar Cor da Fonte: Azul escuro Nome: btnExcluir * Legenda: Excluir Cor da Fonte: Vermelho escuro
Como sugestão de design os campos deverão estar posicionados conforme demonstrado na figura a seguir, assim como devem ser adicionadas as legendas dos campos, as quais não foram descritas anteriormente:

Códigos do Formulário
Para que nosso formulário seja capaz de manipular os dados dos objetos cliente deveremos implementar as funcionalidades necessárias que permitam criar um novo cliente, buscar um cliente já cadastrado, editar seus dados, salvá-lo ou excluí-lo.
Sendo assim criaremos algumas funções genéricas que sejam úteis para quantos procedimentos delas necessitem, reaplicando o conceito da reutilização de código. Além disso incluiremos os códigos dos campos que possuem eventos, além dos botões de comando.
Todos os códigos a seguir deverão ser colocados no módulo do formulário FCliente.
1. Pesquisa de clientes: Para facilitar a busca de clientes por qualquer parte do nome utilizaremos um campo de texto cujo valor será o elemento condicional para o código SQL que será atribuído ao controle lstCliente, atualizando sua propriedade Origem da Linha após cada alteração realizada no campo de pesquisa. Para isto devemos colocar o código no evento Ao Alterar do campo txtPesquisa.
Private Sub txtPesquisa_Change() lstCliente.RowSource = "SELECT Cliente.codCliente, Cliente.nomeCliente, " & _
"Format(Cliente.cpf,'000\.000\.000-00') AS cpf " & _
"FROM Cliente " & _
"WHERE nomeCliente Like '*" & txtPesquisa.Text & "*' " & _
"ORDER BY Cliente.nomeCliente;"
lstCliente.Requery
End Sub
2. Limpeza dos campos: Para efetuar a limpeza dos campos de preenchimento utilizaremos um procedimento genérico cuja função será a de atribuir o valor nulo a todos os campos de texto e enviar o foco ao campo txtCpf.
Private Sub limpaCampos() txtCodigo = Null txtCpf = Null txtNome = Null txtEmail = Null txtRenda = Null txtClasse = Null txtCpf.SetFocus End Sub
3. Novo registro: Para a criação de um novo registro em branco simplesmente iremos chamar o procedimento limpaCampos() no evento Ao Clicar do botão btnNovo.
Private Sub btnNovo_Click() Call limpaCampos End Sub
4. Atualização de campos: Assim como fizemos um procedimento genérico que limpa os campos para a criação de um novo registro teremos também um que preencha os campos com as informações de um objeto cliente passadas como parâmetro, ou seja, o procedimento recebe um objeto completo e lança os valores de seus atributos nos campos do formulário.
Private Sub atualizaCampos(argCliente As clsCliente) txtCodigo = argCliente.codCliente txtCpf = argCliente.cpf txtNome = argCliente.nomeCliente txtEmail = argCliente.email txtRenda = argCliente.renda txtClasse = argCliente.classe End Sub
5. Escolha de cliente: Já que teremos também que trabalhar com clientes já cadastrados, devemos implementar alguma maneira de recuperar suas informações. Faremos isto utilizando a Listbox lstCliente, que utilizará o procedimento atualizaCampos() para preencher os campos com as informações do objeto do cliente que foi clicado.
Private Sub lstCliente_Click()
Dim objCliente As New clsCliente
Dim codigoCliente As Long
codigoCliente = lstCliente.Value
If objCliente.obter(codigoCliente) Then
Call atualizaCampos(objCliente)
End If
End Sub
6. Montagem de um objeto: Esta também é uma função genérica que será utilizada por outros procedimentos ou funções. Seu objetivo é criar um novo objeto cliente, coletar os dados digitados nos campos, atribuir ao objeto criado, e devolvê-lo para quem chamou a função.
Private Function buscaCampos() As clsCliente
Set buscaCampos = New clsCliente
If IsNull(txtCodigo) Then
txtCodigo = proximoCodigo("codCliente", "Cliente")
End If
buscaCampos.codCliente = txtCodigo
buscaCampos.cpf = txtCpf
buscaCampos.nomeCliente = txtNome
buscaCampos.email = txtEmail
buscaCampos.renda = txtRenda
End Function
7. Salvando um cliente: Depois de informados os dados de um novo cliente, ou alterados os dados de um cliente já cadastrado, necessitaremos de um procedimento que efetue a gravação destes dados. Para isto o botão btnSalvar conterá o código necessário no evento Ao Clicar. Ele fará uso da função buscaCampos(), a qual montará o objeto a ser salvo, e também o método salvar() do objeto, apresentando uma mensagem ao usuário com o resultado da operação. Após salvar os dados de um cliente também deveremos atualizar a Listbox para que apresente estes dados, sejam eles novos ou apenas alterados.
Private Sub btnSalvar_Click()
Dim objCliente As clsCliente
If Not IsNull(txtCpf) And Not IsNull(txtNome) Then
Set objCliente = buscaCampos
If objCliente.salvar Then
MsgBox "O cliente foi salvo com sucesso.", vbInformation, _
"Salvar Cliente"
lstCliente.Requery
Call atualizaCampos(objCliente)
Else
MsgBox "Ocorreu um erro durante o salvamento.", vbExclamation, _
"Salvar Cliente"
End If
Else
MsgBox "Informe os dados do cliente.", vbExclamation, "Salvar Cliente"
End If
End Sub
8. Excluindo um cliente: Além de criar e alterar os dados de um cliente, é importante que também possamos excluí-lo definitivamente de nosso cadastro. Logo devemos também implementar a funcionalidade para o botão btnExcluir, que conterá o código necessário também no evento Ao Clicar. Ele também deverá fazer uso da função buscaCampos() para a montagem do objeto a ser excluído, pois caso contrário a classe não saberá que objeto deve ser excluído. Em seguida utilizaremos o método excluir() do objeto, apresentando uma mensagem ao usuário com o resultado da operação. É claro que após excluir um cliente também deveremos atualizar a Listbox para que a mesma reflita as alterações realizadas.
Private Sub btnExcluir_Click()
Dim objCliente As clsCliente
If Not IsNull(txtCodigo) Then
If MsgBox("Confirma a exclusão do registro?", vbQuestion + vbYesNo, _
"Excluir Cliente") = vbYes Then
Set objCliente = buscaCampos
If objCliente.excluir Then
MsgBox "O registro foi excluído com sucesso.", vbInformation, _
"Excluir Cliente"
lstCliente.Requery
Call limpaCampos
Else
MsgBox "Ocorreu um erro durante a exclusão.", vbExclamation, _
"Excluir Cliente"
End If
End If
End If
End Sub
Estes são os procedimentos e funções básicas para que a interface possa manipular os objetos. Não se esqueça de que para efetuar os testes deveremos utilizar um CPF válido devido à verificação realizada.
Sistema de Exemplo
A partir deste artigo será disponibilizado o link para download do sistema de vendas no estado de desenvolvimento em que se encontrar o projeto.
Recomendo aos estudiosos desenvolvedores que o consultem apenas para tirar dúvidas e realizar comparações. Aqueles que realmente quiserem aprender façam toda a codificação e a montagem das telas manualmente. Somente assim a sua mente irá se defrontar com as dificuldades do processo e assimilará os passos necessários para a resolução dos problemas e a conclusão dos objetivos.
Segue o link para download:
Como ainda não há uma tela principal abra o formulário FCliente diretamente na janela Banco de Dados (Access 2003-) ou no Painel de Navegação (Access 2007+).
Conclusão
Enfim demos início à parte mais empolgante do curso, na qual podemos ver o sistema realmente operando, manipulando os objetos. Pudemos ver como se dá a interação entre objetos, a verificação de atributos, a montagem de códigos SQL para busca, alteração, inserção e exclusão de dados, além de visualizar procedimentos simples de tratamento de erros.
Nunca é demais relembrar que o objetivo maior de todas as etapas do curso é apresentar de forma didática, da maneira mais simples possível, a utilização de objetos em projetos do Access/VBA. Sendo assim não considere as implementações apresentadas como o padrão de fato da programação. Muita coisa foi simplesmente omitida ou modificada, mesmo partindo dos próprios padrões que utilizo em meus projetos reais para que fosse alcançada a objetividade necessária ao entendimento por parte de usuários iniciantes ou com pouca experiência na POO.
A lição mais importante deste artigo foi realmente a visualização da dinâmica da utilização dos objetos na manipulação de informações, tanto na sua apresentação quanto na sua persistência.
A partir deste momento, creio, ficará cada vez mais fácil a percepção da operação com objetos, desde que o leitor compreenda bem o que foi visto até agora, pois estes conceitos iniciais são a base da orientação a objetos. Apesar de não contarmos com as outras faces da OO, como a herança por exemplo, com certeza a mente do leitor já começará a visualizar melhor as infinitas possibilidades que a metodologia fornece. Porém relembro que para conseguir dominar a técnica é imprescindível continuar treinando, criando seus próprios códigos, fazendo experiências, resolvendo problemas com a aplicação do paradigma, lendo outros materiais e compartilhando conhecimento, seja com colegas de trabalho, amigos ou em fóruns sobre o assunto.
No próximo artigo, que será muito parecido com este, faremos a implementação da classe Produto, com sua respectiva interface gráfica. Isto ajudará a massificar os conhecimentos adquiridos nesta etapa, pois tudo será relembrado.
Até o próximo...
Artigos Relacionados
Utilizando Classe no Access - Introdução
Utilizando Classe no Access - Parte 1 - Orientação a Objetos
Utilizando Classe no Access - Parte 2 - Programação OO no Access/Vba
Utilizando Classe no Access - Parte 4 - As Classes Auxiliares
Utilizando Classe no Access - Parte 5 - A Classe Cliente
Utilizando Classe no Access - Parte 6 - A Classe Produto
Utilizando Classe no Access - Parte 7 - As Classes Venda e Detalhe de Venda
Utilizando Classe no Access - Parte 8 - Finalização do Sistema
Utilizando Classe no Access - Parte 9 - Genesis: A Ferramenta Case
Utilizando Classe no Access - Parte 10 - Conclusão
Como estudar com o Pesquisador de Objetos
|
6 comentários Renato Novelli 25/08/2020 14:44:43 Mais uma vez, tenho o prazer de parabenizá-lo pelo excelente artigo! O material aqui publicado tem melhorado muito meu entendimento acerda de programação O.O., além do que tem tornado meus aplicativos melhores e seu código muito mais legível! Muito obrigado por compartilhar essas informações valiosíssimas! Mauricio Mendes 10/08/2020 08:24:59 Chou de bola, ou melhor, chou de aula, adorei, estou esperando o proximo. Plinio Mabesi 02/08/2020 21:10:38 Olá mais uma vez Márcio e Torres, e agora o Cleverson! Obrigado a todos e continuem conosco... cleverson ribeiro - Manaus/AM 02/08/2020 19:20:05 grande curso. já tá na minha biblioteca na seção BESTSELER. Abraços. Torres Forte - PA 29/07/2020 12:14:53 Cara esse curso e realmente impolgante.... estou pronto pra o proximo... ABRAÇO Márcio Melo - Rio de Janeiro/RJ 27/07/2020 01:15:09 Imagina um banco de dados todo construído em O.O., teria uma forte consistência em todos os procedimentos, o acesso a tabela controlado otimizando a rede, evitária o problema de conrrupção de tabela, traria outra vida ao access, parabéns pelos artigos, postei em meu site (http://iniciantejoomla.com/web-links/access) indicando essa verdadeira fonte de conhecimento, forte abraço a todos... Sou mais Brasil!!! |

