VB.NET -  Cadastro de Clientes usando classes e conceitos OO

 

Este é um artigo para iniciantes e tem como objetivo mostrar como você pode usar classes e alguns conceitos OO como herança , composição e polimorfismo em uma aplicação usando banco de dados.

 

Embora eu esteja apresentando neste artigo uma aplicação completa e funcional eu não me preocupei com alguns aspectos que , em uma aplicação real para um ambiente de produção , deveriam ser implementados visando maior robustez e escalabilidade. Estou falando de um tratamento de erros mais consistente , de uma definição melhor dos métodos da classes usadas no artigo e de algumas considerações de desempenho que prefiro não comentar para não me alongar mais.

 

Seria bom , para quem esta começando agora no VB.NET , ler meus dois artigos publicados onde eu apresento a criação de um programa para cadastro de clientes :

Neste artigo eu vou estar criando uma aplicação do tipo Windows Forms usando a linguagem VB.NET que acessa um banco de dados Access e tem com a finalidade de gerenciar um cadastro de clientes.

Uma das primeiras coisas a fazer é criar o banco de dados , via código ou usando o Microsoft Access. Para o exemplo deste artigo eu criei o banco de dados Cadastro.mdb que contém a tabela Clientes cuja estrutura é exibida ao lado:


Se você nunca usou classes e não conhece os conceitos básicos da programação orientada a objetos seria bom ler meus artigos a respeito antes de prosseguir :

Geralmente os programadores que usam o Visual Basic para criar aplicações para banco de dados usam aquele modelo de programação conhecido como ONE-BUTTON-CLICK , explicando melhor : cria-se um formulário e coloca-se todo o código em um botão que é responsável por fazer quase tudo : conexões com banco de dados , validações de regras de negócio , apresentação da interface , etc...

 

Este estilo de programação se propaga por diversos fatores entre eles o fato do VB ser uma ferramenta RAD muito fácil de usar : basta arrastar controles para compor rapidamente um formulário com diversos itens sem precisar digitar um única linha de código.

 

Programar neste estilo pode ser até fácil mas é muito difícil dar manutenção ,  os programas têm que ser praticamente reescritos a cada alteração significativa , o desempenho é baixo , não existe escalabilidade , portabilidade , etc...

 

Neste artigo vou mostrar como você pode separar a camada de apresentação das regras de negócio usando classes e alguns conceitos OOP.

 

O projeto Cadastro de clientes irá conter duas classes que foram criadas

A primeira coisa que fazemos quando vamos definir um objeto é pensar em suas propriedades e ações. Assim um cliente , para o nosso escopo, deverá possuir as seguintes propriedades e ações : (Você pode discordar da minha implementação e criando e definindo um objeto cliente com diferentes propriedades e ações.)

As definições acima são feitas após uma análise de requisitos do sistema com a utilização de ferramentas que auxiliam na construção de um modelo para o negócio.

 

Nota:

Um dos primeiros artefatos a ser produzido são os diagramas de casos de uso para o sistema. Como exemplo para a nossa aplicação abaixo temos o diagrama de casos de uso feito usando a versão trial da ferramenta oferecida pela Pacestar que você pode obter em : http://www.pacestar.com/uml/trial.htm:

 

Meu cliente terá os atributos :  codigo , nome, endereco , cidade , estado , telefone e email

Meu cliente poderá efetuar as seguintes ações (métodos) : incluirNovoCliente, atualizaCliente, excluirCliente , lista_Clientes , lista_Todos_Clientes

 

Um objeto de acesso a dados deverá possuir o conhecimento relacionado com a conexão e com o tratamento dos dados da aplicação. Assim para a nossa aplicação a classe AcessoBD deverá possuir os seguintes métodos :

O Object Browser é uma ferramenta que no ajuda a visualizar os métodos e propriedades de uma classe criada em um projeto no VS.NET. Abaixo temos as figuras que exibem os métodos para as classes AcessoBD e Clientes:

 

Nota : Para usar o Object Browser , abra a sua aplicação e no menu View selecione Object Browser.

 

classe AcessoBD : métodos
classe Clientes : métodos e propriedades


Nossa aplicação possuirá somente um formulário - frmClientes - onde iremos ter as funcionalidades de cadastrar clientes e exibir uma relação dos clientes cadastrados. Abaixo temos a figura do formulário usado na aplicação:
 

 

