VB - Meu primeiro projeto orientado a objetos : Cadastro de Clientes


No artigo - Criando classes para Gerenciar dados - eu disse que iria voltar ao assunto abordando um projeto prático. Pois aqui estamos cumprindo com o prometido. Este artigo vai abordar a criação de um projeto simples orientado a objetos . Vamos criar um projeto para gerenciar o cadastro de clientes usando o conceito de orientação a objetos. (Para uma introdução ao assunto leia o artigo : Criando Classes no VB)

Uma das primeiras coisas que vamos fazer neste projeto é separar as regras de negócios da interface. Para fazer isto vamos criar dois projetos : o programa executável que irá conter a interface com o usuário e uma biblioteca - DLL - contendo as classes com as regras de negócios.

Irei mostrar também como otimizar o código usando diversos conceitos da ferramenta Visual Basic . Você terá assim uma visão geral de como usar a orientação a objetos e de como criar um código otimizado.

A forma mais correta de iniciar o projeto seria adotar alguns procedimentos padrões para implementar a solução adequada , dentre os quais relacionamos :

  1. Criar uma definição de aplicativo
  2. Definir o problema do negócio
  3. Definir as especificações funcionais do aplicativo
  4. Estabelecer os requisitos do aplicativo
  5. Realizar a modelagem do aplicativo e a Modelagem dos dados
  6. Projetar as classes - propriedades e métodos
  7. Modelar os objetos do aplicativo e os objetos de negócios
  8. Criar a interface de apresentação e interação com o usuário
  9. Definir a arquitetura física
  10. Agrupar classes e componentes
  11. Documentar o aplicativo e a arquitetura física

Uma lista e tanto não é mesmo ? Porém , devido a simplicidade do projeto , iremos passar para a fase seguinte : criar o banco de dados , as tabelas e as classes.

Introdução

O sistema para Cadastro de clientes deverá possuir as seguinte funcionalidades:

  1. Acesso aos dados usando a ADO
  2. Permitir a inclusão de novo Cliente
  3. Permitir a exclusão de cliente já cadastrado
  4. Permitir a alteração dos dados de um cliente cadastrado
  5. Permitir a localização de qualquer cliente cadastrado
  6. Emitir um relatório dos clientes cadastrados.

Vamos criar o banco de dados Cadastro.mdb e a tabela Clientes. Podemos fazer isto usando o Microsoft Access. A estrutura da tabela criada no Access é a seguinte:

- O campo ClienteCodigo é do tipo Autonumeração , e é também a chave primária da tabela. Desta forma este campo não poderá ser duplicado. Com isto evitamos um cliente seja cadastrado com um código já utilizado.
Vamos criar agora o primeiro projeto no VB. O projeto será do tipo ActiveX DLL e conterá as regras de negócios. Inicie o VB e na Janela - New Project - selecione a opção ActiveX DLL e altere o nome do projeto para - CadastroDLL. (Veja na figura ao lado como deverá estar o seu projeto)

- Criando a Classe que realiza a conexão com o banco de dados

Vamos criar a classe - cConexao - ela é responsável pela conexão com o banco de dados. Altere nome do módulo de classe para - cConexao - e insira o seguinte código no módulo:

Private cConexao As ADODB.Connection
Public Property Get Conexao() As ADODB.Connection
    Set Conexao = cConexao
End Property

Private Sub Class_Initialize()
Set cConexao = New ADODB.Connection
cConexao.ConnectionString =
"Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=C:\Cadcli\Cadastro.mdb"
cConexao.Open
End Sub

Pronto ! com este código criamos a classe cConexao que será responsável pela conexão com o banco de dados cadastro.mdb localizado no diretório c:\cadcli .

- Criando a Classe para gerenciar os clientes

Vamos agora criar a classe que irá gerenciar as operações de inclusão , atualização , exclusão e localização dos clientes. Adicione um novo módulo de classe e altere o seu nome para cClientes.

Vamos agora definir as propriedades da classe cClientes e a variável objeto rsClientes para realizar a conexão com a tabela Clientes do banco de dados cadastro.mdb . Insira o código abaixo na seção - General Declarations - da Classe :

Option Explicit

