VB
.NET - Acessando um banco de dados Access (CRUD) - I
Este é mais um exemplo onde temos o acesso a um banco de dados Microsoft Access e realizamos as operações de manutenção de dados (CRUD) usando a linguagem VB .NET.
É um exemplo básico para iniciantes e foi criado para ser simples e fácil de entender.
Vou mostrar cada etapa básica necessária para construir essa aplicação na esperança de que tudo fique bem claro ao iniciante.
Portanto se você é iniciante na linguagem VB .NET ou esta migrando de outra linguagem e quer aprender como acessar um banco de dados acompanhe cada etapa.
Na segunda parte irei mostrar como podemos separar as responsabilidades criando uma camada de acesso aos dados e removendo o código que realiza esta tarefa da camada de apresentação.
Objetivos
Nosso objetivo será acessar a tabela Alunos do banco de dados Escola.mdb e realizar as operações de seleção, inclusão, alteração e exclusão de dados.(CRUD)
1- Do que eu vou precisar ?
Você vai precisar de um ambiente onde a linguagem Visual Basic .NET possa ser desenvolvida e de um banco de dados.
Para começar uma boa notícia : as ferramentas que você vai precisar são todas grátis e você não vai gastar um centavo para aprender.
No link abaixo você poderá baixar o Visual Basic 2010 Express Edition. Ele é grátis, totalmente funcional e não tem restrições. Após algum tempo de uso você será solicitado a efetuar um registro mas fique tranquilo é apenas para controle da Microsoft a ferramenta é realmente grátis.
Neste momento você também já pode usar as novas versões do Visual Studio 2012. Veja neste link:
Como você vai criar o banco de dados ?
Para criar o banco de dados nós vamos usar o próprio Visual Basic 2010 Express mas antes de fazer isso, você deve ter conceitos básicos sobre o que é um banco de dados, o que é são tabelas e o que é a linguagem SQL. Siga os links destes artigos do site:
Se você desejar pode criar o banco de dados no Microsoft Access. Veja este link: Criando banco de dados e tabelas com o Access
Obs: O banco de dados do Microsoft Access 2007 sofreu algumas alterações em relação as versões anteriores. Veja este artigo: VB .NET - Acesso ao Microsoft Access 2007 .accdb - Macoratti.net
Criando o banco de dados no Visual Basic 2010 Express Edition
Abra o Visual Basic 2010 Express Edition e no menu View selecione Other Windows e clique em DataBase Explorer;
![]() |
Você verá a janela DataBase Explorer exibindo as conexões existentes com banco de dados:
![]() |
Vamos criar um novo Banco de dados e para o exemplo eu vou chamá-lo de Escola.mdb .
Clique com o botão direito sobre Data Connections e a seguir em Add Connection...
![]() |
Na janela Add Connection clique no botão Change para abrir a janela que irá exibir as fontes de dados disponíveis no seu sistema;
Selecione o item Microsoft Access DataBase File e clique em OK;
![]() |
Vamos criar a tabela Alunos que vai conter três campos :
Criando o projeto no Visual Basic 2010 Express
Abra o Visual Basic 2010 Express Edition e no menu File clique em New Project e selecione o template Windows Forms Application com o nome CadastroAlunosAccess;
Agora vamos definir no formulário form1.vb a interface para interação com o usuário. Vamos exibir as informações nos controles TextBox, Image e DataGridView no formulário form1.vb.
Para isso abra a janela ToolBox e arraste e inclua os controles abaixo no formulário:
Disponha os controles conforme o leiaute abaixo:
![]() |
Definindo o código do projeto
Para realizar a conexão com um banco de dados podemos usar a tecnologia ADO .NET da plataforma .NET.
Para uma introdução básica sobre ADO .NET veja estes artigos:
Criar uma conexão com uma fonte de dados significa usar o componente apropriado e fornecer informações ao componente para que ele possa encontrar a base de dados e poder acessar informações a partir dela.
Como vamos acessar um banco de dados Microsoft Access vamos usar o provedor de dados OleDb(OLE DB .NET Data Provider):
Este provedor de dados está localizado no namespace System.Data.OleDb, logo, temos que declarar este namespace e o namespace System.Data que vai dar acesso aos objetos ADO .NET no início do nosso formulário:
Imports
System.Data
Imports System.Data.OleDb
A definição da string de conexão com o banco de dados é fundamental. Nosso banco de dados Escola.mdb está localizado na pasta c:\dados e portanto nossa string de conexão será:
"Provider=Microsoft.Jet.OleDb.4.0; Data Source=c:\dados\Escola.mdb"
No evento Load do formulário que ocorre quando a aplicação for aberta vamos definir o código que chama a rotina CarregaDados();
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load CarregaDados() End Sub |
A rotina CarregaDados() vai acessar o banco de dados e selecionar todas as informações existentes e exibi-las no controle DataGridView no formulário form1;
Private Sub CarregaDados() Dim cn As New OleDb.OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=c:\dados\Escola.mdb" cn.Open() Try With Cmd .CommandType = CommandType.Text .CommandText = "SELECT * from Alunos" .Connection = cn End With With Da .SelectCommand = Cmd Dt = New DataTable .Fill(Dt) dgvAlunos.DataSource = Dt End With Catch ex As Exception MsgBox(ex.Message) End Try End Sub |
A seguir temos o código do evento Click do botão Incluir que acessa o banco de dados, abre uma conexão e inclui um novo registro na tabela Alunos usando uma instrução SQL INSERT INTO;
Private Sub btnIncluir_Click(sender As System.Object, e As System.EventArgs) Handles btnIncluir.Click Dim cn As New OleDb.OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=c:\dados\Escola.mdb" cn.Open() Dim arrImagem() As Byte Dim strImagem As String Dim ms As New IO.MemoryStream If txtNome.Text = String.Empty Then MsgBox("Informe o nome do aluno") txtNome.Focus() Return End If ' If Not IsNothing(Me.picFoto.Image) Then Me.picFoto.Image.Save(ms, Me.picFoto.Image.RawFormat) arrImagem = ms.GetBuffer strImagem = "?" Else arrImagem = Nothing strImagem = "NULL" End If Dim myCmd As New OleDb.OleDbCommand myCmd.Connection = cn myCmd.CommandText = "INSERT INTO Alunos(nome, imagem) " & _ " VALUES( '" & Me.txtNome.Text & "'," & strImagem & ")" If strImagem = "?" Then myCmd.Parameters.Add(strImagem, OleDb.OleDbType.Binary).Value = arrImagem End If myCmd.ExecuteNonQuery() MsgBox("Dados Salvos com sucesso!") cn.Close() CarregaDados() End Sub |
No evento Click do botão de comando Procurar o código abaixo chama a rotina Procurar();
Private Sub btnProcurar_Click(sender As System.Object, e As System.EventArgs) Handles btnProcurar.Click If txtCodigo.Text = String.Empty Then MsgBox("Informe o codigo do aluno") Else Procurar(Me.txtCodigo.Text) End If End Sub |
A rotina Procurar() recebe o código do aluno, abre a conexão com o banco de dados e seleciona o aluno pelo seu código preenchendo um DataTable e populando os controles do formulário com os dados obtidos;
Private Sub Procurar(ByVal codigo As Integer) Dim cn As New OleDb.OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=c:\dados\Escola.mdb" cn.Open() Dim arrImagem() As Byte Dim ms As New IO.MemoryStream Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Alunos " & _ " WHERE codigo=" & codigo, cn) Dim dt As New DataTable da.Fill(dt) If dt.Rows.Count > 0 Then Me.txtCodigo.Text = dt.Rows(0).Item("codigo") Me.txtNome.Text = dt.Rows(0).Item("nome") & "" If Not IsDBNull(dt.Rows(0).Item("imagem")) Then arrImagem = dt.Rows(0).Item("imagem") For Each ar As Byte In arrImagem ms.WriteByte(ar) Next Me.picFoto.Image = System.Drawing.Image.FromStream(ms) Else Me.picFoto.Image = System.Drawing.Image.FromFile(Application.StartupPath & "/semfoto.jpg") End If Me.btnIncluir.Enabled = False Else MsgBox("Registro não localizado") End If cn.Close() End Sub |
No evento Click do controle LinkLabel o código abre uma caixa de diálogo para que uma imagem seja selecionada e exibida no controle Image;
Private Sub lnkProcurar_LinkClicked(sender As System.Object, e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles lnkProcurar.LinkClicked If Me.ofdImagem.ShowDialog = 1 Then Me.picFoto.Image = System.Drawing.Image.FromFile(Me.ofdImagem.FileName) Else Me.picFoto.Image = System.Drawing.Image.FromFile(Application.StartupPath & "/semfoto.jpg") End If End Sub |
No evento CellClick do controle DataGridView quando o usuário clicar em um célula do controle iremos selecionar o código da célula clicada e chamar a rotina Procurar passando este código;
Private Sub dgvAlunos_CellClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvAlunos.CellClick Try 'Dim codigo As Integer = dgvAlunos.Rows(e.RowIndex).Cells(e.ColumnIndex).Value() Dim codigo As Integer = dgvAlunos.Rows(e.RowIndex).Cells(0).Value() Procurar(codigo) Catch ex As Exception MsgBox("Seleção Inválida. Clique em uma célula com dados.") End Try End Sub |
Para saber mais sobre como trabalhar como controle DataGridView veja os meus artigos:
No evento Click do botão Limpar limpamos os controles do formulário;
Private Sub btnLimpar_Click(sender As System.Object, e As System.EventArgs) Handles btnLimpar.Click Me.txtCodigo.Text = "" Me.txtNome.Text = "" Me.picFoto.Image = Nothing Me.txtCodigo.Focus() Me.btnIncluir.Enabled = True End Sub |
O evento Click do botão Deletar será solicitada uma confirmação para excluir o registro selecionado; a seguir será aberta uma conexão com o banco de dados e o registro selecionado será deletado usando a instrução SQL DELETE FROM;
Private Sub btnDeletar_Click(sender As System.Object, e As System.EventArgs) Handles btnDeletar.Click Dim resultado As DialogResult = MessageBox.Show("Confirma a exclusão deste registro ?", _ "Excluir", MessageBoxButtons.YesNo, MessageBoxIcon.Question) If resultado = vbYes Then Dim cn As New OleDb.OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=c:\dados\Escola.mdb" cn.Open() If txtCodigo.Text = String.Empty Then MsgBox("Informe o codigo do aluno") txtNome.Focus() Return End If Dim myCmd As New OleDb.OleDbCommand myCmd.Connection = cn myCmd.CommandText = "DELETE FROM Alunos WHERE codigo = " & txtCodigo.Text myCmd.ExecuteNonQuery() MsgBox("Dados excluídos com sucesso!") cn.Close() CarregaDados() End If End Sub |
No evento Click do botão Alterar abrimos uma conexão com o banco de dados e alteramos as informações do registro selecionado usando a instrução SQL UPDATE/SET;
Private Sub btnAlterar_Click(sender As System.Object, e As System.EventArgs) Handles btnAlterar.Click Dim cn As New OleDb.OleDbConnection cn.ConnectionString = "Provider=Microsoft.Jet.OleDb.4.0; Data Source=c:\dados\Escola.mdb" cn.Open() Dim arrImagem() As Byte Dim strImagem As String Dim ms As New IO.MemoryStream If txtNome.Text = String.Empty Then MsgBox("Informe o nome do aluno") txtNome.Focus() Return End If ' If Not IsNothing(Me.picFoto.Image) Then Me.picFoto.Image.Save(ms, Me.picFoto.Image.RawFormat) arrImagem = ms.GetBuffer strImagem = "?" Else arrImagem = Nothing strImagem = "NULL" End If Dim myCmd As New OleDb.OleDbCommand myCmd.Connection = cn myCmd.CommandText = "Update Alunos SET nome = '" & txtNome.Text & "'," & "imagem = " & strImagem & " WHERE codigo =" & txtCodigo.Text If strImagem = "?" Then myCmd.Parameters.Add(strImagem, OleDb.OleDbType.Binary).Value = arrImagem End If myCmd.ExecuteNonQuery() MsgBox("Dados Alterados com sucesso!") cn.Close() CarregaDados() End Sub |
No evento Validating da caixa de texto txtNome usamos o controle ErrorProvider para validar o campo txtNome;
Private Sub txtNome_Validating(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles txtNome.Validating If (txtNome.Text.Trim().Length = 0) Then erro.SetError(txtNome, "Informe o nome do aluno") Else erro.SetError(txtNome, "") End If End Sub |
Para saber detalhes de como usar o controle ErrorProvider veja o meu artigo: Usando o ErrorProvider - Macoratti.net
Executando a solução teremos a exibição do formulário conforme mostra a figura abaixo:
![]() |
È um projeto simples que deverá ser melhorado com a remoção de todo o código que faz o acesso aos dados do formulário e separado em uma classe de acesso aos dados.
Veremos isso em outro artigo mostrando como podemos, mesmo no início, começar a adotar boas práticas de desenvolvimento e ter um código mais robusto.
Pegue o projeto completo
aqui:
CadastroAlunosAccess.zip
Aguarde que em outro artigo eu vou mostrar como criar uma camada de acesso dados separando o código com essa responsabilidade da interface.
VB .NET - Acessando um banco de dados Access (CRUD) - II
Heb 2:13
E outra vez: Porei nele a minha confiança. E ainda: Eis-me aqui, e os filhos que Deus me deu.Heb 2:14
Portanto, visto como os filhos são participantes comuns de carne e sangue, também ele semelhantemente participou das mesmas coisas, para que pela morte derrotasse aquele que tinha o poder da morte, isto é, o Diabo;Heb 2:15
e livrasse todos aqueles que, com medo da morte, estavam por toda a vida sujeitos à escravidão.Heb 2:16
Pois, na verdade, não presta auxílio aos anjos, mas sim à descendência de Abraão.
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#