Sei sulla pagina 1di 18

Conexo com Banco

de Dados Parte 01
Ol pessoal! Antes do incio, queria
avisar que estou tentando responder a todos os e-mails,
o mais rpido possvel, e podem aguardar que responderei
a todos.
Essa semana vamos iniciar a abordagem sobre conexo
com banco de dados, usado amplamente no dia-a-dia do programador.
Sero usados nesta e nas prximas colunas os bancos
ACCESS 2000/97, MS-SQL Server e MYSQL. O tipo de conexo
a ser utilizada ser a string para conexo ADO.
Para exemplificar esses trs tipos de conexo,
vamos criar uma aplicao simples de Agenda Telefnica.
Nesta primeira parte vamos usar o banco ACCESS.
Crie um banco com o nome de agenda.mdb e com as seguintes
caractersticas:
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 Mdulo
com o nome de modCnn, como mostra a figura abaixo:

Agora vamos criar dentro do Mdulo o cdigo


de conexo com o banco, e as rotinas de Incluso,
Consulta, Alterao e Excluso como mostra
as linhas abaixo:
Option Explicit
Global cn As
ADODB.Connection
Global rs As
ADODB.Recordset
Conexo:
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 Incluso:
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 Alterao:
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 "Cdigo Invlido", 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 Excluso:
Public Function Excluir(ByVal
intCodigo As Integer) As
Variant
cn.Execute "delete * from pessoal where codigo="
& intCodigo & ""
Excluir = True
End Function
Para esse cdigo que acabamos de digitar
tenha efeito necessrio fazer uma referncia
ao ADO. Ento clique em Project/References e escolha
a opo "Micrisoft ActiveX Data objects 2.6
Library", como mostra a figura abaixo:"

Obs.: As verses 2.5 e 2.6 do ADO so


para ACCESS 2000 e a verso 2.1 para ACCESS 97.
Voltando ao form frmAgenda modele-o como mostra
a figura abaixo:

E o cdigo desse form vai ficar dessa forma:


Boto 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 atualizao.", vbCritical
End If
End Sub
Boto Consultar:
Private Sub cmdConsultar_Click()
Dim intCodigo As
Integer
intCodigo = InputBox("Digite o Cdigo", "Consulta")
Consultar (intCodigo)
End Sub
Boto Excluir:
Private Sub cmdExcluir_Click()
Dim excluido As
Variant
excluido = Excluir(lblCod.Caption)
If excluido = True
Then
Call limpar
Else
MsgBox "Erro na excluiso.", vbCritical
End If
End Sub
Boto 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 incluiso.", vbCritical
End If
End Sub
Funo limpar:
Private Sub limpar()
lblCod.Caption = ""
txtNome.Text = ""
txtEnd.Text = ""
txtFone.Text = ""
End Sub
Boto 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 conexo para SQL Server e tambm vamos usar
procedures.
Abraos a todos e at a prxima
coluna.

Conexo com Banco


de Dados Parte 02
Ol aos navegantes! Na coluna dessa semana
vamos usar o banco de dados MS-SQL Server 7.0.
Abra o Enterprise Manager do SQL e crie uma nova
tabela com o mesmo nome da coluna anterior(pessoal) como mostra
as figuras abaixo:

Vamos criar os campos da tabela como mostra a figura


abaixo:

Como podemos ver essa tabela parecida


como a que fizemos em Access na coluna anterior, mas tem algumas
coisas diferntes.
A primeira diferna que podemos notar
so os tipos de dados, no Access o campo cdigo
era AutoNumber, no SQL Server tambm mas
configurado de uma outra forma. O tipo de dado voc coloca
como int e depois voc clica na caixinha de Identity desse
campo, que o que vai determinar que o mesmo
um AutoNumber.
Os outros campos que no Access ero text,
aqui passam a ser varchar como os respectivos tamanhos.
Diferente do Access podemos tambm usar
o banco de dados SQL Server para criar as rotinas de incluso,
excluso, alterao e consulta, tirando assim
um pouco do processo do Visual Basic e passando para o banco.
No caso do nosso exemplo voc no vai perceber muito
a diferna de performace, mas se a rotina for complexa
isso faz uma grande diferena quando o banco executa a
rotina e devolve apenas os dados para o programa.
Pra isso precisamos usar um recurso do banco chamado
Stored Procedure, e criar uma Stored Procedure para cada processo
usando o Query Analyser do Enterprise Manager como mostra a figura
abaixo:

