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 :
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:
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.ConnectionPublic Property Get Conexao() As ADODB.Connection Set Conexao = cConexao End Property Private Sub
Class_Initialize() |
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 :
Definindo um variável pública
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:
|
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Basic .NET - aquecendo as turbinas