Private cConexao As ADODB.Connection
Private mClienteCodigo as Long
Private mClienteNome As String
Private mClienteEndereco As String
Private mClienteCidade As String
Private mClienteCep As String
Private mClienteUF As String
Private mClienteFone As String
Private mClienteCelular As String
Private mClienteEmail As String
Private mClienteNascimento As Date
Private mClienteSexo As String
Private mClienteObservacao As String

Private rsClientes As New ADODB.Recordset
Const errNao_Consegui_Localizar = vbObjectError + 512 + 2
Const errNao_Consegui_Salvar_Dados = vbObjectError + 512 + 3

Incluido as Propriedades na classe cClientes

Após criar uma classe você pode incluir as suas próprias propriedades. Essas propriedades são as propriedades dos objetos criados a partir da classe. Cada objeto que você criar a partir da classe terá então o seu conjunto de propriedades, e essas propriedades permitirão ao usuário obter informação sobre o objeto. Existem duas maneiras atribuir uma propriedade a uma classe :

  1. Definindo um variável pública

  2. Usando o procedimento Property

Criando uma variável Pública - Voce cria uma variável pública usando a declaração do enunciado da variável com a palavra Public, assim:

Public var1 as string

A declaração do enunciado pode aparecer na secção Declarations do módulo da classe ou em qualquer procedure Sub na classe. Como uma variável pública é visível por toda aplicação assim que ela é criada , qualquer parte do programa pode alterar o valor da variável, e , isto pode lhe causar problemas , por isso este método de criação de variáveis deve ser evitado ao máximo.

Usando o procedimento Property - Este é um método melhor de criar variáveis em classes, pois este procedimento fornece a interface para com as propriedades do objeto e ao mesmo tempo permite a escrita de código para verificar que os dados adequados estão sendo passados para classe. Isto proteje as funções da classe de falharem quando receberem dados inadequados. Ele permite também criarmos propriedades somente-leitura. Existem três tipos de procedimentos Property disponíveis:

Procedure Tipo Função
Property Let Aceita o valor da uma propriedade (Property)de um programa que foi chamado Usada para definir o valor de uma propriedade
Property Get Envia o valor da propriedade ao programa. Usada para retornar o valor de um propriedade.
Property Set Caso especial. Usado se o tipo de variável a ser definida for um objeto.

Para criar um procedimento Property , voce deve estar na janela de código para a classe com a qual estiver operando. Selecione no menu Tools a opção Add Procedure. Isto irá abrir a janela Add Procedure. Ver abaixo:

opção Add Procedure no menu Tools - cria um procedimento Property A janela Add Procedure

Na janela Add Procedure , informe o nome para o procedimento ( este será onme da propriedade para o seu objeto), e a seguir selecione a opção Property (como mostrada acima) . Clique a seguir em OK. Pronto , voce criou um procedimento Property Let e um procedimento Property Get no seu módulo de classe. Assim para criar a um procedimento Property chamado - Conexao - teremos o seguinte:

Definindo o valor de uma Propriedade - Observe que o procedimento Property Let incluiu um argumento ao procedimento. Este argumento é o valor que é passado de um programa pela propriedade . Voce pode mudar o nome do argumento e pode definir o tipo da variável . O código do procedimento Property Let recebe o valor do argumento, realiza a validação e atribui o valor para uma variável privada no módulo de classe. Para a propriedade Nome da classe cClientes teremos o seguinte código:

Public Property Get Nome() As String
    Nome = mClienteNome
End Property

Public Property Let Nome(ByVal Valor As String)
   mClienteNome = Valor
End Property

Repitindo a operação para as demais propriedades teremos o seguinte código para classe cClientes:

Public Property Get codigo() As Long
    codigo = mClienteCodigo
End Property
Public Property Let codigo(ByVal valor As Long)
  mClienteCodigo = valor
End Property
Public Property Get Nome() As String
  Nome = mClienteNome
End Property

Public Property Let Nome(ByVal Valor As String)
  mClienteNome = Valor
End Property

Public Property Get Endereco() As String
  Endereco = mClienteEndereco
End Property

Public Property Let Endereco(ByVal Valor As String)
  mClienteEndereco = Valor