Neste formulário estou usando os seguintes controles :

Vamos iniciar exibindo código da classe AcessoBD que será responsável pela conexão e as ações de tratamento dos dados da aplicação. No menu Project escolha Add | Class Module e altere o nome do arquivo para AcessoBD.vb ; a seguir insira o código abaixo no arquivo:

 

Imports System
Imports System.Data
Imports System.Data.sqlclient
Imports System.Data.OleDb
Public Class AcessoBD
    Function Cria_Conexao_OleDb(ByVal strConexao As String) As OleDbConnection
        Dim conexaoOleDb As OleDbConnection
        If strConexao.ToLower.IndexOf("provider=") >= 0 Then
            conexaoOleDb = New OleDbConnection(strConexao)
            conexaoOleDb.Open()
            Return conexaoOleDb
        End If
    End Function

    Function cria_DataReader_OleDb(ByVal conexaoOleDb As OleDbConnection, ByVal strSQL As String) As OleDb.OleDbDataReader
        Dim comando As New OleDbCommand(strSQL, conexaoOleDb)
        Dim dr As OleDbDataReader = comando.ExecuteReader(CommandBehavior.CloseConnection)
        comando.Dispose()
        Return dr
    End Function

    Function cria_DataAdapter_OleDb(ByVal conexaoOleDb As OleDbConnection, ByVal strSQL As String) As OleDbDataAdapter
        Dim da As New OleDbDataAdapter(strSQL, conexaoOleDb)
        Return da
    End Function

    Function cria_DataSet_OleDb(ByVal conexaoOleDb As OleDbConnection, ByVal strSQL As String) As DataSet
        Dim da As New OleDbDataAdapter(strSQL, conexaoOleDb)
        Dim ds As New DataSet
        da.Fill(ds)
        Return ds
    End Function

    Function cria_DataSet_OleDb(ByVal da As OleDbDataAdapter, ByVal tabela As DataTable) As DataSet
        Dim ds As New DataSet
        da.Fill(tabela)
        Return ds
    End Function

    Function cria_DataSet_OleDb(ByVal da As OleDbDataAdapter) As DataSet
        Dim ds As New DataSet
        da.Fill(ds)
        Return ds
    End Function

    Function cria_Comando_OleDb(ByVal conexao As OleDbConnection, ByVal strSQL As String) As OleDbCommand
        Dim comando As OleDbCommand = conexao.CreateCommand()
        comando.CommandText = strSQL
        comando.CommandType = CommandType.Text
        Return comando
    End Function

    Function preencheTabela(ByVal tabela As DataTable, ByVal comando As OleDbCommand, ByVal da As OleDbDataAdapter)
        tabela.Clear()
        comando.ExecuteNonQuery()
        da.SelectCommand = comando
        da.Fill(tabela)
    End Function
End Class

 

 

Na classe AcessoBD temos a definição de 3 métodos cria_DataSet_OleDb ; como isto é possível ?


Observe que embora tenham o mesmo nome os métodos possuem assinatura (número de parâmetros) diferentes:

  1. Function cria_DataSet_OleDb(ByVal conexaoOleDb As OleDbConnection, ByVal strSQL As String) As DataSet

  2. Function cria_DataSet_OleDb(ByVal da As OleDbDataAdapter, ByVal tabela As DataTable) As DataSet

  3. Function cria_DataSet_OleDb(ByVal da As OleDbDataAdapter) As DataSet

Isto não seria possível nas versões anteriores do VB. Esta propriedade é uma característica das linguagens OOP e é conhecida como sobrecarga de métodos.

Sobrecarga seria então o reuso de um mesmo nome (em uma classe ou subclasse) para diferentes métodos(pois possuem assinatura diferentes). Exatamente como temos acima.

Aproveitando o gancho quero falar um pouco de polimorfismo pois muita gente confunde sobrecarga de métodos como uma forma de polimorfismo.

 

Mas o que vem a ser polimorfísmo ?

 

Polimorfismo significa muitas formas , na orientação a objetos você pode enviar uma mesma mensagem para diferentes objetos e fazê-los responder da maneira correta. Você pode enviar a mensagem de dar marcha-ré para cada objeto semelhante a um carro e cada um vai se comportar de maneira diferente para atender a sua solicitação.

 

