Upload
vital-lima
View
38
Download
0
Embed Size (px)
Citation preview
13/11/12 VB .NET - Acessando um banco de dados Access (CRUD)
1/7www.macoratti.net/12/11/vbn_acc2.htm
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.
1. Visual Basic 2010 Express Edition
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:
Banco de dados - http://www.macoratti.net/banco.htm
Trabalhando com Tabelas - http://www.macoratti.net/tabelas.htm
O poder da SQL - http://www.macoratti.net/sql.htm
Curso de SQL - http://www.macoratti.net/cursosql.htm
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 :
Codigo - Chave primária e numeração automática
Nome - Texto - tamanho 255
Imagem - Objeto OLE
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:
TextBox - txtCodigo
TextBox - txtNome
5 Buttons - btnProcurar(Procurar) , btnIncluir(Novo) , btnDeletar(Deletar) , btnAlterar(Alterar) e btnLimpar(Limpar)
Image - picFoto
DataGridView - dgvAlunos - AutoSizeColumnsMode = Fill
13/11/12 VB .NET - Acessando um banco de dados Access (CRUD)
3/7www.macoratti.net/12/11/vbn_acc2.htm
LinkLabel - lnkProcurar
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:
ADO.NET - Boas Práticas de Programação - Macoratti.net
ADO.NET - Uma visão geral : Objetos Connection - Macoratti.net
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
13/11/12 VB .NET - Acessando um banco de dados Access (CRUD)
4/7www.macoratti.net/12/11/vbn_acc2.htm
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"
13/11/12 VB .NET - Acessando um banco de dados Access (CRUD)
5/7www.macoratti.net/12/11/vbn_acc2.htm
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:
Manipulando o DataGridView - Macoratti.net
VB 2005 - Usando e Abusando do DataGridView - Macoratti.net
Usando múltiplas tabelas com o DataGridView - Macoratti.net
Vinculando dados ao DataGridView - Macoratti.net
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;
13/11/12 VB .NET - Acessando um banco de dados Access (CRUD)
6/7www.macoratti.net/12/11/vbn_acc2.htm
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
13/11/12 VB .NET - Acessando um banco de dados Access (CRUD)
7/7www.macoratti.net/12/11/vbn_acc2.htm
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 dasmesmas 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.
Referências:
Seção VB .NET do Site Macoratti.netSuper DVD .NET - A sua porta de entrada na plataforma .NET
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Seção C# do site Macoratti.net
Relação de Strings para Conexões ADO - Macoratti.net
.NET Provedores de Dados para conexão - Macoratti.net
José Carlos Macoratti