End Property

Public Property Get Cidade() As String
  Cidade = mClienteCidade
End Property

Public Property Let Cidade(ByVal Valor As String)
  mClienteCidade = Valor
End Property

Public Property Get Cep() As String
  Cep = mClienteCep
End Property
Public Property Let Cep(ByVal Valor As String)
  mClienteCep = Valor
End Property

Public Property Get UF() As String
  UF = mClienteUF
End Property
Public Property Let UF(ByVal Valor As String)
  mClienteUF = Valor
End Property

Public Property Get Fone() As String
  Fone = mClienteFone
End Property

Public Property Let Fone(ByVal Valor As String)
  mClienteFone = Valor
End Property

Public Property Get Email() As String
  Email = mClienteEmail
End Property

Public Property Let Email(ByVal Valor As String)
  mClienteEmail = Valor
End Property

Public Property Get Nascimento() As Date
  Nascimento = mClienteNascimento
End Property

Public Property Let Nascimento(ByVal Valor As Date)
  mClienteNascimento = Valor
End Property

Public Property Get Sexo() As String
  Sexo = mClienteSexo
End Property

Public Property Let Sexo(ByVal Valor As String)
  mClienteSexo = Valor
End Property

Public Property Get Observacao() As String
  Observacao = mClienteCidade
End Property

Public Property Let Observacao(ByVal Valor As String)
  mClienteObservacao = Valor
End Property
Public Property Set Conexao(Valor As ADODB.Connection)
  Set oConexao = Valor
End Property

Observe que para a propriedade Conexao usamos um procedimento Property Set ; para algumas de suas propriedades voce irá querer estar apto a passar um objeto, um controle ou qualquer outro objeto a um módulo de classe. Neste caso voce deve usar o procedimento Property Set e não o procedimento Property Let para dar á propriedade um valor . Quando você passa um objeto , a variável privada que você esta usando no módulo de classe deve ser to tipo Objeto (Object).

A propriedade Conexao é de apenas leitura , pois apenas definimos um valor para a propriedade usando a procedure Property Set.

O campo código é do tipo autonumeração e é incrementado automaticamente pelo Jet.

Nota : Um campo AutoNumeração é um tipo de dados de campo que armazena automaticamente um número exclusivo para cada registro à medida que este é adicionado à tabela. Três tipos de número podem ser gerados: seqüencial (incremento de 1), aleatório e Código de Replicação (utilizado pelo Gerenciador de Replicação para garantir a integridade dos dados em bancos de dados replicados). Os números gerados por um campo AutoNumeração não podem ser excluídos ou modificados.

Criando métodos para a classe cClientes

Os métodos de uma classe são as funções e procedimentos que podemos inserir no módulo da classe. Os métodos podem ter as seguintes visibilidade :

Vamos criar o método Localizar para a classe cClientes . Este método terá como objetivo verificar se um determinado cliente esta presente na base de dados Clientes do banco de dados Cadastro.mdb. O parâmetro que deverá ser passado para o método será o código do cliente , pois não pode haver cliente com códigos iguais. Se um cliente for localizado o retorno da função será True(Verdadeiro) caso contrário teremos um retorno False ( falso ).

Abaixo temos o código para o método Localizar :

Public Function Localizar(nCodigo_Cliente As Long) As Boolean

On Error GoTo trata_erro
Set rsClientes = New ADODB.Recordset

If nCodigo_Cliente <> 0 Then
  rsClientes.Open "Select * from Clientes " & _
  "Where ClienteCodigo = " & nCodigo_Cliente, cConexao

  If rsClientes.EOF = True And rsClientes.BOF = True Then
    Err.Raise errNao_Consegui_Localizar, "Clientes - Localizar ", "Cliente não localizado !"
  End If
  Codigo = rsclientes(0)         'codigo
  Nome = rsClientes(1) 	       'nome
  Endereco = rsClientes(2)       'endereco
  Cidade = rsClientes(3)         'cidade
  Cep = rsClientes(4)            'cep
  UF = rsClientes(5)             'uf
  Fone = rsClientes(6)           'fone
  Celular = rsClientes(7)        'Celular
  Email = rsClientes(8)          'email
  Nascimento = rsClientes(9)     'nascimento
  Sexo = rsClientes(10)          'sexo
  Observacao = rsClientes(11)    'observacao

  Localizar = True