Uma definição mais formal diria:

 

"Polimorfismo é o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma identificação (assinatura) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse"

 

Vamos supor que temos dois objetos : Quadrado e triângulo.  São objetos diferentes certo ?  Mas podemos dizer que o eles possuem em comum um método que calcula a área e que vamos chamar de Area() ; sendo que cada objeto implementa o método de forma diferente.

 

Levando isto para o mundo da programação vamos mostrar via código , usando C# (ou seria Java), a implementação de uma interface chamada FigurasGeometricas que define um método Area() e que deverá ser implementando pelas classes Quadrado e Triangulo.

 

O código da interface : FiguraGeometrica

public interface FiguraGeometrica
{
    double Area(double base, double altura);
}

 

Agora vamos mostrar o código das classes Quadrado e Triangulo implementando o método Area()

 

public class Quadrado implements FiguraGeometrica
{
private double base;
private double altura;

public Quadrado()
{
base = 10;
altura = 10;
}

public double Area(double base)
{
return base * altura;
}
}
public class Triangulo implements FiguraGeometrica
{
private double base;
private double altura;

public Triangulo()
{
base = 10;
altura = 10;
}

public double Area(double base, double altura)
{
return (base * altura)/2 ;
}
}
Classe Quadrado Classe Triangulo

 

Ao definir o método na interface eu não me preocupei como ele seria implementado.

 

Ele foi implementado de forma diferente mas o resultado final será o mesmo : a área da figura geométrica. A representação destas classes na notação UML seria algo parecido com a figura ao lado

 

 

 

A seguir temos o código da classe Clientes ; no menu Project selecione add Module Class e altere o nome do arquivo para clientes.vb e a inclua o código abaixo no arquivo. A classe Clientes usa os métodos definidos na classe AcessoBD para criar uma conexão , criar um DataAdapter , criar um DataReader , criar um Command e criar um DataSet.

 

Imports System
Imports System.Data
Imports System.Data.OleDb
Imports System.Configuration