Agora crie uma Procedure para cada rotina e salve


o arquivo como .sql como mostra os cdigos abaixo:
Procedure de Incluso:
( nome arq. p_Inserir.sql )
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS
ON
GO
if exists (select
* from sysobjects
where id = object_id(N[dbo].[p_Inserir])
and OBJECTPROPERTY(id,
NIsProcedure) = 1)
drop procedure [dbo].[p_Inserir]
GO
CREATE PROCEDURE p_Inserir
(@nome varchar(50),
@endereco varchar(100),
@fone varchar(25))
AS
SET NOCOUNT ON
INSERT INTO pessoal
(nome, endereco, fone)
VALUES (@nome, @endereco, @fone)
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS
ON
GO
Procedure de Alterao:
( nome arq. p_Alterar.sql )
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS
ON
GO
if exists (select
* from sysobjects
where id = object_id(N[dbo].[p_Alterar])
and OBJECTPROPERTY(id,
NIsProcedure) = 1)
drop procedure [dbo].[p_Alterar]
GO
CREATE PROCEDURE p_Alterar
(@codigo int,

@nome varchar(50),
@endereco varchar(100),
@fone varchar(25))
AS
SET NOCOUNT ON
UPDATE pessoal SET
nome = @nome, endereco = @endereco, fone = @fone
WHERE codigo = @codigo
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS
ON
GO
Procedure de Excluso:
( nome arq. p_Excluir.sql )
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS
ON
GO
if exists (select
* from sysobjects
where id = object_id(N[dbo].[p_Excluir])
and OBJECTPROPERTY(id,
NIsProcedure) = 1)
drop procedure [dbo].[p_Excluir]
GO
CREATE PROCEDURE p_Excluir
(@codigo int)
AS
SET NOCOUNT ON
DELETE FROM pessoal
WHERE codigo = @codigo
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS
ON
GO
Procedure de Consulta:
( nome arq. p_Consultar.sql )
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS
ON
GO
if exists (select
* from sysobjects
where id = object_id(N[dbo].[p_Consultar])

and OBJECTPROPERTY(id,
NIsProcedure) = 1)
drop procedure [dbo].[p_Consultar]
GO
CREATE PROCEDURE p_Consultar
(@codigo int)
AS
SET NOCOUNT ON
SELECT * FROM
pessoal
WHERE codigo = @codigo
GO
SET QUOTED_IDENTIFIER OFF SET ANSI_NULLS
ON
GO
Depois de todas as procedures criadas prcisamos
enseri-las no banco SQL Server, ento clique na seta verde
do Query Analyzer ou precione F5 como mostra a figura abaixo:

Repita o processo acima com todas Procedures, e


semana que vem vamos integrar o que fizemos no banco SQL Server
com o projeto de Agenda Telefnica.
At semana que vem e abraos a todos.

Conexo com Banco


de Dados Parte 03
Ol pessoal! Essa semana vamos finalizar
o exemplo com a conexo SQLServer 7.0.
No Visual Basic, crie um novo Projeto com nome
de AgendaSQL, renomeie o Form1 para frmAgenda e insira um Mdulo
com o nome de modCnn, como mostra a figura abaixo:

Agora vamos criar dentro do Mdulo o cdigo


de conexo com o banco, e as rotinas de Incluso,
Consulta, Alterao e Excluso como mostra
as linhas abaixo:
- Comparem essas rotinas
como as criadas para banco ACCESS e vo perceber que existem
algumas diferenas.
Option Explicit
Global cn As
ADODB.Connection
Global rs As
ADODB.Recordset
Conexo:
Private Sub Main()
Dim strArquivo As
String
Dim strLocal As
String
Dim ConectaSQL As
String
Load frmAgenda
frmAgenda.Show
DoEvents
Set cn = New
ADODB.Connection

Set rs = New
ADODB.Recordset
Set cn = CreateObject("ADODB.Connection")
ConectaSQL = "Driver={SQL Server};" & _
"Server=LUKINFO;" & _
"Database=iMasters;" & _
"Uid=sa;Pwd=;"
cn.Open ConectaSQL
End Sub
Rotina de Incluso:
Public Function Inserir(ByVal
strNome As String, _
strEnd As String, _
strFone As String) As
Variant
Dim cmdI As
ADODB.Command
Set cmdI = New ADODB.Command
With cmdI
.ActiveConnection = cn
.CommandText = "p_Inserir"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter(, adVarChar, adParamInput,
50, strNome)
.Parameters.Append .CreateParameter(, adVarChar, adParamInput,
100, strEnd)
.Parameters.Append .CreateParameter(, adVarChar, adParamInput,
25, strFone)
.Execute
End With
Set cmdI = Nothing
Inserir = True
End Function
Rotina de Alterao:
Public Function Alterar(ByVal
intCodigo As Integer, _
strNome As String, _
strEnd As String, _
strFone As String) As
Variant
Dim cmdA As
ADODB.Command
Set cmdA = New ADODB.Command
With cmdA

.ActiveConnection = cn
.CommandText = "p_Alterar"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter(, adInteger, adParamInput,
, intCodigo)
.Parameters.Append .CreateParameter(, adVarChar, adParamInput,
50, strNome)
.Parameters.Append .CreateParameter(, adVarChar, adParamInput,
100, strEnd)
.Parameters.Append .CreateParameter(, adVarChar, adParamInput,
25, strFone)
.Execute
End With
Set cmdA = Nothing
Alterar = True
End Function
Rotina de Consulta:
Public Function Consultar(ByVal
intCodigo As Integer) As
Variant
Set rs = CreateObject("ADODB.Recordset")
Dim cmdC As
ADODB.Command
Set cmdC = New ADODB.Command
With cmdC
.ActiveConnection = cn
.CommandText = "p_Consultar"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter(, adInteger, adParamInput,
, intCodigo)
Set rs = .Execute
End With
With rs
If .EOF Then
MsgBox "Cdigo Invlido", vbExclamation,
"Erro"
Else
frmAgenda.lblCod = !codigo
frmAgenda.txtNome = IIf(IsNull(!nome), Empty,
!nome)
frmAgenda.txtEnd = IIf(IsNull(!Endereco), Empty,
!Endereco)
frmAgenda.txtFone = IIf(IsNull(!fone), Empty,
!fone)
End If

.Close
End With
Set cmdC = Nothing
End Function
Rotina de Excluso:
Public Function Excluir(ByVal
intCodigo As Integer) As
Variant
Dim cmdE As
ADODB.Command
Set cmdE = New ADODB.Command
With cmdE
.ActiveConnection = cn
.CommandText = "p_Excluir"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter(, adInteger, adParamInput,
, intCodigo)
.Execute
End With
Set cmdE = Nothing
Excluir = True
End Function
Para que esse cdigo que acabamos de digitar
tenha efeito necessrio fazer uma referncia
ao ADO, ento clique em Project/References e escolha
a opo "Micrisoft ActiveX Data objects 2.6
Library", como mostra a figura abaixo:"

Voltando ao form frmAgenda modele-o como mostra


a figura abaixo:

E o cdigo desse form vai ficar dessa forma:


Boto 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 atualizao.", vbCritical
End If
End Sub
Boto Consultar:
Private Sub cmdConsultar_Click()
Dim intCodigo As
Integer
intCodigo = InputBox("Digite o Cdigo", "Consulta")
Consultar (intCodigo)
End Sub
Boto Excluir:
Private Sub cmdExcluir_Click()
Dim excluido As
Variant
excluido = Excluir(lblCod.Caption)
If excluido = True
Then
Call limpar
Else
MsgBox "Erro na excluiso.", vbCritical
End If
End Sub
Boto 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 incluiso.", vbCritical
End If
End Sub
Funo limpar:
Private Sub limpar()
lblCod.Caption = ""
txtNome.Text = ""
txtEnd.Text = ""
txtFone.Text = ""
End Sub
Boto Sair
Private Sub cmdSair_Click()
cn.Close
Set cn = Nothing

Unload Me
End Sub
Para finalizar, clique em ProjectAgendaSQL Proprerties
e em Startup Object: troque frmAgenda por Sub Main.
Semana que vem iniciaremos o exemplo desse projeto
com conexo para MySQL.
Abraos a todos e at a prxima
coluna.

Potrebbero piacerti anche