Else
  Err.Raise errNao_Consegui_Localizar, "Clientes - Localizar ", "Cliente não localizado !"
End If

Exit Function

trata_erro:
  MsgBox Err.Number & " - " & Err.Description
  Localizar = False
End Function

Obs: Prefira usar a notação rs(indice) ao invés de rs!campo ou rs("campo") é mais rápido

O método Localizar recebe como parâmetro um valor inteiro longo e usando uma instrução SQL - SELECT - verifica se o cliente esta cadastrado ; retornando True ou False e exibindo uma mensagem de erro com número e descrição. Após terminar vamos compilar o projeto CadastroDLL.vbp na opção : File -> Make CadastroDLL.dll...

Testando o método Localizar

Para testar o método localizar vamos criar um projeto com um formulário para exibir os campos da tabela clientes. Vamos chamar o formulário de frmclientes ; o seu layout deverá ser igual ao da figura abaixo:

Private Sub Form_Load()
 Set cliente = New cClientes
 Set Conectar = New cConexao
 Set cliente.Conexao = Conectar.Conexao

 If cliente.Localizar(1) Then
   mostra_dados
 End If
End Sub
Obs: O controle Text12 deve possuir a
propriedade TabStop igual a False 

Acima , a direita , temos o código do evento Load do formulário . Note que estamos instanciando a Classe cClientes e a Classe cConexao e a seguir invocamos o método Localizar da classe cliente solicitando a localização do cliente cujo codigo seja igual a 1.

Antes de prosseguir você deve fazer uma referência ao arquivo DLL criado anteriormente e também deverá referenciar a ADO 2.X . Veja abaixo:

Para que o projeto funcione você deve inserir a declaração da variável cliente como do tipo Classe cClientes na seção General Declarations do formulário frmclientes

Option Explicit
Private cliente As cClientes

A variável conectar deve ser visível em todo o projeto ; inclua um módulo (.bas) no projeto e declare a variável conectar como sendo do tipo da classe cConexao:

Public Conectar As cConexao

Abaixo temos o código da procedure mostra_dados que atribui a cada caixa de texto o valor referente a cada propriedade da classe cClientes. Ao lado o resultado para o código de valor igual a 1.

Private Sub mostra_dados()
  Text1.Text = cliente.Nome
  Text2.Text = cliente.Endereco
  Text3.Text = cliente.Cidade
  Text4.Text = cliente.Cep
  Text5.Text = cliente.UF
  Text6.Text = cliente.Fone
  Text7.Text = cliente.Celular
  Text8.Text = cliente.Email
  Text9.Text = cliente.Nascimento
  Text10.Text = cliente.Sexo
  Text11.Text = cliente.Observacao 
  Text12.text = cliente.Codigo
End Sub

Executando o projeto temos o resultado exibido no formulário. Concluímos que nossa classe esta funcional, vamos então continuar...

Incluindo dados - o método Incluir da classe cClientes

Nossa próxima etapa será criar o método Incluir para a classe cClientes de forma a poder incluir um novo cliente na base de dados.

Abra o módulo de classe cClientes e insira o código a seguir criando a função incluir que irá retornar True caso a inclusão ocorra com sucesso e False caso contrário.

Public Function incluir() As Boolean

On Error GoTo Err_Incluir

Dim mSQL As String
Dim lRecordsAffected As Long

mSQL = " Insert into Clientes (" _
		& "ClienteNome," _
		& "ClienteEndereco," _
		& "ClienteCidade," _
		& "ClienteCep," _
		& "ClienteUF," _
		& "ClienteFone," _
		& "ClienteCelular," _
		& "ClienteEmail," _
		& "ClienteNascimento," _
		& "ClienteSexo," _
		& "ClienteObservacao" _
	& ") Values (" _
		& ajusta_string(mClienteNome) & "," _
		& ajusta_string(mClienteEndereco) & "," _
		& ajusta_string(mClienteCidade) & "," _
		& ajusta_string(mClienteCep) & "," _
		& ajusta_string(mClienteUF) & "," _
		& ajusta_string(mClienteFone) & "," _
		& ajusta_string(mClienteCelular) & "," _
		& ajusta_string(mClienteEmail) & "," _
		& "#" & mClienteNascimento & "#" & "," _
		& ajusta_string(mClienteSexo) & "," _
		& ajusta_string(mClienteObservacao) & ")"

