VB - Programação com Banco de dados : DAO, ADO, ODBC (revisão)


Eu sei que tem muita gente que ainda usa o Visual Basic 6 e que existem muitos sistemas desenvolvidos nesta linguagem que vão precisar de manutenção por muito tempo.

Lembrar disso me faz não abandonar totalmente a essa versão anterior do VB .NET.

Não há como negar que o VB .NET é muito superior em recursos além de contar com uma ferramenta gratuita a disposição de quem desejar aprender a linguagem: basta baixar a versão Express do Visual Basic .NET.

Se você ainda não tem baixe neste link: http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-basic-express

Se você desejar porta a sua versão para a lingua portuguesa baixe o pacote aqui: http://www.microsoft.com/downloads/details.aspx?FamilyID=7ee0d8a7-32fb-407d-a010-da3a7d93fc2f&displaylang=pt-br

Se você ainda usa ou pretende usar a linguagem Visual Basic pode consultar a seção Visual Basic do site Macoratti.net onde encontrará centenas de artigos que o ajudarão no seu dia a dia.

Hoje eu vou mostrar novamente os conceitos básicos para programação com banco de dados usando o Visual Basic 6. É um resumo que mostra como se conectar e manipular um banco de dados usando o bom e velho Visual Basic ou VB. (Os exemplos mostrados aqui também funcionarão com a linguagem VBA com pequenos ajustes)

Existem várias maneiras de se conectar a um banco de dados (por exemplo, Access, SQL Server, etc.): através de controles de dados vinculados, DAO ou ADO.

Em geral, se você pretende ou gosta de ter mais controles sobre o que esta acontecendo o aconselhável é usar DAO ou ADO e no site você tem dezenas de artigos que mostram como fazer isso.

Vamos então ao resumo...

Introdução

Há várias maneiras para abrir um objeto Connection da ADO:

Há três maneiras de abrir um objeto Recordset da ADO:

1- Definindo variáveis básicas

Para começar, você precisa criar algumas variáveis dos seguintes tipos :

ADODB.Connection - Usada se você estiver usando processos de transação;
DataBase - Usada para se conectar ao banco de dados;
ADODB.Recordset - Esta é a variável usada a nível de tabela/consulta
ADODB.Field - Isso nos permite obter informações sobre os campos

2- Conexão com banco de dados

Usando o VB podemos nos conectar usando o Jet ou o ODBC. O recomendado é usar o JET pois o ODBC é mais lento.

Podemos também escolher entre as tecnologias ADO ou DAO. Embora a primeira seja mais moderna a DAO em alguns casos tem um desempenho melhor.

Dim ws as Workspace
Dim db as Database

Set ws=DBEngine.Workspaces(0)
set db=ws.OpenDatabase((nome caminho do banco de dados))	
DAO - JET
Dim ws as Workspace
dim db as database
dim strConnection as string

set ws=DBEngine.Workspaces(0)
let strConnection= "ODBC;DSN=" & nomeBancoDados & ";UID=" & nomUsuario & ";PWD=" & senha
set db=ws.OpenDatabase("", False, False, strConnection)
DAO - ODBC
Dim ad as ADODB.Connection

set ad=New ADODB.Connection
Let ad.ConnectionString= "ODBC;DSN=" & nomeBancoDados & ";UID=" & nomUsuario & ";PWD=" & senha
ad.Open
ADO

3- Abrindo uma Tabela/Consulta ou Visão(View)

Dim rs as recordset

set rs=db.openrecordset(
nome da tabela ou comando SQL)

do while not rs.eof
   'Ponha aqui o código para tratar a informação.
   'A informação do campo pode ser acessado pelo nome do campo

  intID=rs!IDField
  'Ou pelo número do índice na relação de campos(iniciando com 0)
  intString=rs.Field(1)
  'move-se para o próximo registro
  rs.movenext
loop

DAO
dim ar as ADODB.recordset

set rs=new adodb.recordset
rs.open (
instrução SQL)

do while not rs.EOF
   'Ponha aqui o código para tratar a informação.
   'A informação do campo pode ser acessado pelo nome do campo

   intID=rs!IDField
   'Ou pelo número do índice na relação de campos(iniciando com 0)
   intString=rs.Field(1).value
 
 'move-se para o próximo registro
   rs.movenext
loop
ADO

4- Alterando um registro

- Para o editar/adicionar/excluir um registro podemos usar instruções SQL ou comandos diretos.
- Tanto a tecnologia DAO como a ADO podem usar o método Execute para fazer atualizações via SQL.
- Podemos ainda usar procedimentos armazenados ou stored procedures que tem um desempenho melhor.

a- Alterando um registro - Inclusão usando SQL

Dim rs as recordset

set rs=db.openrecordset(
(nome da tabela ou SQL))
rs.execute "INSERT INTO
nome_da_tabela(ID,Nome) VALUES (10,'Macoratti')"
DAO
dim rs as ADODB.recordset

set rs=new adodb.recordset
rs.open (string de conexão com o banco de dados)
rs.execute "INSERT INTO nome_da_tabela(ID,Nome) VALUES (10,'Macoratti')"
ADO

Estamos incluindo os campos ID e Nome.

b- Alterando um registro - Inclusão

Dim rs as recordset

set rs=db.openrecordset((
nome da tabela ou SQL))
rs.addnew
rs!ID=intID
rs!Nome=strNome
rs.update
DAO
Dim ar as ADODB.recordset

set ar=new adodb.recordset
ar.open (string de conexão com o banco de dados)
ar.addnew
ar!ID=intID
ar!Nome=strNome
ar.update
ADO

Neste exemplos após abrir um recordset verificamos se há um registro que satisfaz os critérios no SQL aberto. Se não ele existir é criado um novo registro usando a instrução addnew e em seguida a instrução update.

c- Alterando um registro - Editar

Dim rs as recordset

set rs=db.openrecordset("SELECT * FROM
nome_da_tabela WHERE ID=10")
if rs.eof then
    rs.addnew
else
    rs.edit
end if
rs!ID=intID
rs!Nome=strNome
rs.update
DAO
dim ar as ADODB.recordset

set ar=new adodb.recordset
ar.open "SELECT * FROM nome_da_tabela WHERE ID=10"
if ar.eof then
  ar.addnew
else
  ar.edit
end if
ar!ID=intID
ar!Nome=strNome
ar.update
ADO

d- Alterando um registro - Exclusão

Dim rs as recordset

set rs=db.openrecordset("SELECT * FROM
nome_da_tabela WHERE ID=10")
if not rs.eof then
    rs.delete
end if
DAO
Dim ar as ADODB.recordset

set ar=new adodb.recordset
ar.open "SELECT * FROM nome_da_tabela WHERE ID=10"
if not ar.eof then
  ar.delete
end if
ADO

Recomendação final :

Ao abrir um objeto você deve sempre fechar e liberar o recurso usado:

rs.close
set rs=nothing

1Pedro 1:13 Portanto, cingindo os lombos do vosso entendimento, sede sóbrios, e esperai inteiramente na graça que se vos oferece na revelação de Jesus Cristo.
1Pedro 1:14
Como filhos obedientes, não vos conformeis às concupiscências que antes tínheis na vossa ignorância;

1Pedro 1:15
mas, como é santo aquele que vos chamou, sede vós também santos em todo o vosso procedimento;

Referências:


José Carlos Macoratti