Public Class Clientes
    Inherits AcessoBD

    'propriedades do objeto cliente
    Private mCodigo As Integer
    Private mNome As String
    Private mEndereco As String
    Private mCidade As String
    Private mEstado As String
    Private mTelefone As String
    Private mEmail As String
    Private mErro As String

    'variaveis usadas no projeto
    Dim strConexaoOleDbOleDb As String
    Dim conexaoOleDb As OleDbConnection
    Dim comandoOleDb As OleDbCommand
    Dim drOleDb As OleDbDataReader
    Dim daOleDb As OleDbDataAdapter
    Dim dsOleDb As DataSet
    Public Property Codigo() As Integer
        Get
            Return mCodigo
        End Get
        Set(ByVal Value As Integer)
            mCodigo = Value
        End Set
    End Property
 
    Public Property Nome() As String
        Get
            Return mNome
        End Get
        Set(ByVal Value As String)
            mNome = Value
        End Set
    End Property
 
    Public Property Endereco() As String
        Get
            Return mEndereco
        End Get
        Set(ByVal Value As String)
            mEndereco = Value
        End Set
    End Property
 
    Public Property Cidade() As String
        Get
            Return mCidade
        End Get
        Set(ByVal Value As String)
            mCidade = Value
        End Set
    End Property
 
    Public Property Estado() As String
        Get
            Return mEstado
        End Get
        Set(ByVal Value As String)
            mEstado = Value
        End Set
    End Property
 
    Public Property Telefone() As String
        Get
            Return mTelefone
        End Get
        Set(ByVal Value As String)
            mTelefone = Value
        End Set
    End Property
 
    Public Property Email() As String
        Get
            Return mEmail
        End Get
        Set(ByVal Value As String)
            mEmail = Value
        End Set
    End Property
 
    Public Property mError() As String
        Get
            Return mErro
        End Get
        Set(ByVal Value As String)
            mErro = Value
        End Set
    End Property

    Public Property mClientes() As DataTable
        Get
            Return mClientes
        End Get
        Set(ByVal Valor As DataTable)
            mClientes = Valor
        End Set
    End Property
 
    Public Sub lista_Cliente(ByVal Nome As String)
        Dim strConexaoOleDb As String = ConfigurationSettings.AppSettings("strConexaoBD")
        Dim strSQL As String = "SELECT * FROM Cliente WHERE Nome='" & Nome & "'"
        Try
            conexaoOleDb = Cria_Conexao_OleDb(strConexaoOleDb)
            drOleDb = cria_DataReader_OleDb(conexaoOleDb, strSQL)
            While drOleDb.Read
                If Not IsDBNull(drOleDb.Item("Codigo")) Then
                    mCodigo = drOleDb.Item("Codigo")
                End If
                If Not IsDBNull(drOleDb.Item("Nome")) Then
                    mNome = drOleDb.Item("Nome")
                End If
                If Not IsDBNull(drOleDb.Item("Endereco")) Then
                    mEndereco = drOleDb.Item("Endereco")
                End If
                If Not IsDBNull(drOleDb.Item("Cidade")) Then
                    mCidade = drOleDb.Item("Cidade")
                End If
                If Not IsDBNull(drOleDb.Item("Estado")) Then
                    mEstado = drOleDb.Item("Estado")
                End If
                If Not IsDBNull(drOleDb.Item("Telefone")) Then
                    mTelefone = drOleDb.Item("Telefone")
                End If
                If Not IsDBNull(drOleDb.Item("Email")) Then
                    mEmail = drOleDb.Item("Email")
                End If
            End While
        Catch mExcecao As System.Exception
            mErro = mExcecao.ToString
            If conexaoOleDb.State.Open Then
                conexaoOleDb.Close()
            End If
        End Try

        conexaoOleDb.Close()

    End Sub

    Function lista_Todos_Clientes()
        Dim strConexaoOleDb As String = ConfigurationSettings.AppSettings("strConexaoBD")
        Dim strSQL As String = "SELECT * FROM Cliente"
        Try
            conexaoOleDb = Cria_Conexao_OleDb(strConexaoOleDb)
            daOleDb = cria_DataAdapter_OleDb(conexaoOleDb, strSQL)
            comandoOleDb = cria_Comando_OleDb(conexaoOleDb, strSQL)
            dsOleDb = cria_DataSet_OleDb(daOleDb)

            Return dsOleDb
        Catch mExcecao As System.Exception
            mErro = mExcecao.ToString
            If conexaoOleDb.State.Open Then
                conexaoOleDb.Close()
            End If
        End Try

    End Function
    Public Sub incluirNovoCliente(ByVal Nome As String, ByVal ClienteEndereco As String, ByVal ClienteCidade As String,_
 ByVal ClienteEstado As String, ByVal ClienteTelefone As String, ByVal ClienteEmail As String)

        Dim strConexaoOleDb As String = ConfigurationSettings.AppSettings("strConexaoBD")
        Dim strSQL As String = "INSERT INTO Cliente(Nome, Endereco, Cidade, Estado, Telefone, Email)VALUES_ 
(@Nome, @Endereco, @Cidade, @Estado, @Telefone, @Email)"

        Try
            conexaoOleDb = Cria_Conexao_OleDb(strConexaoOleDb)
            daOleDb = cria_DataAdapter_OleDb(conexaoOleDb, strSQL)
            comandoOleDb = cria_Comando_OleDb(conexaoOleDb, strSQL)

            comandoOleDb.Parameters.Add(New OleDbParameter("@Nome", OleDbType.VarChar, 50))
            comandoOleDb.Parameters("@Nome").Value = Nome

            comandoOleDb.Parameters.Add(New OleDbParameter("@Endereco", OleDbType.VarChar, 50))
            comandoOleDb.Parameters("@Endereco").Value = ClienteEndereco

            comandoOleDb.Parameters.Add(New OleDbParameter("@Cidade", OleDbType.VarChar, 50))
            comandoOleDb.Parameters("@Cidade").Value = ClienteCidade
            comandoOleDb.Parameters.Add(New OleDbParameter("@Estado", OleDbType.VarChar, 50))
            comandoOleDb.Parameters("@Estado").Value = ClienteEstado
            comandoOleDb.Parameters.Add(New OleDbParameter("@Telefone", OleDbType.VarChar, 50))
            comandoOleDb.Parameters("@Telefone").Value = ClienteTelefone
            comandoOleDb.Parameters.Add(New OleDbParameter("@Email", OleDbType.VarChar, 100))
            comandoOleDb.Parameters("@Email").Value = ClienteEmail

            comandoOleDb.ExecuteNonQuery()
            conexaoOleDb.Close()
        Catch mExcecao As System.Exception
            mErro = mExcecao.ToString
            conexaoOleDb.Close()
        End Try
    End Sub
 
    Public Sub atualizaCliente(ByVal Codigo As Integer, ByVal Nome As String, ByVal ClienteEndereco As String,_
 ByVal ClienteCidade As String, ByVal ClienteEstado As String, ByVal ClienteTelefone As String, ByVal ClienteEmail As String)
 
        Dim strConexaoOleDb As String = ConfigurationSettings.AppSettings("strConexaoBD")
        Dim strSQL As String = "UPDATE Cliente SET Nome='" & Nome & "', Endereco='" & ClienteEndereco & "', Cidade='" _ 
