Seções iMasters
Linguagens

Conexão com Banco de Dados – Parte 01

Olá pessoal! Antes do início, queria
avisar que estou tentando responder a todos os e-mail´s,
o mais rápido possível, e podem aguardar que responderei
a todos.

Essa semana vamos iniciar a abordagem sobre conexão
com banco de dados, usado amplamente no dia-a-dia do programador.
Serão usados nesta e nas próximas colunas os bancos
ACCESS 2000/97, MS-SQL Server e MYSQL. O tipo de conexão
a ser utilizada será a string para conexão ADO.

Para exemplificar esses três tipos de conexão,
vamos criar uma aplicação simples de Agenda Telefônica.

Nesta primeira parte vamos usar o banco ACCESS.
Crie um banco com o nome de agenda.mdb e com as seguintes
características:

Tabela: pessoal

Campo

Tipo

Tamanho

codigo

AutoNumber

nome

Text

50

end

Text

100

fone

Text

25

No Visual Basic crie um novo Projeto com nome de
AgendaMDB, renomeie o Form1 para frmAgenda e insira um Módulo
com o nome de modCnn, como mostra a figura abaixo:

Agora vamos criar dentro do Módulo o código
de conexão com o banco, e as rotinas de Inclusão,
Consulta, Alteração e Exclusão como mostra
as linhas abaixo:

Option Explicit

Global cn As
ADODB.Connection
Global rs As
ADODB.Recordset

Conexão:
Private Sub Main()
Dim strArquivo As
String

Dim strLocal As
String

Dim ConectaAccess As
String

Load frmAgenda
frmAgenda.Show
DoEvents
Set cn = New
ADODB.Connection
Set rs = New
ADODB.Recordset

strArquivo = "agenda.mdb"
strLocal = App.Path
Set cn = CreateObject("ADODB.Connection")
ConectaAccess = "Driver={Microsoft Access Driver (*.mdb)};"
& _
"Dbq=" & strArquivo & ";" & _
"DefaultDir=" & strLocal & ";" &
_
"Uid=Admin;Pwd=;"

cn.Open ConectaAccess
End Sub

Rotina de Inclusão:

Public Function Inserir(ByVal
strNome As String, _
strEnd As String, _
strFone As String) As
Variant

cn.Execute ("insert into pessoal(nome,end,fone)" _
& "values(‘" & strNome & "’,’"
& strEnd & "’,’" & strFone & "’)")

Inserir = True
End Function

Rotina de Alteração:

Public Function Alterar(ByVal
intCodigo As Integer, _
strNome As String, _
strEnd As String, _
strFone As String) As
Variant

cn.Execute "update pessoal set nome= ‘" & strNome
& "’," _
& " end= ‘" & strEnd & "’, fone= ‘"
& strFone & "’" _
& " where codigo = " & intCodigo

Alterar = True
End Function

Rotina de Consulta:

Public Function Consultar(ByVal
intCodigo As Integer) As
Variant

Set rs = CreateObject("ADODB.Recordset")

With rs
.Open "select * from pessoal where codigo=" & intCodigo
& "", cn, adOpenKeyset, adLockOptimistic
If .RecordCount = 0 Then
MsgBox "Código Inválido", vbExclamation,
"Erro"
Else
frmAgenda.lblCod = !codigo
frmAgenda.txtNome = IIf(IsNull(!nome), Empty,
!nome)
frmAgenda.txtEnd = IIf(IsNull(!End), Empty,
!End)
frmAgenda.txtFone = IIf(IsNull(!fone), Empty,
!fone)
End If
.Close
End With

End Function

Rotina de Exclusão:

Public Function Excluir(ByVal
intCodigo As Integer) As
Variant

cn.Execute "delete * from pessoal where codigo="
& intCodigo & ""
Excluir = True
End Function

Para esse código que acabamos de digitar
tenha efeito é necessário fazer uma referência
ao ADO. Então clique em Project/References… e escolha
a opção "Micrisoft ActiveX Data objects 2.6
Library", como mostra a figura abaixo:"

