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#