& ClienteCidade & "',  Estado='" & ClienteEstado & "', Telefone='" & ClienteTelefone & "' WHERE Codigo=" & Codigo & ""
        Try
            conexaoOleDb = Cria_Conexao_OleDb(strConexaoOleDb)
            daOleDb = cria_DataAdapter_OleDb(conexaoOleDb, strSQL)
            comandoOleDb = cria_Comando_OleDb(conexaoOleDb, strSQL)
            conexaoOleDb.Close()
        Catch mExcecao As System.Exception
            mErro = mExcecao.ToString
            conexaoOleDb.Close()
        End Try

    End Sub

    Public Sub excluirCliente(ByVal mCodigo As Integer)
        Dim strConexaoOleDb As String = ConfigurationSettings.AppSettings("strConexaoBD")
        Dim strSQL As String = "DELETE FROM Cliente  WHERE Codigo=" & mCodigo & ""

        Try
            conexaoOleDb = Cria_Conexao_OleDb(strConexaoOleDb)
            daOleDb = cria_DataAdapter_OleDb(conexaoOleDb, strSQL)
            comandoOleDb = cria_Comando_OleDb(conexaoOleDb, strSQL)
            conexaoOleDb.Close()
        Catch mExcecao As System.Exception
            mErro = mExcecao.ToString
            conexaoOleDb.Close()
        End Try
    End Sub
End Class

 

 

Na classe Clientes temos a definição das propriedades e métodos do objeto Cliente , como já foi mencionado.

Note também que a classe Clientes herda(inherits) da classe AcessoBD , ou seja , a classe cliente é uma classe filha de AcessoBD e terá acesso a todas as propriedades e métodos da classe pai. A representação das classes na notação UML é exibida na figura ao lado:

 

A palavra Inherits  indica isto no código ; ela somente pode ser usada em classe e interfaces. Isto foi possível por que no VB.NET todas as classes são por padrão herdáveis. Para não permitir que uma classe seja herdada usamos a palavra chave NoInheritable.  Assim se você não desejar que a classe AcessoBD seja herdada basta comandar:

 

Public NotInheritable Class AcessoBD

 

Você pode também usar a palavra chave MustInherit ;  ela indica que uma classe não pode ser instanciada diretamente e que precisa ser herdada de uma classe derivada que por sua vez pode ser instanciada.

 

Public MustInherit Class Acesso
 

A classe de onde herdamos é chamada classe base e uma classe derivada pode somente herdar de uma única classe base, isto é : não existe herança múltipla.

 

Para encerrar : Quando usar herança ?

 

Não existe uma receita de bolo para isto. Em geral a experiência e o bom senso devem ser usados para obter um bom resultado. Como você viu usar herança não é difícil , no entanto , você deve definir de forma criteriosa as classes bases ao projetar seus componentes e seus modelos de objetos para que elas possam ser realmente úteis e genéricas o bastante para serem utilizáveis por muitas classes.

 

Herança pode ser uma armadilha e tornar o seu código fortemente acoplado de forma ser quase impossível de ser reutilizado.

 

Estamos armazenando a string de conexão no arquivo de configuração da aplicação. O arquivo de configuração é definido como abaixo:

 

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
    <add key="strConexaoBD" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\teste\cadastro.mdb" />
</appSettings>
</configuration>

 

 

Pare recuperar o valor do arquivos usamos o código : Dim strConexaoOleDb As String = ConfigurationSettings.AppSettings("strConexaoBD")

 

Para saber como implementar um arquivo de configuração leia o artigo: .NET - Tratando arquivos de configuração

 