Obs.: As versões 2.5 e 2.6 do ADO são
para ACCESS 2000 e a versão 2.1 é para ACCESS 97.

Voltando ao form frmAgenda modele-o como mostra
a figura abaixo:

E o código desse form vai ficar dessa forma:

Botão Alterar:
Private Sub cmdAlterar_Click()
Dim atual As
Variant

atual = Alterar(lblCod.Caption, txtNome.Text, txtEnd.Text, txtFone.Text)
If atual = True
Then

Call limpar
Else
MsgBox "Erro na atualização.", vbCritical
End If
End Sub

Botão Consultar:
Private Sub cmdConsultar_Click()
Dim intCodigo As
Integer

intCodigo = InputBox("Digite o Código", "Consulta")
Consultar (intCodigo)
End Sub

Botão Excluir:
Private Sub cmdExcluir_Click()
Dim excluido As
Variant

excluido = Excluir(lblCod.Caption)
If excluido = True
Then

Call limpar
Else
MsgBox "Erro na excluisão.", vbCritical
End If
End Sub

Botão Incluir:
Private Sub cmdIncluir_Click()
Dim novo As
Variant

novo = Inserir(txtNome.Text, txtEnd.Text, txtFone.Text)
If novo = True
Then

Call limpar
Else
MsgBox "Erro na incluisão.", vbCritical
End If
End Sub

Função limpar:
Private Sub limpar()
lblCod.Caption = ""
txtNome.Text = ""
txtEnd.Text = ""
txtFone.Text = ""
End Sub

Botão Sair
Private Sub cmdSair_Click()
cn.Close
Set cn = Nothing
Unload Me
End Sub

Para finalizar, clique em ProjectAgendaMDB Proprerties…
e em Startup Object: troque frmAgenda por Sub Main.

Semana que vem vamos iniciar o exemplo desse projeto
com conexão para SQL Server e também vamos usar
procedures.

Abraços a todos e até a próxima
coluna.

Comente também

20 Comentários

Guilherme Bezerra Fernandes

“Nome da fonte de dados não encontrado e nenhum driver padrão especificado”, esse foi o erro, será que fiz alguma coisa errada ou será que ficou faltando fazer alguma coisa ? Salvei o banco na mesma pasta do projeto.

glauber perlin

excelente a matéria!! tem como colocar comandos, por exemplo, para “1° registro” – “ultimo registro”? obrigado

Abner Visconti

você não tratou de possíveis erros que podem ocorrer durante a execução do programa. Você conside que seria interessante incluir o tratamento de erros? Vou testar o seu código. abraços.

Douglas Goulart

Esse exemplo está me ajudando e muito. Mas o q eu qria saber como ficaria esse código com 2 tabelas. O q deverá ser feito? Digitar tudo num módulo só ou tem q adicionar um novo módulo?
Espero respostas … Abs!
Douglas de Carvalho

Ernesto Almeida de Magalhães Neto

boa tarde Luciano, voce poderia me esclarecer a dúvida deu erro run-time error “3709″.
a conexão não pode ser usada pra realizar esta operação. Ela está fechada ou é invalida neste contexto.
e-mail ernestoam@uol.com.br

Olá , eu adoreii a materia e esta me ajudando mto,
mas eu gostaria de saber se vc tem conexão com banco de dados FIRIBIRD?

eu precisso de ajuda estou a fazer o meu projecto da escola sobre a gestão de uma farmancia e não consegou fazer a conexão access e visual basic, bem com outros projectos e estou a precisar da vossa ajuda, escrevo apartir de angola, luanda

Ok, muuito obrigado mais nao funcionou, segue abaixo a messagem do erro
Syntax erro

Depois de muito tempo procurando apostila ou alguma coisa que ajudasse fazer comunicao entre VB e Access, acho esse site com esse topico.
Montei e apanhei um pouco com alguns erros porem conseguir fazer funcionar. Vc nao sabe como fiquei feliz com isso. Porem ainda tem algumas duvidas exp: como faz para aparecer qual é codigo que vai ser incluido no cadastro?

