VB .NET - Usando o Banco de dados SQLite - 2
Na primeira parte deste artigo apresentei o SQLite , apontei os recursos necessários para trabalhar com ele , criei um banco de dados SQLite e um projeto no Visual Studio 2010 SP1 para mostrar como realizar as operações básicas.
Vamos então mostrar como realizar as tarefas básicas de manutenção de dados realizando as operações de inclusão, alteração e exclusão de dados. Apenas para recordar, até o momento nosso projeto possui apenas um formulário - form1.vb - que exibe os dados em um DataGridView , e, a partir do qual iremos chamar os demais formulários para realizar essas operações.
Veja abaixo a figura do formulário form1.vb em tempo de projeto e de execução:
Incluindo registros no SQLite
Vamos incluir um novo formulário no projeto que será usado para incluir registros no SQLite. No menu Project Selecione Add New Item e selecione Windows Forms aceitando o nome padrão : form2.vb. (Em um projeto de produção você deve nomear todos os seus objetos de forma consistente e não usar os nomes padrão.Ok!)
Este formulário deverá ser aberto quando o usuário clica no botão Incluir do formulário principal form1.vb;
Para isso vamos incluir no evento Click do botão Incluir o código a seguir:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 'incluir My.Forms.Form2.ShowDialog() carregadados() End Sub |
No código My.Forms.Form2.ShowDialog() usamos os recursos do objeto My.Forms e exibimos o formulário form2 como uma janela modal o que implica a rotina carregadados será executada somente após que o formulário seja fechado. O método Show abre uma janela não Modal.
Nas versões
anteriores do VB.NET você tinha que criar uma instância do formulário para
usá-lo depois. Lembra ???Dim frm As New Form2 frm.Show() O Visual Basic 2005 agora oferece suporte a instâncias padrão, permitindo que você use a seguinte sintaxe(Já conhecida dos programadores VB6) : Form2.Show() Para ficar bem documentado é mais prudente usar a instância a partir da coleção My.Forms, assim : My.Forms.Form2.Show() |
O formulário form2.vb possui o leiaute exibido na figura abaixo e contém controles TextBox, Button e PictureBox:
Neste formulário o usuário poderá informar o nome, idade e selecionar uma imagem como foto para o cliente. Após isso basta clicar no botão Salvar para gravar os registros no banco de dados.
Vamos usar os seguintes namespaces neste formulário:
Imports
System.Data.SQLite
Imports CadastroSQLite.Funcoes
O código do botão Incluir deverá abrir uma janela de diálogo OpenFileDialog para que o usuário selecione uma imagem. Veja o seu código a seguir:
Private Sub btnIncluirFoto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFoto.Click Dim d As New OpenFileDialog d.Filter = "Image (*.png)|*.png|All Files|*.*" If d.ShowDialog() = DialogResult.OK Then picFoto.Image = Image.FromFile(d.FileName) btnFoto.Text = d.FileName Else picFoto.Image = Nothing btnFoto.Text = "Incluir" End If End Sub |
O código associado ao evento Click do botão Salvar é mostrado a seguir:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Try 'define um objeto Command Dim SQLcommand As SQLiteCommand sConnectionString = "Data Source=c:\dados\Macoratti.db;Version=3;New=True;Compress=True;" Dim SQLconnect As New SQLite.SQLiteConnection(sConnectionString) SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand ''@image não pode estar entre aspas simples SQLcommand.CommandText = "INSERT INTO Cadastro(nome,idade,foto) VALUES ('" + txtNome.Text.Replace("'", "''") + "', " + txtIdade.Text + ", @image)" ''Define o parâmetro @image. SQLcommand.Parameters.Add(ImageToBlob("@image", btnFoto.Text)) ''executa a consulta SQLcommand.ExecuteNonQuery() SQLcommand.Dispose() SQLconnect.Close() 'limpa as caixas de texto txtNome.Text = String.Empty txtIdade.Text = String.Empty picFoto.Image = Nothing btnFoto.Text = "Incluir" Catch ex As Exception MsgBox ("Erro ao acessar o SQLite: " & ex.Message) End Try End Sub |
Neste código cabe destacar apenas a string de conexão usada e o comando SQL Insert Into para incluir os registros no banco de dados. Observe que o campo id não esta sendo referenciado pois é uma chave primária auto incremental.
Alterando registros no SQLite
Inclua o formulário para alterar registros no SQLite no menu Project -> Add Windows Forms e aceite o nome padrão - form3.vb clicando em Add;
O formulário form3.vb deverá ser aberto quando o usuário clicar no botão Alterar do formulário form1.vb. O código do evento Click deste botão é visto a seguir:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 'alterar If id >= 0 Then My.Forms.Form3.ShowDialog() carregadados() Else MsgBox("Selecione um item a alterar") End If End Sub
|
Verificamos se existe um id maior que zero, o que indica que um registro foi selecionado no DataGridView, e, em seguida abrirmos o formulário form3.vb;
A seguir defina o leiaute conforme o da figura abaixo onde temos a exibição dos dados que desejamos alterar no formulário e as opções para Selecionar Foto para alterar a foto existente e no botão Alterar estamos persistindo as alterações no banco de dados:
Vamos usar os seguintes namespaces neste formulário:
Imports
System.Data.SQLite
Imports CadastroSQLite.Funcoes
A seguir defina as variáveis codigo usada para armazenar o id que desejamos alterar e d que representa o OpenFileDialog:
Dim codigo As Integer
Dim d As New OpenFileDialog
No evento Load do formulário devemos receber a identificação do registro que vamos alterar. Lembre-se que o usuário deve selecionar o registro que deseja alterar no form1.vb e clicar no botão Alterar. Estamos obtendo este valor do formulário form1.vb : codigo = Form1.id
Private Sub Form3_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load codigo = Form1.id buscaregistro(codigo) End Sub |
A rotina buscaregistro(codigo) realiza a busca pelo registro de código selecionado e preenche os dados no formulário form3.vb usando um DataReader;
Private Sub buscaregistro(ByVal id As Integer) Try Dim SQLconnect As New SQLite.SQLiteConnection() Dim SQLcommand As SQLiteCommand 'define string de conexão com banco de dados SQLite - Macoratti.db criado na pasta c:\dados 'usando a criptografia SQLconnect.ConnectionString = "Data Source=c:\dados\Macoratti.db;Version=3;New=True;Compress=True;" 'abre a conexão SQLconnect.Open() 'cria um comando SQLcommand = SQLconnect.CreateCommand 'define a instrução sql SQLcommand.CommandText = "SELECT * FROM cadastro WHERE id = " & id 'executa o comando e retorna um datareader Dim SQLreader As SQLiteDataReader = SQLcommand.ExecuteReader() 'percorre e exibe os dados While SQLreader.Read() txtID.Text = SQLreader("id") txtNome.Text = SQLreader("nome") txtIdade.Text = SQLreader("idade") If SQLreader("foto").Equals(System.DBNull.Value) Then picFoto.Image = Nothing Else picFoto.Image = BlobToImage(SQLreader("foto")) End If End While SQLcommand.Dispose() SQLconnect.Close() btnFoto.Text = "Selecionar Foto" Catch ex As Exception MsgBox("Erro ao acessar o SQLite: " & ex.Message) End Try End Sub |
Com os dados carregados no formulário o usuário poderá alterar a imagem da foto. Para isso basta clicar no botão Selecionar Foto cujo código é dado a seguir:
Private Sub btnFoto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnFoto.Click d.Filter = "Image (*.png)|*.png|All Files|*.*" If d.ShowDialog() = DialogResult.OK Then picFoto.Image = Image.FromFile(d.FileName) btnFoto.Text = "Foto Alterada" Else picFoto.Image = Nothing btnFoto.Text = "Selecionar Foto" End If End Sub |
Após alterar a foto, o usuário clica no botão Alterar para salvar as alterações no banco de dados. O código é mostrado a seguir:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Try Dim SQLconnect As New SQLite.SQLiteConnection() Dim SQLcommand As SQLiteCommand 'define string de conexão com banco de dados SQLite - Macoratti.db criado na pasta c:\dados 'usando a criptografia SQLconnect.ConnectionString = "Data Source=c:\dados\Macoratti.db;Version=3;New=True;Compress=True;" SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Verifica se a imagem foi alterada If btnFoto.Text = "Foto Alterada" Then SQLcommand.CommandText = "UPDATE Cadastro SET nome = '" & txtNome.Text.Replace("'", "''") & "', idade = " _ & txtIdade.Text & ", foto = @image WHERE id = " & codigo 'Define o parâmetro para imagem SQLcommand.Parameters.Add(ImageToBlob("@image", d.FileName)) Else SQLcommand.CommandText = "UPDATE Cadastro SET nome = '" & txtNome.Text.Replace("'", "''") & "', idade = " _ & txtIdade.Text & " WHERE id = " & codigo End If 'Executa a consulta para alterar SQLcommand.ExecuteNonQuery() SQLcommand.Dispose() SQLconnect.Close() MsgBox("Registro alterado com sucesso.") Me.Close() Catch ex As Exception MsgBox("Erro ao acessar o SQLite: " & ex.Message) End Try End Sub |
Note que a instrução SQL usada para alterar os dados - UPDATE tabela SET campo1=valor - é montada de forma diferente pois se o usuário alterou a imagem da foto devemos passar o parâmetro da imagem na instrução SQL.
Excluindo registros no SQLite
Inclua o formulário para excluir registros no SQLite no menu Project -> Add Windows Forms e aceite o nome padrão - form4.vb clicando em Add;
O formulário form4.vb deverá ser aberto quando o usuário clicar no botão Excluir do formulário form1.vb.
O código do evento Click deste botão é visto a seguir:
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click 'excluir If id >= 0 Then My.Forms.Form4.ShowDialog() carregadados() Else MsgBox("Selecione um item a excluir") End If End Sub |
Verificamos se existe um id maior que zero o que indica que um registro foi selecionado no DataGridView e em seguida abrirmos o formulário form4.vb;
A seguir defina o leiaute do formulário conforme o da figura abaixo onde temos a exibição dos dados que desejamos excluir no formulário;
Vamos usar os seguintes namespaces neste formulário:
Imports
System.Data.SQLite
Imports CadastroSQLite.Funcoes
A seguir defina as variáveis codigo usada para armazenar o id que desejamos excluir e d que representa o OpenFileDialog:
Dim codigo As Integer
Dim d As New OpenFileDialog
No evento Load do formulário devemos receber a identificação do registro que vamos excluir. Lembre-se que o usuário deve selecionar o registro que deseja alterar no form1.vb e clicar no botão Excluir. Estamos obtendo este valor do formulário form1.vb : codigo = Form1.id
Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load codigo = Form1.id buscaregistro(codigo) End Sub |
A rotina buscaregistro(codigo) realiza a busca pelo registro de código selecionado e preenche os dados no formulário form4.vb;
Private Sub buscaregistro(ByVal id As Integer) Try Dim SQLconnect As New SQLite.SQLiteConnection() Dim SQLcommand As SQLiteCommand 'define string de conexão com banco de dados SQLite - Macoratti.db criado na pasta c:\dados 'usando a criptografia SQLconnect.ConnectionString = "Data Source=c:\dados\Macoratti.db;Version=3;New=True;Compress=True;" 'abre a conexão SQLconnect.Open() 'cria um comando SQLcommand = SQLconnect.CreateCommand 'define a instrução sql SQLcommand.CommandText = "SELECT * FROM cadastro WHERE id = " & id 'executa o comando e retorna um datareader Dim SQLreader As SQLiteDataReader = SQLcommand.ExecuteReader() 'percorre e exibe os dados While SQLreader.Read() txtID.Text = SQLreader("id") txtNome.Text = SQLreader("nome") txtIdade.Text = SQLreader("idade") If SQLreader("foto").Equals(System.DBNull.Value) Then picFoto.Image = Nothing Else picFoto.Image = BlobToImage(SQLreader("foto")) End If End While SQLcommand.Dispose() SQLconnect.Close() Catch ex As Exception MsgBox("Erro ao acessar o SQLite: " & ex.Message) End Try End Sub |
Para efetivar a exclusão o usuário clica no botão Excluir cujo código é dado a seguir:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Try Dim SQLconnect As New SQLite.SQLiteConnection() Dim SQLcommand As SQLiteCommand 'define string de conexão com banco de dados SQLite - Macoratti.db criado na pasta c:\dados 'usando a criptografia SQLconnect.ConnectionString = "Data Source=c:\dados\Macoratti.db;Version=3;New=True;Compress=True;" SQLconnect.Open() SQLcommand = SQLconnect.CreateCommand 'Verifica se a imagem foi alterada SQLcommand.CommandText = "DELETE FROM Cadastro WHERE id = " & codigo 'Executa a consulta para alterar SQLcommand.ExecuteNonQuery() SQLcommand.Dispose() SQLconnect.Close() MsgBox("Registro excluído com sucesso.") Me.Close() Catch ex As Exception MsgBox("Erro ao acessar o SQLite: " & ex.Message) End Try End Sub |
Concluímos assim as rotinas usadas nas operações básicas para acessar e realizar as operações CRUD no SQLite.
A seguir temos o projeto em execução e a exibição da formulário para alterar um registro:
Se você notou temos muito código duplicado no projeto o que dificulta a realização de testes e a manutenção. Como exercício você poderia criar uma camada de acesso a dados para o projeto removendo o código pertinente dos formulários. Mãos a obra...
De qualquer forma temos um projeto que mostra como usar o SQLite realizando as operações CRUD usando a linguagem VB .NET.
Pegue o projeto completo aqui: CadastroSQLite.zip
Eu sei é apenas VB .NET, mas eu gosto.
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
VB .NET - Usando o Banco de dados SQLite - 1 - Macoratti.net