Falta somente exibirmos o código do formulário frmClientes que usará as propriedades e métodos das classes definidas e criará a interface com o usuário. Abaixo temos o código completo usado no formulário:

 

Código do botão Pesquisar que usa o método lista_cliente da classe Clientes através do objeto oCliente instanciado no código:

 

   Private Sub BtnPesquisa_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnPesquisa.Click

        Dim oCliente As New Clientes

        If TxtNome.Text <> "" Then
            With Me
                .TxtCodigo.Text = ""
                .TxtEndereco.Text = ""
                .TxtCidade.Text = ""
                .cboEstado.Text = ""
                .TxtFone.Text = ""
                .txtEmail.Text = ""
            End With
            oCliente.lista_Cliente(TxtNome.Text)
        Else
            MsgBox("Por favor informe um nome para um Cliente!", MsgBoxStyle.Information, "Cadastro de Clientes")
            Exit Sub
        End If
        If oCliente.mError = "" Then
            With Me
                mCliCod = oCliente.Codigo
                .TxtCodigo.Text = oCliente.Codigo
                .TxtNome.Text = oCliente.Nome
                .TxtEndereco.Text = oCliente.Endereco
                .TxtCidade.Text = oCliente.Cidade
                .cboEstado.Text = oCliente.Estado
                .TxtFone.Text = oCliente.Telefone
                .txtEmail.Text = oCliente.Email
            End With
        Else
            MsgBox(oCliente.mError, MsgBoxStyle.Information, "Cadastro de Clientes")
            Exit Sub
        End If
        If oCliente.Codigo = 0 Then
            MsgBox("Cliente não cadastrado com Esse Nome!", MsgBoxStyle.Information, "Cadastro de Clientes")
        End If

    End Sub

 

 

Código do botão - Relação de clientes - que usa o método lista_Todos_Clientes da classe Clientes. A implementação deste método poderia ter sido feita de diversas maneiras.

 

   Private Sub BtnClientes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnClientes.Click

        Dim oClientes As New Clientes
        Dim ds As DataSet
        Try
            ds = oClientes.lista_Todos_Clientes
            Me.GridClientes.DataSource = ds
        Catch excecao As Exception
            MsgBox(oClientes.mError, MsgBoxStyle.Information, "Cadastro de Clientes")
        End Try

    End Sub

 

 

O código do botão Incluir e da rotina LimpaCampos() usada no botão. O código apenas limpa o conteúdo dos campos do formulário

 

    Private Sub BtnNovo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnNovo.Click
        LimpaCampos()
    End Sub
    Private Sub LimpaCampos()
        With Me
            mCliCod = Nothing
            .TxtCodigo.Text = ""
            .TxtNome.Text = ""
            .TxtEndereco.Text = ""
            .TxtCidade.Text = ""
            .cboEstado.Text = ""
            .TxtFone.Text = ""
            .txtEmail.Text = ""
            .TxtNome.Focus()
        End With
    End Sub

 

 

Código do botão Salvar  que usa o método atualizaCliente da classe Clientes.

 

  Private Sub BtnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSalvar.Click

        If Me.TxtNome.Text = "" Then
            MsgBox("Por Favor informe um nome para este Cliente!", MsgBoxStyle.Information, "Cadastro de Clientes")
            TxtNome.Focus()
            Exit Sub
        ElseIf TxtEndereco.Text = "" Then
            MsgBox("Por Favor informe o endereco do Cliente!", MsgBoxStyle.Information, "Cadastro de Clientes")
            TxtEndereco.Focus()
            Exit Sub
        ElseIf TxtCidade.Text = "" Then
            MsgBox("Por favor informe a cidade do Cliente!", MsgBoxStyle.Information, "Cadastro de Clientes")
            TxtCidade.Focus()
            Exit Sub
        ElseIf cboEstado.Text = "" Then
            MsgBox("Por Favor informe o Estado do Cliente!", MsgBoxStyle.Information, "Cadastro de Clientes")
            cboEstado.Focus()
            Exit Sub
        ElseIf TxtFone.Text = "" Then
            MsgBox("Por Favor informe o telefone do cliente!", MsgBoxStyle.Information, "Cadastro de Clientes")
            TxtFone.Focus()
            Exit Sub
        Else
            If mCliCod <> 0 Then
                Dim oCliente As New Clientes
                oCliente.atualizaCliente(TxtCodigo.Text, TxtNome.Text, TxtEndereco.Text, TxtCidade.Text, cboEstado.Text, _
 TxtFone.Text, txtEmail.Text)
                If oCliente.mError = "" Then
                    MsgBox("Dados atualizados com sucesso !", MsgBoxStyle.Information, "Cadastro de Clientes!")
                    Exit Sub
                Else
                    MsgBox("Error ao Atualizar dados do Cliente !", MsgBoxStyle.Information, "Cadastro de Clientes!")
                    Exit Sub
                End If
            Else
                'Incluir Novo Cliente  
                Dim oCliente As New Clientes
                oCliente.incluirNovoCliente(TxtNome.Text, TxtEndereco.Text, TxtCidade.Text, cboEstado.Text, TxtFone.Text, txtEmail.Text)
                If oCliente.mError = "" Then
                    MsgBox("Cliente incluído com sucesso !", MsgBoxStyle.Information, "Cadastro de Clientes!")
                    Exit Sub
                Else
                    MsgBox("Error ao incluir Cliente no Banco de Dados!" & vbCrLf & oCliente.mError, MsgBoxStyle.Information,_
 "Cadastro de Clientes!")
                    Exit Sub
                End If
            End If
        End If

    End Sub

 

 

