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.LoaddsAuthors1.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 IntegerDim posicao As Integer contador = Me.BindingContext(dsAuthors1, "authors").CountIf contador >= 0 Then posicao = Me.BindingContext(Me.dsAuthors1, "authors").Position + 1lblcontador.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.ClickMe.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.ClickMe.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.ClickMe.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 :
Obs: As 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 ThenIf (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:
Private Sub btnCadastar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCadastar.Click TryMe.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:
|
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) ThenMe.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