JcmSoft - VB.NET   VB.NET - Alterando , Excluindo e atualizando dados


Neste artigo vamos mostrar como alterar , incluir e excluir dados em uma base de dados usando a plataforma .NET , mais precisamente usaremos código VB.NET. No artigo Meu Primeiro Acesso a Dados com o VB.NET mostramos como acessar e exibir os dados . Eu poderia continuar a partir do exemplo usado no artigo anterior mas perdi o projeto e vou repetir , de forma resumida é claro , os passos para gerar o acesso a um banco de dados.

Neste artigo estaremos acessando a tabela Authors do banco de dados Biblio.mdb. Vamos mostrar como realizar o acesso ao banco de dados e a tabela Authors para exibir os registros em um formulário onde iremos permitir ao usuário a navegação pelos registros e a manutenção dos dados.

A estrutura da tabela Authors é a seguinte:

Acessando o Banco de dados e a Tabela e exibindo os registros

 Vamos agora mostrar fazer o acesso a dados usando o VB.NET. Eu estou usando a versão final do Visual Studio .NET .

 - Inicie um novo projeto no Visual Studio do tipo - Visual Basic Projects usando o template Windows Application

 

- O nome do projeto será AcessaBD e será salvo na pasta c:\vbnet

   

- No formulário padrão selecione a Toolbox , e , na guia Data clique em OleDataAdapter e arrastando o componente insira-o no formulário form1.vb
   
- Quando você acabar de inserir o componente de imediato a tela do assistente de configuração do Data Adapter irá surgir

-Clique no botão - Next >

   
 - Na tela a seguir , clique no botão - New Connection para criar uma nova conexão
   

- Selecione o provedor OLE DB 4.0 , pois iremos acessar uma base de dados Access.
   
- Informe o nome e a localização da base de dados , o nome do usuário ( no caso usamos admin) e a senha , se houver.

 

- Clique no botão - Testar conexão

- Se tudo foi feito corretamente você verá a mensagem - Teste de conexão concluído com êxito.

   
 - A tela a lado informa o nome da conexão com a base de dados que será criada.Clique no botão- Next >
   
 - Confirme o tipo de consulta a ser usada ;no nosso caso iremos usar instruções SQL.
   
- Informe a consulta SQL que será usada para popular o dataset. No nosso caso iremos selecionar todos os registros da tabela Authors
   
 - Pronto , o assistente mostra o resultado da configuração feita .

 

- Clique no botão Finish

   

 - Agora vamos alterar o nome dos comandos gerados pelo assistente

- Clique no sinal de + para : selectcommand , deletecommand, insertcommand e updatecommad e altere a propriedade Name conforme  a figura ao lado

   

 - Aqui mostramos os nomes já alterados para selectcommand , deletecommand, insertcommand e updatecommad
ui  

- Agora vamos gerar o DataSet , clique em - Generate DataSet...
   

- Informe o nome do novo DataSet a ser gerado . Vamos usar o nome dsAuthors
   

- Pronto , agora complete o formulário com as caixas de texto , as Labels conforme figura ao lado
   

- Vamos agora vincular os controles TextBox ao DataSet - DsAuthos  - criado

- Selecione cada TextBox e em DataBindings , na propriedade Text , selecione Authors e a seguir a tabela Authors.

- A seguir clique no campo que deseja vincular ao controle TextBox

   

- Após inserir o código para preencher o DataSet e exibir os registros no formulário temos como resultado formulário exibido ao lado.

- abaixo damos o código usado para obter o resultado.

Agora só falta inserirmos o código para preencher o DataSet - dsAuthors1 conforme abaixo:9

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

   dsAuthors1.Clear()

   daAuthors.Fill(dsAuthors1)

  mostra_dados_atual()

End Sub

O código da função - mostra_dados_atual - que exibe os registros no formulário é o seguinte:

Private Sub mostra_dados_atual()

  Dim contador As Integer

   Dim posicao As Integer

  contador = Me.BindingContext(dsAuthors1, "authors").Count

   If contador >= 0 Then

           posicao = Me.BindingContext(Me.dsAuthors1, "authors").Position + 1

           lblcontador.Text = "Registro : " & posicao.ToString & "/" & contador.ToString

   Else

           lblcontador.Text = "Não há registros"

   End If

End Sub

A seguir  o código associado aos botões que permitem a navegação pelos registros :

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Me.BindingContext(Me.dsAuthors1, "authors").Position -= 1 'retrocede um registro

    mostra_dados_atual()

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    Me.BindingContext(Me.dsAuthors1, "authors").Position += 1 'avança um registro

   mostra_dados_atual()

End Sub

Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click

   Me.BindingContext(Me.dsAuthors1, "authors").Position = 0 'vai para o inicio do arquivo

  mostra_dados_atual()

End Sub

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

    Me.BindingContext(Me.dsAuthors1, "authors").Position = Me.BindingContext(dsAuthors1, "authors").Count - 1

   mostra_dados_atual()  'vai para o fim do arquivo

End Sub

Fazendo a manutenção dos dados - Incluir , Atualizar e Excluir dados

Antes de mostrar o código para cada operação vamos falar um pouco sobre alguns conceitos básicos :

DataSet. Um DataSet funciona como um container desconectado do banco de dados que armazena grupos de registros oriundos de um banco de dados via instrução SQL . Os DataSets podem armazenar mais de uma tabela como fonte de dados. Sendo assim após realizar as operações no DataSet efetivamos ou não essas operações no banco de dados.

