Total de visitas: 65959
Conexão com Banco Acess
ACESSO A BANCO DE DADOS ACESS
Esta Rotina faz a ligação com um banco de dados.
Diversos são os programas que precisam acessar banco de dados. Estes podem ser SQL ou por outros aplicativos da Microsoft como o Acess e até mesmo o Excel. Bom, eu particularmente prefiro o Acess pela sua facilidade de manipulação caso você precise aproeitar os dados do banco em outra aplicação. Os entendidos do assunto porém sugerem para grandes aplicações outros bancos de dados.
As rotinas de inclusão, alteração e exclusão de dados são utilizadas nas mais simples aplicações como uma agenda de telefones, endereços etc.
A primeira idéia que você deve ter é a de justamente qual banco de dados você utilizará. Depois, quais dados e tipos de dados que você incluirá nesse banco. Veja um exemplo simples na tabela abaixo que simula um banco de dados:
Local do arquivo |
Nome do banco de dados |
Nome da tabela |
Campo da tabela |
Tipo de dado |
Tipo de dado no VB |
C:agendabd.mdb |
bd.mdb |
Contatos |
Nome |
Letras |
String |
Endereco |
Letras e números |
String |
|||
Telefone |
Números |
Integer ou string |
|||
Nascimento |
Data |
Date |
|||
Catolico |
Opções (sim, não) |
Boolean (true, false) |
É muito importante você observar a tabela acima e suas características:
1. Seu banco de dados possui um caminho
2. Seu banco de dados pode ter várias tabelas
3. As tabelas do banco de dados podem ter vários campos
4. Cada campo de sua tabela possui um tipo de dado
Saber disso é muito importante porque, para executar as operações com seu banco de dados você deverá:
1. Utilizar o componente certo para seu banco de dados
2. Indicar ao programa por meio de um código onde está seu banco de dados
3. Indicar ao programa em qual tabela e qual campo você quer incluir, alterar ou excluiros dados
4. Em alguns casos converter um tipo de dado para outro
Acessando dados do Microsoft Access
Para se conectar com um banco de dados Access você precisará:
1. Declarar o Imports System.Data.OleDb no topo do form
2. criar um objeto OleDbConnection que é o adequado ao banco de dados acess
3. usar uma string de conexão que indica a fonte de dados que você deseja acessar e o nome do provedor que você está usando.
A string de conexão básica para acessar um banco de dados Access é: "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:caminhoarquivo.mdb"
Aqui estamos definindo duas propriedades : Provider e Data Source, ou seja o provedor e o local dos dados. Na verdade são conceitos um pouco desnecessários por agora.
Mas e se o seu banco de dados Access estiver protegido com senha ? Qual a string de conexão ? Neste caso a string de conexão ficaria assim:
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C: esteClientes.mdb ; Jet OLEDB:Systemdatabase=C:caminhosystem.md;UserID=IdentificacaoUsuario;Password=SenhaUsuario" Aqui estamos definindo o arquivo .mdw responsável pela segurança do arquivo mdb usando a propriedade Jet OLE DB e definindo a identificação do usuário e sua senha nas propriedades : User ID e Password. |
Bom, você ainda não está conectado ao banco de dados, pois são necessários alguns comandos e declarações de variáveis, alguns talvez sejam avançados para serem explicados neste ponto:
' declara uma variável de conexão para o objeto oledb
Dim cn As New OleDbConnection
' Define uma variável de comando para o objeto oleDb
Dim cmd As New OleDbCommand
' Define a variável declarada para a conexão na variável declarada para o comando
cmd.Connection = cn
' Define o comando como texto
cmd.CommandType = CommandType.Text
' Define a string de conexão, ou seja indica o caminho do banco de dados
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:nomedapastanomedobanco.mdb"
' Abre a conexao.
cn.Open()
Agora sim, você está conectado e pronto para utilizar seu banco de dados.
Quando queremos executar uma operação, por exemplo, quando o usuário do programa clicar no botão SALVAR DADOS, devemos definir essa operação. Tais operações são chamadas de rotinas, procedures, funções etc. Obviamente cada um desses nomes tem o local certo de serem utilizados, porém o resultado na maioria dos casos é o mesmo.
Várias são as rotinas e os comandos utilizados nas operações com banco de dados, vamos as mais comuns, pelo menos para mim:
1. Salvar dados
2. Alterar dados
3. Excluir dados
4. Carregar dados
Cada uma dessas rotinas ou comandos segue um padrão de codificação, o que muda é simplesmente o comando, pois a ligação, conexão com o banco é a mesma. Desse modo, utilizaremos os passos abaixo para todas as operações:
1. Criação do objeto oleDb
2. Conexão com o banco
3. Comando desejado
Dessa maneira, antes de qualquer coisa, se você vai trabalhar com acesso e manipulação de dados, você deve:
1. Declarar o Imports System.Data.OleDb no topo do form
2. criar um objeto OleDbConnection que é o adequado ao banco de dados acess
3. usar uma string de conexão que indica a fonte de dados que você deseja acessar e o nome do provedor que você está usando.
‘INCLUSÃO DE DADOS
A Rotina abaixo inclui dados no banco, perceba que os nomes em azul e sobrescritos deverão ser alterados de acordo com sua aplicação.
' Cria uma rotina para salvar os dados
Private Sub SALVAR ()
'declara as variáveis e define os comandos
Dim cn As New OleDbConnection
Dim cmd As New OleDbCommand
cmd.Connection = cn
cmd.CommandType = CommandType.Text
Try
' Define a string de conexão
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:CAMINHOARQUIVO.mdb"
' Abre a conexao.
cn.ConnectionString = cn.ConnectionString
cn.Open()
'Define as propriedades do objeto COmmand
cmd.Connection = cn
' Cria um DataReader
cmd.CommandText = "insert into nomedatabela(nomecampo1, nomecampo2)values('" & controle.Text & "')"
cmd.ExecuteNonQuery()
cn.Close()
MsgBox("REGISTRO INCLUÍDO COM SUCESSO!")
Catch ex As Exception
MsgBox(ex.Message())
End Try
End Sub
' ALTERAR REGISTRO
Esta Rotina altera um registro salvo em um banco de dados por meio de um critério. Perceba que o comando muda, ao invés de INSERT tornou-se UPDATE.
Private Sub ALTERAR()
Dim cn As New OleDbConnection
Dim cmd As New OleDbCommand
cmd.Connection = cn
cmd.CommandType = CommandType.Text
Try
' Define a string de conexão
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:CAMINHOARQUIVO.mdb"
' Abre a conexao.
cn.ConnectionString = cn.ConnectionString
cn.Open()
'Define as propriedades do objeto COmmand
cmd.Connection = cn
' Cria um DataReader (perceba qu eo comando mudou ao invés de INSERT tornou-se UPDATE
cmd.CommandText = "UPDATE TABELA SET CAMPO = '" & TEXTBOX.Text & "' where CAMPO like '*" & TEXTBOX.Text & "*'"
cmd.ExecuteNonQuery()
Catch ex As Exception
MsgBox(ex.Message())
End Try
cn.Close()
MsgBox("REGISTRO ALTERADO COM SUCESSO!")
End Sub
OBS: perceba que no seguimento... like '*" & TEXTBOX.Text & "*'" ... o * (asterisco) está entre as aspas, isso porque estamos definindo que o critério deve ser exatamente o contido no '*" & TEXTBOX.Text & "*'". Caso se pretenda usar um critério aproximado deve se utilizar o %, ficando desta forma... like '%" & TEXTBOX.Text & "%'".
'EXCLUIR REGISTROS
Esta Rotina exclui um registro salvo em um banco de dados por meio de um critério.
Private Sub EXCLUIR()
Dim cn As New OleDb.OleDbConnection
Dim cmd As New OleDb.OleDbCommand
cmd.Connection = cn
cmd.CommandType = CommandType.Text
If nome.Text > "" Then
Try
' Define a string de conexão
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:CAMINHOARQUIVO.mdb"
' Abre a conexao.
cn.ConnectionString = cn.ConnectionString
cn.Open()
'Define as propriedades do objeto COmmand
cmd.Connection = cn
' Cria um DataReader
cmd.CommandText = "DELETE FROM TABELA where CAMPO like '*" & TEXTBOX.Text & "*'""
cmd.ExecuteNonQuery()
'SE A ROTINA OCORRER OK ENTAO CARREGA LISTA
carregaLista(lista, "select CAMPO from TABELA order by CAMPO")
Catch ex As Exception
MsgBox(ex.Message())
End Try
Else : MsgBox("REGISTRO EXCLUIDO COM SUCESSO!")
End If
cn.Close()
End Sub
Carrega dados
Várias são as formas de se buscar dados de um banco. Duas delas são:
1. Criando a rotina CARREGARDADOS
2. Carregando os dados em um controle (listbox, Combobox) – Neste caso é preciso carregar os dados por meio de um comando
Bem, para carregar dados de um banco é preciso voltar aos dados iniciais. Sabemos que temos de fazer uma conexão com o banco de dados, indicar as tabelas e os campos que queremos acessar. Além disso, devemos indicar um critério para nossa pesquisa, caso contrário o aplicativo se confundirá. Basta imaginar quantos Paulos você terá em sua agenda.
No banco de dados acess você tem um campo automatizado que gera um número (código), ele pode servir como critério, porém você pode criar um critério, como por exemplo um protocolo, um número de entrada, etc.
Imaginemos um banco de dados com a tabela abaixo:
Local do arquivo |
banco de dados |
tabela |
Campo |
Dado |
Campo |
Dado |
Campo |
Dado |
C:agendabd.mdb |
bd.mdb |
Contatos |
código |
1 |
Nome |
Paulo |
telefone |
88585566 |
2 |
Paulo |
99543246 |
||||||
3 |
Paulo |
54981549 |
||||||
4 |
Paulo |
54984249 |
||||||
5 |
Paulo |
21516215 |
Veja que você tem uma tabela com três campos. Veja que você possui cinco registros com nome de Paulo. Você deverá utilizar um critério para sua pesquisa, caso contrário sua pesquisa trará um monte de registros com dados semelhantes. Agora imagine se você for alterar o número do telefone de um deles, se você não indicar de qual Paulo você quer alterar o número você vai alterar todos os números cujo nome seja Paulo. Por isso é importante estabelecer um critério.
Para carregar os dados em um listbox você deverá:
1. criar uma rotina que faça a ligação com o banco de dados
2. depois deverá criar um comando para realizar a pesquisa
3. Estabelecer um critério para sua pesquisa
ROTINA CARREGA LISTA
Esta Rotina faz a ligação com um banco de dados para que sejam carregados os dados de uma tabela em uma listbox. Ela somente é uma preparação para um comando que carregará os dados, ela pode ser usada também para COMBOBOX, bastando para isso substituir o tipo do objeto para tal, veja listbox. O modelo de comando vê-se abaixo da rotina.
Private Sub carregaLista(ByVal lst As ListBox, ByVal query As String)
' limpa listbox para evitar que as pesquisas se acumulem
LISTA.Items.Clear()
' estabelece a conexão
Dim cn As New OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:CAMINHOARQUIVO.mdb"
' abre a conexao
cn.Open()
' cria um comando select.
Dim cmd As New OleDb.OleDbCommand(query, cn)
' executa a consulta
Dim db_reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.Default)
' declara as variáveis para realizar a busca por meio de um DO WHILE
Dim texto As String
Dim i As Integer
' Esta rotina busca item por item até que tenha percorrido todos na tabela
Do While db_reader.Read
texto = db_reader.Item(0).ToString
For i = 1 To db_reader.FieldCount - 1
texto &= vbTab & db_reader.Item(i).ToString
Next i
' adiciona item por item ao listbox
LISTA.Items.Add(texto)
Loop
' fecha a conexao
cn.Close()
End Sub
COMANDO CARREGA DADOS
A criação da rotina é apenas o primeiro passo para a pesquisa, pois você deverá criar um comando para realizar a busca utilizando a rotina criada. O comando a ser criado segue abaixo:
‘COMANDO PARA CARREGAR OS DADOS
carregaLista(LISTA, "select CAMPO from TABELA CAMPO where like '%" & TEXTBOX.Text & "%' order by CAMPO")
Veja que o comando segue os seguintes passos:
1. começa com a rotina criada (carregalista),
2. depois vem o nome do listbox (lista) no qual os dados devem ser escritos,
3. depois o comando SELECT, seguido do nome do campo desejado (por exemplo, os nomes dos contatos),
4. depois segue-se o critério para a pesquisa sendo que o valor do dado do campo indicado deverá ser como (aproximado por causa do %) o valor contido no controle '%" & TEXTBOX.Text & "%'
5. depois o comando organiza a exibição dos dados por um campo deseja, se você quer exibir os nomes dos contatos, mas quer exibi-los em ordem crescente de data de nascimento por exemplo, o comando deveria ser:
‘COMANDO PARA CARREGAR OS DADOS
carregaLista(LISTA, "select Nome from Contatos where Nome like '%" & txtnome.Text & "%' order by nascimento")
A rotina mais utilizada, porém, é a que carrega todos os dados de um determinado registro nos campos do FORM. Esta rotina também necessita de uma conexão com o banco de dados. O comando, contudo, vem dentro da rotina. Para a criação da rotina você deverá:
1. Realizar a conexão com o banco
2. Criar o comando com um critério de pesquisa
3. Indicar onde o dado deverá ser escrito no FORMULÁRIO
‘CARREGA DADOS
Esta Rotina carrega os dados de uma tabela nos campos dos formularios de acordo com um critério.
Private Sub carregadados()
Dim oConn As New OleDb.OleDbConnection
‘Define a conexão
oConn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:CAMINHOARQUIVO.mdb"
‘informa o critério para exibicao dos dados
‘O critério pode estar contido em qualquer controle de texto, inclusive em um listbox (listbox.selecteditem)
Dim oDA As New OleDb.OleDbDataAdapter("Select CAMPO From TABELA Where CAMPO like '%" & TXTBOX.Text & "%'", oConn)
Dim ds As New DataSet
oDA.Fill(ds)
If ds.Tables(0).Rows.Count > 0 Then
‘indica os campos do formulário onde os dados devem ser escritos
‘observe que você indica o controle de texto (textbox ou label ou combobox onde o dado deve ser escrito
‘Depois você indica entre parentêse o valor de qual campo da tabela você deseja
LABEL.Text = ds.Tables(0).Rows(0)("CAMPO").ToString()
End If
End Sub
Não se esqueçam de agradecer recomendando o blog.
Abraços
Jacob Samuel