Visual Basic 6 - Acessando uma base de dados MySQL com ADO usando um driver ODBC


 Neste artigo irei mostrar como fazer uma conexão com o MySQL usando um driver ODBC , lembrando que podemos usar também um provedor OLEDB.

No meu primeiro artigo sobre VB e MySQL - Visual Basic - Acessando uma base de dados MySQL com ADO  , abordei os conceitos básicos requeridos para instalar e criar um banco de dados e uma tabela no MySQL e a seguir mostrei como fazer uma conexão com ADO usando um DSN.

Se você , ao ler este artigo , estiver pensando no porquê de eu estar falando do MySQL , a resposta é simples : Se você quer trabalhar com um banco de dados Cliente/Servidor o MySQL além de  ser uma boa opção é GRÁTIS... (deu para convencer ????)

Para que as coisas funcionem você vai precisar ter os seguintes componentes instalados:

  1. MySQL  -  www.mysql.com
  2. MyOBDC  -  www.mysql.com

Eu vou usar o banco de dados Clientes e a tabela Clientes criados no artigo citado acima . Aqui eu vou fazer uma pausa para mostrar mais uma maneira de criar um banco de dados no MySQL .

informe o nome do usuário e a senha e clique no botão OK para criar o arquivo. O ícone do programa será instalado na barra de tarefas

     ( A luz verde indica que o MySQL esta ativo e pronto para ser usado)

Agora vou voltar ao objetivo do artigo - Acessar a tabela clientes do banco de dados Clientes usando ADO sem usar um DSN. Ao Trabalho...

- Inicie um novo projeto no Visual Basic e insira os controles no formulário padrão conforme o layout da figura abaixo:

- Faça uma referência a biblioteca  Microsoft ActiveX Data Objects 2.X LIbrary no seu projeto
  1. Ao iniciar o aplicativo a tela acima irá surgir ; neste momento não há conexão ainda com o banco de dados. 
  2. Para criar uma conexão clique no botão - Abrir Conexão - ; A conexão é feita e a string de conexão é exibida na label - String de conexão .
  3. Os registros são então exibidos e as opções para navegação e manutenção da base de dados tornam-se ativas.

Vou explicar somente o código usado para criar a conexão com a base de dados , os códigos usados para outras tarefas já foram comentados em artigos anteriores.

a - O Código da seção General Declarations

Option Explicit
Private WithEvents adoDataConn As ADODB.Connection
'com withevents voce pode codificar os eventos para a conexao com
'recordset e tambem pode localizar o objeto na lista de codigo
Private WithEvents rsMySQL As ADODB.Recordset
'rsMySQL é o recordset que sera usado na conexao
Dim mblnAddMode As Boolean

Neste código estamos usando a palavra chave WithEvents . Ela é pode ser usada com Dim , Private e Public e é opcional . Sua utilização indica que a variável objeto usada pode responder a eventos disparados pela objeto ActiveX.  Dessa forma podemos codificar eventos disparados pelo objeto ActiveX. Fazemos isto no evento MoveComplete do objeto rsMySQL .

b- O código do botão - Abrir Conexão

Private Sub cmdAbreConexao_Click()

Dim strConnect As String
'esta é a string de conexao devera conter a informacao sobre o provedor e o caminho do banco de dados

Dim strProvider As String
'guarda o nome do provedor
Dim strDataSource As String
'guarda a fonte de dados
Dim strDataBaseName As String
'nome do banco de dados

Dim usr_id As String      
' identificacao do usuario para o banco de dados
Dim pass As String         ' a senha (se tiver) para o banco de dados
Dim mySqlIP As String   
' o endereco ip da maquina na qual esta o mySql
mySqlIP = "127.0.0.1"    ' a localizacao do usuario (localhost)

usr_id = "macoratti" 
' identificacao
pass = "numsey"       ' senha

' string de conexao
strConnect = "driver={MySQL};server=" & mySqlIP & ";uid=" & usr_id & ";pwd=" & pass & ";database=clientes"

Set adoDataConn = New ADODB.Connection
'preparando o objeto connection

adoDataConn.CursorLocation = adUseClient
'usamos um cursor do lado do cliente pois os dados 'serao acessados na maquina do cliente e nao de um servidor

