7
13/11/12 VB .NET - Acessando um banco de dados Access (CRUD) 1/7 www.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:

DocumentVb

Embed Size (px)

Citation preview

Page 1: DocumentVb

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:

Page 2: DocumentVb

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

Page 3: DocumentVb

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

Page 4: DocumentVb

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"

Page 5: DocumentVb

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;

Page 6: DocumentVb

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

Page 7: DocumentVb

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