cConexao.Execute mSQL, lRecordsAffected, adCmdText + adExecuteNoRecords
incluir = True
Exit Function

Err_Incluir:
	incluir = False
End Function

Vamos analisar o código acima:

1- Eu estou usando uma instrução SQL - INSERT INTO para incluir um novo cliente na tabela Clientes.

2- A seguir utilizo a classe cConexão para Executar a instrução SQL . Note que usei as opções adCmdText + adExecuteNoRecords . Por que fiz isto ? e Por que não usei o método addnew sobre um objeto recordset ?

R - A utilização de um recordset iria onerar mais o sistema pois teria que gerenciar o objeto criado na conexão , como estou apenas inserindo registros eu não preciso de um criar um objeto Recordset. Eu enfatizo isto usando a opção adExecuteNoRecords para informar que eu não quero retornar nenhum conjunto de registros apenas incluir os dados na tabela Clientes. Com isto temo um melhor desempenho além de ser mais elegante e escalável.

3- Observe que quando temos dados do tipo string temos que realizar uma formatação inserindo os dados entre aspas duplas ("") . A função ajusta_string faz este serviço para nós. Veja o código da função :

Private Function ajusta_string(str_valor)
   ajusta_string = Chr(34) & str_valor & Chr(34)
End Function
Aqui chr(34) significa aspas duplas (")

4- Note também que para dados do tipo - Data - (ClienteNascimento) eu tive que formatar o dado colocando a cerquilha (#) de forma a obter uma data no válida para o SQL. Ex: Se ClienteNascimento for igual a 01/05/1965 , teremos : #01/05/1965# .

Agora para testar o método incluir vamos usá-lo invocando-o a partir do formulário frmclientes. Eu criei a função inclui_regs para efetivamente fazer a inclusão dos dados na tabela clientes. Veja a baixo o código do botão - Incluir :

Private Sub Command1_Click(Index As Integer)
    Select Case Index
      Case 0
     If Command1(0).Caption = "&Incluir" Then
          limpa_regs
          Command1(0).Caption = "&Gravar"
          desativa_botoes
          Text1.SetFocus
     ElseIf Command1(0).Caption = "&Gravar" Then
          inclui_regs
          Command1(0).Caption = "&Incluir"
          ativa_botoes
     End If
      Case 1
        'excluir_regs
      Case 2
        'alterar_regs
      Case 3
         Unload Me
End Select
End Sub
O código destacado em azul é oque nos interessa.

Nele eu verifico a propriedade Caption do botão e se

a mesma for igual a &Incluir então eu faço o seguinte:

  1. Limpo os controles do formulário - Limpa_regs
  2. Mudo a caption para &Gravar
  3. desativo os botões : Alterar e Excluir
  4. Ponho o foco no controle text1.text

A procedure limpa_regs tem o seguinte código :

Private Sub limpa_regs()
Dim i As Integer
For i = 0 To Form1.Controls.Count - 1
 If TypeOf Form1.Controls(i) Is TextBox Then
 Form1.Controls(i).Text = ""
End If
Next
End Sub
Aqui eu percorro a coleção de controles no objeto Form1 e

se o tipo de controle for um TextBox eu atribuo o valor ""

ao mesmo.

Os procedimento ativa_botoes e desativa_botoes apenas alteram a propriedade enabled do controle command

Private Sub desativa_botoes()
  Command1(1).Enabled = False 
  Command1(2).Enabled = False         
End Sub
Private Sub ativa_botoes()
   Command1(1).Enabled = True
   Command1(2).Enabled = True
End Sub

A rotina inclui_regs é que é realmente importante , veja o seu código a seguir:

Private Sub inclui_regs()
If (Len(Text1.Text)) = 0 Then
  MsgBox "Informe o nome do Cliente ! ", vbCritical, "Erro"
  Exit Sub
End If

  cliente.Nome = "" & Text1.Text
  cliente.Endereco = "" & Text2.Text
  cliente.Cidade = "" & Text3.Text
  cliente.Cep = "" & Text4.Text
  cliente.UF = "" & Text5.Text
  cliente.Fone = "" & Text6.Text
  cliente.Celular = "" & Text7.Text
  cliente.Email = "" & Text8.Text
  cliente.Nascimento = Format(CDate(Text9.Text), "dd/mm/yyyy")
  cliente.Sexo = "" & Text10.Text
  cliente.Observacao = "" & Text11.Text

If (Not cliente.incluir) Then
  MsgBox "Não foi possivel incluir cliente !", vbCritical, "Erro"
  Exit Sub
End If
End Sub

Observe na figura ao lado que ao usarmos a classe - cliente - temos exibidos suas propriedades e métodos ( até agora temos só doi métodos : incluir e localizar )

Agora é só rodar o projeto , clicar no botão incluir e verificar que os dados estão sendo realmente gravados pelo método incluir da classe cClientes.

Incluímos um ícone para poder localizar os Clientes pelo código . Aqui usamos o controle Image e no evento click inserimos o seguinte código :

Private Sub Image1_Click()
On Error GoTo localiza_erro
Dim resposta As Long

resposta=InputBox("Informe o Código do Cliente a localizar", "Código Cliente", 1, 3500, 3000)
 If resposta <> 0 Then
   If cliente.Localizar(resposta) Then
      mostra_dados
   Else
      MsgBox "Não foi possivel localizar o cliente !", vbCritical, "Localizar"
   End If
 End If
 Exit Sub

 localiza_erro:
 If Err.Number = 13 Then
   Resume Next
 Else
   MsgBox Err.Number & " - " & Err.Description
 End If
End Sub

neste código é solicitado o número do código do cliente e em seguinte usamos o método localizar da classe cClientes para localizar e exibir os dados no formulário.

Obs: Note que o campo ClienteCodigo é do tipo autonumeração e por isso é incrementando automaticamente quando da inclusão de um cliente e não é gerenciado pelo código. Apenas usamos este campo para exibir o código do cliente.

Escrevendo os métodos Excluir e Alterar

Vamos acrescentar a nossa classe cClientes os dois últimos métodos que precisamos : Excluir e Alterar

O método Alterar irá efetuar alterações nos registros da tabela e deverá receber como parâmetro o código do cliente que desejamos alterar . O código é o seguinte :

Public Function Alterar(nCodigo_Cliente As Long) As Boolean

On Error GoTo err_Alterar
Dim mSQL As String

mSQL = " Update " _
        & " Clientes " _
        & " Set " _
          & " ClienteNome = " & ajusta_string(mClienteNome) & "," _
          & " ClienteCidade = " & ajusta_string(mClienteCidade) & "," _
          & " ClienteCep = " & ajusta_string(mClienteCep) & "," _
          & " ClienteUF = " & ajusta_string(mClienteUF) & "," _
          & " ClienteFone = " & ajusta_string(mClienteFone) & "," _
          & " ClienteCelular = " & ajusta_string(mClienteCelular) & "," _
          & " ClienteEmail = " & ajusta_string(mClienteEmail) & "," _
          & " ClienteNascimento = " & ajusta_string(mClienteNascimento) & "," _
          & " ClienteSexo = " & ajusta_string(mClienteSexo) & "," _
          & " ClienteObservacao = " & ajusta_string(mClienteObservacao) _
       & " Where " _
          & " ClienteCodigo = " & CLng(nCodigo_Cliente)

cConexao.Execute mSQL, Alterar, adCmdText + adExecuteNoRecords
Exit Function

err_Alterar:
Alterar = False

End Function

Este código deverá esta na classe cClientes. Usamos a instrução SQL UPDATE/SET para efetivar as alterações feitas nos dados.

O método Excluir irá excluir os dados da tabela Clientes usando como parâmetro identificador o codigo do cliente. O código é o seguinte:

Public Function Excluir(nCodigo_Cliente As Long) As Boolean

On Error GoTo err_Excluir
Dim mSQL As String

mSQL = " Delete " _
         & " From Clientes " _
         & " Where " _
            & " ClienteCodigo = " & CLng(nCodigo_Cliente)

cConexao.Execute mSQL, Excluir, adCmdText + adExecuteNoRecords
Exit Function

err_Excluir:
Excluir = False

End Function

Aqui usamos a instrução SQL DELETE para excluir os dados da tabela clientes.

Para terminar só temos que invocar os métodos no formulário do projeto e testar se tudo esta OK .

Voltando ao projeto do formulário frmclientes o código para excluir , alterar e incluir registros associados aos botões de comando fica assim :

Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
  If Command1(0).Caption = "&Incluir" Then
     limpa_regs
     Command1(0).Caption = "&Gravar"
     desativa_botoes
     Text1.SetFocus
  ElseIf Command1(0).Caption = "&Gravar" Then
     inclui_regs
     Command1(0).Caption = "&Incluir"
     ativa_botoes
  End If
Case 1
   If MsgBox("confirma EXCLUSÃO Deste registro ? ", vbYesNo, "EXCLUIR") = vbYes Then
     Excluir_regs
   End If
Case 2
   Alterar_regs
Case 3
   Unload Me
End Select
End Sub

O código que nos interessa esta em azul , nele invocamos as rotinas : Excluir_regs e Alterar_regs . Vejamos o código de cada uma.

A rotina Alterar_regs tem o seguinte código:

Private Sub Alterar_regs()

If (Len(Text1.Text)) = 0 Then
  MsgBox "Informe o nome do Cliente ! ", vbCritical, "Erro"
  Exit Sub
End If

cliente.Nome = "" & Text1.Text
cliente.Endereco = "" & Text2.Text
cliente.Cidade = "" & Text3.Text
cliente.Cep = "" & Text4.Text
cliente.UF = "" & Text5.Text
cliente.Fone = "" & Text6.Text
cliente.Celular = "" & Text7.Text
cliente.Email = "" & Text8.Text
cliente.Nascimento = Format(CDate(Text9.Text), "dd/mm/yyyy")
cliente.Sexo = "" & Text10.Text
cliente.Observacao = "" & Text11.Text

If (Not cliente.Alterar(Text12.Text)) Then
   MsgBox "Não foi possivel ALTERAR dados do cliente !", vbCritical, "Erro"
   Exit Sub
Else
   MsgBox " Registro : " & Text12.Text & " ALTERADO com sucesso ! ", vbInformation, "ALTERAR"
End If
End Sub

Aqui associamos o conteúdo das caixas de texto as propriedades definidas na classe e invocamos o método Alterar informando o código do cliente , no caso , o conteúdo da caixa de texto - text12.text.

O código para rotina Excluir_regs é o dado abaixo:

Private Sub Excluir_regs()

If (Not cliente.Excluir(Text12.Text)) Then
   MsgBox "Não foi possivel Excluir os dados do cliente !", vbCritical, "EXCLUIR"
   Exit Sub
Else
   MsgBox " Registro : " & Text12.Text & " EXCLUIDO com sucesso ! ", vbInformation, "ALTERAR"
   cliente.Localizar (CLng(Text12.Text) - 1)
   mostra_dados
End If

End Sub

Neste código invocamos o método Excluir informando o código contido na caixa de texto - Text12.text . Se o registro for excluido temos que mover o ponteiro para o registro anterior ( text12.text - 1) e exibir os dados na tela - mostra_dados.

Pronto criamos a classe clientes com propriedades e métodos e a deixamos pronta para funcionar. Os testes que realizamos mostram que a Classe funciona.

Embora simples mostrados que trabalhar com classes não um bicho de sete cabeças. O seu código fica mais limpo , escalável e portátil para o VB.NET....

Pegue o projeto aqui : - Classe_Clientes.zip , e , Até mais.....


Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira...

Quer aprender C# ??

Chegou o Super DVD C# com exclusivo material de suporte e vídeo aulas com curso básico sobre C#

Veja também os cursos em Vídeo Aulas :

  Gostou ?   Compartilhe no Facebook    Compartilhe no Twitter

Referências:


José Carlos Macoratti