Código do botão Excluir onde estamos usando o método excluirCliente da classe Clientes através do objeto oCliente que foi instanciado no início do código.

 

   Private Sub BtnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnDelete.Click

        Dim oCliente As New Clientes
        Dim opcao As String
        If TxtCodigo.Text <> "" Then
            opcao = MsgBox("Confirma a EXCLUSÃO deste cliente?", MsgBoxStyle.YesNo, "Cadastro de Clientes!")
            If opcao = 6 Then
                oCliente.excluirCliente(CInt(TxtCodigo.Text))
                If oCliente.mError <> "" Then
                    MsgBox("Erro ao excluir o Cliente!" & vbCrLf & oCliente.mError, MsgBoxStyle.Information, "Cadastro de Clientes!")
                    Exit Sub
                Else
                    MsgBox("Cliente excluido com sucesso !", MsgBoxStyle.Information, "Cadastro de Clientes!")
                    LimpaCampos()
                    Exit Sub
                End If
            Else
                Exit Sub
            End If
        Else
            MsgBox("Selecione o cliente a ser excluido usando a opção <Pesquisar> ", MsgBoxStyle.Information, "Cadastro de Clientes")
        End If
    End Sub

 

 

O código do Evento Load do formulário onde carregamos a combobox com as siglas do estados:
 

    Private Sub FrmClientes_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim estados() = {"AC", "AM", "BA", "CE", "DF", "ES", "GO", "MA", "MG", "MT", "MS", "PB", "PE", "SP", "RJ", "RN", "RS"}
        cboEstado.DataSource = estados
        cboEstado.SelectedIndex = -1
    End Sub

 

Código usado para mudar para outro campo do formulário ao pressionar a tecla ENTER.

 

Private Sub txtNome_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) 
Handles TxtNome.KeyPress
        ' ao pressionar a tecla ENTER ( Return) o foco vai para o proximo controle
        If e.KeyChar = Convert.ToChar(Keys.Return) Then
            e.Handled = True
            TxtEndereco.Focus()
        End If
    End Sub

 

 

Para encerrar gostaria de colocar duas questões  :
 

É correto a classe Clientes herdar de AcessoBD ?

A classe Clientes "é um AcessoBD" ou "tem um AcessoBD " ?

 

Você pode usar o exemplo que ele esta funcional , embora precise de algumas melhorias...

 

Pegue o projeto aqui : clientes_net_oop.zip (73 k)

Jo 5:24 Em verdade, em verdade vos digo que quem ouve a minha palavra, e crê naquele que me enviou, tem a vida eterna e não entra em juízo, mas já passou da morte para a vida.

João 5:25 Em verdade, em verdade vos digo que vem a hora, e agora é, em que os mortos ouvirão a voz do Filho de Deus, e os que a ouvirem viverão.

João 5:26 Pois assim como o Pai tem vida em si mesmo, assim também deu ao Filho ter vida em si mesmos;

João 5:27 e deu-lhe autoridade para julgar, porque é o Filho do homem.

 

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#.

      Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti