Desenvolvimento - Visual Basic .NET

Pequeno projeto de controle de pedidos de uma pizzaria em Visual Basic .Net - Parte 2

Segundo artigo. Ao final, teremos um pequeno, porém importante projeto que servirá como base para o desenvolvimento de projetos maiores. É importante que você acompanhe as explicações de todas as partes do código. O objetivo desse material é ser uma referência básica para seus futuros projetos. O modelo de programação está bem baseado no VB6. Existem outros orientados a objeto. Não foi o intuito neste artigo explorá-lo.

por Marcos Roberto de Moraes



Na artigo 1, iniciamos um projeto chamado pizzaria, foi criada uma estrutura de Banco de Dados chamada de Pizza. Criou-se 04 tabelas relacionadas chamadas: Clientes, Produtos, Pedidos e PedidosItens. Também foram criados os formulário FrmSplash, o formulário MDIPrincipal  e o formulário de clientes.

Nesse artigo iremos codificar nosso primeiro exemplo CRUDE (Create, Update e Delete) [ J ].

Formulário de Clientes

Na artigo anterior você criou o formulário abaixo para a sua aplicação, hoje será implementado os respectivos códigos operacionais para o cadastro. Interface projetada:

1) Dê um duplo clique no formulário e na seção geral de declarações, digite o código abaixo:

Imports System.Data

Imports System.Data.SqlClient

Imports System.Text

è As 2 primeiras linhas de código, já conhecemos, a terceira é para trabalhar com métodos da biblioteca de Classes System.Text, especificamente o objeto StringBuilder. Comentaremos em aula.

A aplicação deverá funcionar desta forma:

Assim que o formulário for carregado o usuário deverá digitar o código do cliente, caso exista o cliente já cadastrado, será exibido os seus dados no formulário, e os botões: alterar, excluir e o pesquisar deverão ficar habilitados, já os botões: incluir e cancelar deverão ficar desabilitados, caso não exista, o campo receberá a palavra <AUT> e os botões: incluir, cancelar ficarão habilitados e os demais desabilitados.

1.1) Antes, declare a variável conexão conforme orientações do professor.

       Dim conexao as string = C:\Pizza\Pizza.mdf” ‘ è aqui você deve colocar o caminho para o seu Banco no meu caso C:\Pizza\Pizza.mdf.

2) Para fazer isso iremos digitar o código abaixo no evento lostfocus da caixa de texto “txtcodigo”. Dê um duplo clique no txtcodigo e mude o evento para lostfocus.

O Código já está comentado. No entanto na aula tiraremos as dúvidas.

Private Sub TxtCodigo_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles TxtCodigo.LostFocus

       "Primeiramente vamos buscar pelo código do cliente.

       "Declare a variável de conexão

       Dim cn As New SqlConnection(conexao)

       "Procurando o Cliente pelo Código

       Dim codigo As Integer

       codigo = Val(TxtCodigo.Text)

       Dim csql As String

       csql = "Select * From Clientes where idcliente=" & codigo

       Dim cm As New SqlCommand(csql, cn)

       Try

           cn.Open()

           Dim dr As SqlDataReader

           dr = cm.ExecuteReader

           "Caso haja o cliente, a propriedade read do datareader

           "é igual a true. Assim mostramos os dados na tela.

           If dr.Read() = True Then

               TxtNome.Text = dr("nomerazao")

               TxtEndereco.Text = dr("endereco")

               TxtBairro.Text = dr("bairro")

               TxtCep.Text = dr("cep")

               TxtTelefone.Text = dr("telefone")

               TxtCidade.Text = dr("cidade")

               ComboEstado.Text = dr("estado")

               TxtObservacoes.Text = dr("observacoes")

               TxtCodigo.Enabled = False

               "Liberamos os botões (alterar, excluir e pesquisar)

               btnAlterar.Enabled = True

               btnExcluir.Enabled = True

               btnPesquisar.Enabled = True

               "Desabilitamos os botões (incluir e cancelar)

               btnIncluir.Enabled = False

               btnCancelar.Enabled = False

           Else

               "Caso não exista o cliente cujo código foi digitado

               "aparecerá o texto <AUT> de automático na caixa de

               "texto "txtcodigo"

               TxtCodigo.Text = "<AUT>"

               TxtCodigo.Enabled = False

               "Agora os botões esão invertidos em relação a opção

               "anterior

               "Desabilitamos os botões (alterar, excluir e pesquisar)

               btnAlterar.Enabled = False

               btnExcluir.Enabled = False

               btnPesquisar.Enabled = False

               "Liberamos os botões (incluir e cancelar)

               btnIncluir.Enabled = True

               btnCancelar.Enabled = True

           End If

        Catch ex As Exception

          MsgBox("Ocorreu o erro: " & ex.Message,MsgBoxStyle.Critical)

          cn.Close()

        End Try

        cn.Close()

    End Sub

OBS: Nesse momento, caso você tenha digitado alguns clientes. Já dá para rodar e testar.

3) Agora vamos escrever o código para a inclusão de novos clientes.

        "Declara a conexão e se não estiver aberta abra.

        Dim cn As New SqlConnection(conexao)

        If cn.State = ConnectionState.Closed Then

            cn.Open()

        End If

        "agora vamos abrir a tabela num data reader

        "ordenado pelo código em ordem decrescente

        "a idéia aqui é pegar o código (último e somar 1)

        Dim csql As String

        csql = "Select * From Clientes order by idcliente desc"

        Dim cm As New SqlCommand(csql, cn)

        Dim dr As SqlDataReader

        dr = cm.ExecuteReader

        If dr.Read() = True Then

            TxtCodigo.Text = dr("IdCliente") + 1

        End If

        dr.Close()

        "gravando dados do formulário clientes

        "aqui usamos um novo objeto da classe

        "StringBuilder

        Dim comando As New StringBuilder

        comando.Append("INSERT INTO CLIENTES(")

        comando.Append("Idcliente,")

        comando.Append("NomeRazao,")

        comando.Append("Endereco,")

        comando.Append("Bairro,")

        comando.Append("Cep,")

        comando.Append("Telefone,")

        comando.Append("cidade,")

        comando.Append("estado,")

        comando.Append("Observacoes)")

        comando.Append(" Values(")

        comando.Append(TxtCodigo.Text & ",")

        comando.Append(""" & TxtNome.Text & "",")

        comando.Append(""" & TxtEndereco.Text & "",")

        comando.Append(""" & TxtBairro.Text & "",")

        comando.Append(""" & TxtCep.Text & "",")

        comando.Append(""" & TxtTelefone.Text & "",")

        comando.Append(""" & TxtCidade.Text & "",")

        comando.Append(""" & ComboEstado.Text & "",")

        comando.Append(""" & TxtObservacoes.Text & "")")

        Try

            cm.CommandText = comando.ToString

            cm.ExecuteNonQuery()

        Catch ex As Exception

            MsgBox("Ocorreu o erro: " & ex.Message, MsgBoxStyle.Critical)

            cn.Close()

        End Try

        MsgBox("Cliente " & TxtNome.Text & ", cadastrado com cod: " & TxtCodigo.Text)

        "Liberamos os botões.

        btnAlterar.Enabled = True

        btnExcluir.Enabled = True

        btnPesquisar.Enabled = True

        btnIncluir.Enabled = True

        btnCancelar.Enabled = True

        TxtCodigo.Enabled = True

        "LIMPAR AS CAIXAS DE TEXTO

        "Agora vou mostrar um jeito mais simples

        For Each ctl As Control In GroupBox1.Controls

            If TypeOf ctl Is TextBox Then ctl.Text = ""

        Next ctl

        cn.Close()

        "colocar o foco na caixa txtcodigo

        TxtCodigo.Focus()

4) Agora vamos escrever o código do botão alterar.

        Dim cn As New SqlConnection(conexao)

        If cn.State = ConnectionState.Closed Then

            cn.Open()

        End If

        "gravando dados do formulário clientes

        Dim comando As New StringBuilder

        comando.Append("UPDATE CLIENTES ")

        comando.Append("SET NomeRazao=")

        comando.Append(""" & TxtNome.Text & "",")

        comando.Append(" Endereco=")

        comando.Append(""" & TxtEndereco.Text & "",")

        comando.Append(" Bairro=")

        comando.Append(""" & TxtBairro.Text & "",")

        comando.Append(" Cep=")

        comando.Append(""" & TxtCep.Text & "",")

        comando.Append(" Telefone=")

        comando.Append(""" & TxtTelefone.Text & "",")

        comando.Append(" Cidade=")

        comando.Append(""" & TxtCidade.Text & "",")

        comando.Append(" Estado=")

        comando.Append(""" & ComboEstado.Text & "",")

        comando.Append(" Observacoes=")

        comando.Append(""" & TxtObservacoes.Text & """)

        comando.Append(" WHERE IdCliente=" & Val(TxtCodigo.Text))

        Dim cm As New SqlCommand

        Try

            cm.Connection = cn

            cm.CommandText = comando.ToString

            cm.ExecuteNonQuery()

        Catch ex As Exception

            MsgBox("Ocorreu o erro: " & ex.Message, MsgBoxStyle.Critical)

            cn.Close()

        End Try

        MsgBox("Cliente " & TxtNome.Text & ", alterado com sucesso", 64, "Aviso")

        "Liberamos os botões.

        btnAlterar.Enabled = True

        btnExcluir.Enabled = True

        btnPesquisar.Enabled = True

        btnIncluir.Enabled = True

        btnCancelar.Enabled = True

        TxtCodigo.Enabled = True

        "LIMPAR AS CAIXAS DE TEXTO

        "Agora vou mostrar um jeito mais simples

        For Each ctl As Control In GroupBox1.Controls

            If TypeOf ctl Is TextBox Then ctl.Text = ""

        Next ctl

        cn.Close()

        "colocar o foco na caixa txtcodigo

        TxtCodigo.Focus()

Para finalizar o artigo de hoje, vamos ao código dos botão excluir e em seguida cancelar.

5) Digite o código abaixo:

        Dim cn As New SqlConnection(conexao)

        If cn.State = ConnectionState.Closed Then

            cn.Open()

        End If

        "string para exclusão do cliente

        Dim csql As String

        csql = "DELETE FROM CLIENTES WHERE IDCLIENTE=" & Val(TxtCodigo.Text)

        "pede confirmação ao usuário

        Dim ret As Integer

        ret = MsgBox("Deseja excluir o cliente: " & TxtNome.Text & " ? ", 36, "Pergunta")

        Dim cm As New SqlCommand

        If ret = vbYes Then

            Try

                cm.Connection = cn

                cm.CommandText = csql.ToString

                cm.ExecuteNonQuery()

            Catch ex As Exception

                MsgBox("Ocorreu o erro: " & ex.Message, MsgBoxStyle.Critical)

                cn.Close()

            End Try

        Else

            MsgBox("Operação cancelada, registro NÃO excluído", 64, "Aviso")

        End If

        "Liberamos os botões.

        btnAlterar.Enabled = True

        btnExcluir.Enabled = True

        btnPesquisar.Enabled = True

        btnIncluir.Enabled = True

        btnCancelar.Enabled = True

        TxtCodigo.Enabled = True

        "LIMPAR AS CAIXAS DE TEXTO

        "Agora vou mostrar um jeito mais simples

        For Each ctl As Control In GroupBox1.Controls

            If TypeOf ctl Is TextBox Then ctl.Text = ""

        Next ctl

        ComboEstado.Text = ""

        cn.Close()

        "colocar o foco na caixa txtcodigo

        TxtCodigo.Focus()

6) Já no botão cancelar:

        "Liberamos os botões.

        btnAlterar.Enabled = True

        btnExcluir.Enabled = True

        btnPesquisar.Enabled = True

        btnIncluir.Enabled = True

        btnCancelar.Enabled = True

        TxtCodigo.Enabled = True

        "LIMPAR AS CAIXAS DE TEXTO

        "Agora vou mostrar um jeito mais simples

        For Each ctl As Control In GroupBox1.Controls

            If TypeOf ctl Is TextBox Then ctl.Text = ""

        Next ctl

        ComboEstado.Text = ""

        cn.Close()

        "colocar o foco na caixa txtcodigo

        TxtCodigo.Focus()

Pronto. No próximo artigo, criaremos um formulário para pesquisa geral e o nosso primeiro relatório. Você deverá criar as funcionalidades necessárias para o formulário de produtos. Fica aqui como atividade.

Nota do Maromo: Esses dois artigos foram escritos com o objetivo de demonstrar formas de inclusão, alteração, consulta e exclusão de dados em objeto tabela (clientes). Existem outras técnicas de melhores práticas de programação divididas em N camadas, que nesse momento não é nossa prioridade.

Na medida em que você começar a avançar na programação você sentirá necessidade de utilizar técnicas mais alinhadas com a ES (Engenharia de Software) especialmente a UML (Linguagem unificada de modelagem).

Um abraço,

E até a próxima

Maromo

Marcos Roberto de Moraes

Marcos Roberto de Moraes - Mestrando em Educação (UNISAL)
Especialista em Administração de Sist. Informação (UFLA)
Licenciado Pleno em Informática (UNIMEP)
Professor das Faculdades Santa Lúcia de SI, FATEC e ETEC de Mogi Mirim-SP