- BindingContext - É o responsável pelo gerenciamento dos objetos vinculados ao BindingManagerBase , sendo que o BindingManagerBase realiza a sincronização entre os controles do Windows Forms e a origem dos dados. A sintaxe para o BindingContext é definida assim :

Me.BindingContext( <<Nome do DataSet>>)."<<nome da Tabela>>").<<Propriedade>>  Exemplo:

Me.BindingContext(Me.dsAuthors1, "authors").Position = 0

- Position - A propriedade position indica a posição dos dados nos controles vinculados. Assim temos :

  1. Me.BindingContext(Me.dsAuthors1, "authors").Position = 0 - Vai para o primeiro registro.
  2. Me.BindingContext(Me.dsAuthors1, "authors").Position = Me.BindingContext(dsAuthors1, "authors").Count - 1  - vai para o último registro.

ObsAs propriedades EOF e BOF não são mais suportadas neste contexto.

1- Excluindo registros

Para excluir usamos o método RemoveAt(indice) do BindingManagerBase . Ele exclui a linha associada ao índice especificado no BindingContext. No código solicitamos a confirmação da exclusão e verificamos se há registros no dataset.

Private Sub btnEliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEliminar.Click

If MessageBox.Show("Confirma a exclusão do registro atual ? ", "Excluir Registro", MessageBoxButtons.YesNo,_ MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) = DialogResult.Yes Then

    If (Me.BindingContext(dsAuthors1, "authors").Count > 0) Then

       Me.BindingContext(dsAuthors1, "authors").RemoveAt(Me.BindingContext(dsAuthors1, "authors").Position)

       mostra_dados_atual()

    Else

        MessageBox.Show("Não há registros a serem excluídos !")

    End If

End If

End Sub

2- Incluindo Registros

Para incluir registros em um DataSet podemos usar o método AddNew() em duas etapas:

  1. Primeiro devemos finalizar a edição , se houver , usando o método EndCurrentEdit()
  2. Aplicar o método AddNew ( podemos usar outras formas) , ao BindingContext

Private Sub btnCadastar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCadastar.Click

Try

        Me.BindingContext(dsAuthors1, "authors").EndCurrentEdit()

     Me.BindingContext(dsAuthors1, "authors").AddNew()

Catch eIncluir As System.Exception

      MessageBox.Show(Incluir.Message, "Erro de inclusão ", MessageBoxButtons.OK, MessageBoxIcon.Error)

Finally

   Me.TextBox2.Focus()

End  Try

End Sub

Note que estamos usando uma estrutura Try/Catch - para saber mais leia o artigo -tratamento de erros usando Try-Catch-Finally.

Cancelando a inclusão/alteração

Já mostramos acima os códigos para excluir e incluir dados em um DataSet , veremos agora com cancelar essas operações. É muito simples , para cancelar uma edição de dados feita no DataSet usamos o método - CancelCurrentEdit. Para implementar esta funcionalidade vamos incluir um novo botão em nosso formulário - o botão - Cancelar .:

 - O nome usado para o botão cancelar é : btnCancelar

 - Para os demais botões demos os seguintes nomes:

  • btnCadastrar
  • btnEliminar
  • btnAtualizar

 O código associado ao evento clique do botão Cancelar é :

Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click

If (MessageBox.Show("Confirma o cancelamento da operação ? ", "Cancelar", MessageBoxButtons.YesNo,_ MessageBoxIcon.Question) = DialogResult.Yes) Then

   Me.BindingContext(dsAuthors1, "authors").CancelCurrentEdit()

   mostra_dados_atual()

End If

End Sub

Obs: Você deve prever em seu código a possibilidade do usuário cancelar a edição pressionando a tecla ESC. Vou dar uma dica : Insira o código no evento KeyDown de cada TextBox e crie uma função para cancelar a edição. Veja como ficaria o código:

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown

   If e.KeyCode = Keys.Escape Then

     If (MessageBox.Show("Deseja Cancelar a operação ? ", "Cancelar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) =    DialogResult.Yes) Then

           Cancela_Operação()

    End If

  End If

End Sub,

Atualizando o Banco de dados

Até agora trabalhamos com o DataSet e não diretamente com o banco de dados ; portanto , se você sair da sua aplicação neste instante não verá o efeito de suas inclusões , exclusões e alterações; para isto você precisa gravar todas as operações feitas no DataSet no banco de dados correspondente. Você pode também rejeitar as operações feitas no DataSet e cancelar todas as operações pendentes. Para fazer isto usamos os seguintes métodos:

1- RejectChanges - Desfaz TODAS as operações (inclui,excluir,alterar) feitas no DataSet desde o momento de sua criação.

2 -AcceptChanges - Aceita as operações e grava tudo no banco de dados.

1- Vamos incluir no formulário um Menu de opções com a opção para cancelar TODAS as operações realizadas no DataSet. Fazemos isto assim :

Agora no evento Click do Menu - usamos o nome padrão - MenuItem2 - insira o código para cancelar tudo:

Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click

if messageBox.Show("Deseja Cancelar TODAS as operações realizadas ?","Cancelar TUDO",MessageBoxButtons.YesNo,MessageBoxIcon.Question)=DialogResult.Yes) then

      Me.dsAuthors1.RejectChanges()

    mostra_dados_atual()

End If

End Sub

2- Agora vamos mostrar como efetivar todas as operações realizadas no DataSet gravando-as no banco de dados:

vai continuar....


José Carlos Macoratti