adoDataConn.Open strConnect
'Abre o objeto connection

lblStringdeConexao.Caption = strConnect
'Exibe a string de conexao

Set rsMySQL = New ADODB.Recordset
'Prepara o recordset

rsMySQL.CursorType = adOpenStatic
'Este é o unico tipo de cursor a ser usado com um cursor localizado no lado do cliente

rsMySQL.CursorLocation = adUseClient
'estamos usando o cursor no cliente

rsMySQL.LockType = adLockPessimistic
'Isto garente que o registros que esta sendo editado pode ser salvo

rsMySQL.Source = "Select * From clientes"    
'altere para tabela que desejar
'Para a fonte de dados usamos uma instrucal SQL

rsMySQL.ActiveConnection = adoDataConn
'O recordset precisa saber qual a conexao em uso

rsMySQL.Open
'abre o recordset com isto o evento MoveComplete sera disparado

cmdAbreConexao.Enabled = False
'Desabilitamos o botão para nao iniciar um nova conexao

cmdFechaConexao.Enabled = True
'Permitimos fechar a conexao

'Agora podemos habilitar a navegacao pelos registros do recordset
HabilitaNavegacao
cmdInclui.Enabled = True
cmdExclui.Enabled = True
cmdEdita.Enabled = True

lblBOF.Caption = rsMySQL.BOF
lblEOF.Caption = rsMySQL.EOF
End Sub

Como funciona:

- Usamos as variáveis :

mySqlIP = "127.0.0.1"  ' a localizacao do usuario (localhost)
usr_id = "macoratti"     ' identificacao
pass = "numsey"          ' senha

Para definir o usuário a senha e a identificação do servidor ( como estamos em um máquina desktop , o servidor tem o endereço da máquina local  - 127.0.0.1 ). Numa base de dados Cliente/Servidor você sempre vai ter que definir : usuário , senha , servidor e banco de dados.

- Definimos a string de conexão:

' string de conexao
strConnect = "driver={MySQL};server=" & mySqlIP & ";uid=" & usr_id & ";pwd=" & pass & ";database=clientes"

Aqui usamos as variáveis acima definidas e definimos o banco de dados que vamos acessar - Clientes. O driver usado é o driver {MySQL} . Para poder usar o driver você tem que instalar o MyODBC.

- Após definir a localização do  cursor( adoDataConn.CursorLocation = adUseClient) abrimos a conexão usando a string definida acima:

lblStringdeConexao.Caption = strConnect

-  A seguir declaramos uma instância do objeto Recordset e definimos as propriedades como abaixo:

rsMySQL.CursorType = adOpenStatic
rsMySQL.CursorLocation = adUseClient
rsMySQL.LockType = adLockPessimistic

-  Finalmente definimos a tabela que desejamos acessar e os campos que vamos tratar, ativamos a conexão e abrimos o recordset. 

rsMySQL.Source = "Select * From clientes"     
rsMySQL.ActiveConnection = adoDataConn
rsMySQL.Open

- Agora temos acesso a tabela clientes e aos seus registros . Temos as opções de navegação e de manutenção da base de dados que você pode testar e que eu não vou detalhar.

OBS: Ao utilizar ADO e MyODBC para se conectar ao MySQL você deve ficar atento a algumas propriedades padrão que não são suportadas pelo MySQL , por exemplo :

1- Se você usar a propriedade CursorLocation como adUseServer a propriedade RecordCount irá retornar o valor igual a -1. Para obter o valor correto você deve definir CursorLocation como adUseClient.

2- Para estar apto a atualizar uma tabela você deve definir uma chave primária para esta tabela. O VB e a ADO não pode tratar com o tipo Big Integers e logo vai ocorrer uma erro. Para resolver isto defina OPTION=16834 na string de conexão ODBC ou altere as colunas BIGINT para a opção INT na conexão MyODBC.

O importante foi mostrar que o acesso a uma base de dados MySQL usando um driver ODBC é muito simples : não requer prática nem muita habilidade...

Para fazer o download do projeto - clique aqui -  VBMySQL-ODBC.zip

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:


José Carlos Macoratti