Valeu mesmo

From: pedrinhobacelar@hotmail.com
To: lukinfo@uol.com.br
Subject: Caso possa me ajudar, ficarei grato!
Date: Mon, 26 Jul 2010 11:43:12 -0300

Bom Dia Luciano,

Estou fazendo um banco de dados e quando eu clico no botão “add” eu gostaria de add mais de um item por vez.

ou seja quando eu clicar no botão add tres itens no banco de dados.

Private Sub cmdregistrar_Click()
tbmercadoria.AddNew
tbmercadoria(“pedido”) = txtpedido
tbmercadoria(“data”) = Mskdata
tbmercadoria(“item”) = lbldbastao
tbmercadoria(“quantidade”) = txtbastao
tbmercadoria(“cliente”) = txtcliente
tbmercadoria(“entrega”) = MSKENTREga
tbmercadoria.Update

tbmercadoria.AddNew
tbmercadoria(“pedido”) = txtpedido
tbmercadoria(“data”) = Mskdata
tbmercadoria(“item”) = lbldtecido
tbmercadoria(“quantidade”) = txttecido
tbmercadoria(“cliente”) = txtcliente
tbmercadoria(“entrega”) = MSKENTREga
tbmercadoria.Update

End if

Caso possa me ajudar ficarei grato.

Um abraço!

Bom dia, estamos utilizando o VBA para coletar dados em uma estação onde está instalado SQL Server 2005 Express. Criamos uma ferramenta ODBC do tipo SQLServer e estamos tentando buscar os dados através do VBA. Gostaria de saber se voce possui um modelo ou se pode me ajudar, pois nunca fiz esta configuração e estou com um pouco de dificuldade. Obrigado

Bom dia, estamos utilizando o VBA para coletar dados em uma estação onde está instalado SQL Server 2005 Express. Criamos uma ferramenta ODBC do tipo SQLServer e estamos tentando buscar os dados através do VBA. Gostaria de saber se voce possui um modelo ou se pode me ajudar, pois nunca fiz esta configuração e estou com um pouco de dificuldade. Obrigado

gerardo

Olá Luciano, bom dia.
Sou Gerardo Lopes, técnico mecânico.
Estou tentando fazer aquele seu exemplo
sobre banco de dados do access com vb no visual studio
2008 mas está ocorrendo erro no momento em que digito
o comando “Global cn As ADODB.Connection”.
Erro: Syntax error.

estou fazendo um trabalho na empresa onde trabalho, INFRAERO,
que envolve o bando de dados. Preciso inserir a data e hora
automaticamente se que alguém tenha que digitar esses dados.
estou fazendo pelo Label que mostra esses dados automaticamente mas
não estou conseguindo levar para o banco de dados. Como devo fazer
pra que dê certo?
Outra coisa, preciso também comunicar um leitor óptico ao programa
que estou fazendo.

Se puderes me ajudar, ficarei muito grato.

Gerardo Lope

Norix

ola meu nome é Novato de jesus
preciso que me ajudem. tenho uma base de dados no access
e quero conecta-la no visual basic 2008

joao

eu fiz exatamente explicado acima, mas a hora q vou incluir uma pessoa ta dando esse erro aqui: object variable or with block variable nos set, não tendi, já fiz varias mudanças e até agora não deu certo.

daniela

estou testando um projeto em vb, mas nao consigo passar de um formulario para outro, como faço para passar de um formulario para outro???
ex.: form login para form cadastro, tipo isso…

telmo

Parece interessamte acho que isto vai ajudar muito na minha PAP final

sandro

tenho um sistema de automaçao feito em vb com firebird eu queria colocar o banco do sistema on line pois tenho clientes que tem duas lojas e querem unificar o seu banco de dados como se as duas lojas fosse uma
aguardo retorno obrigado

Sergio

meu mail: paulopereira_28@hotmail.com
mandem duvidas para aqui!!!

Qual a sua opinião?