Avaliação do Usuário

Estrela ativaEstrela ativaEstrela ativaEstrela ativaEstrela ativa
 


OBTENDO OS ITENS NECESSÁRIOS

Para realizar a conexão entre Access e MySql, em primeiro lugar vc deve baixar o MySql e o driver de conexão ODBC. Para este tutorial eu estou utilizando o MySql 5.1.

Download do MySql:
http://dev.mysql.com/downloads/mysql/5.1.html#downloads

Download do Driver ODBC:
http://dev.mysql.com/downloads/connector/odbc/5.1.html

VINCULANDO AS TABELAS

Após instalados o SGBD e o driver crie o banco e as tabelas dentro do MySql. Crie também um DSN (Data Source Name) no ODBC utilizando o driver mencionado. No meu caso utilizei como servidor o localhost, pois instalei no meu próprio computador. No caso de uma rede vc deve utilizar o endereço do servidor onde estiver instalado o MySql, o que pode ser conseguido com o administrador da rede. 

Este procedimento serve para que vc importe as tabelas para o seu sistema através do Obter Dados Externos/Vincular Tabelas, informando o tipo ODBC Databases e na próxima janela o DSN criado anteriormente.

ACESSO VIA CÓDIGO VBA

Depois de vinculadas as tabelas não será mais necessário o DSN, e a atualização ou revinculação das tabelas poderá ser feita a partir dos códigos no módulo de código abaixo, que deve ser criado utilizando-se o editor do VBA:

'===================================================================
'Módulo ControleVinculo - Conexão com Mysql
'
'Métodos:
'1-Checar o vínculo do FrontEnd atual com um BackEnd no servidor MySql;
'2-Atualizar o vínculo do FrontEnd atual com um BackEnd no servidor MySql;
'3-Criar uma conexão com um banco de dados em um servidor MySql;
'4-Executar atualizações e consultas utilizando a conexão MySql.
'
' Autor: Plínio Mabesi
' Contato: pliniomabesi@gmail.com
' Website: www.mabesi.com
'===================================================================

Option Compare Database
Option Explicit

'Cria uma conexão ADO
Private mySqlCon As New ADODB.Connection

'Cria um recordset ADO
Private rstCon As New ADODB.Recordset

Sub conectarMySql(argUsuario As String, argSenha As String, argIp As String, _
                      argBd As String)
'Esta função abre a conexão com o MySql e a deixa ativa, e pode também
'abrir um recordset para testar a conexão.
    
    Dim strConnect As String
    
    strConnect = "driver={MySql ODBC 5.1 driver};server=" & argIp & ";uid=" & _
                 argUsuario & ";pwd=" & argSenha & ";database=" & argBd
    
    mySqlCon.Open strConnect

End Sub

Function atualizaMySql(codigoSql As String) As Boolean
On Error GoTo Err_atualizaBanco
'Atualiza dados no Banco utilizando o código Sql passado à função,
'retornando verdadeiro caso a operação ocorra com sucesso
'ou falso caso ocorra algum problema
    
    rstCon.Open codigoSql, mySqlCon, 3, 3
    atualizaMySql = True

Exit_atualizaBanco:
    Exit Function
    
Err_atualizaBanco:
    atualizaMySql = False
    MsgBox Err.Description
    Resume Exit_atualizaBanco

End Function

Function consultaMySql(codigoSql As String) As ADODB.Recordset
On Error GoTo Err_consultaBanco
'Consulta os dados no Banco utilizando o código Sql passado à função,
'retornando um recordset com o resultado da consulta
    
    rstCon.Open codigoSql, mySqlCon, 3, 3
    Set consultaMySql = rstCon

Exit_consultaBanco:
    Exit Function
    
Err_consultaBanco:
    Set consultaMySql = Nothing
    MsgBox Err.Description
    Resume Exit_consultaBanco

End Function

Function ChecaVinculoMysql(strNomeTab As String, strCampo As String) As Boolean
On Error GoTo ChecaVinculo_Err
' Função que checa o vínculo da tabela strNomeTab.
' Retorna True ou False, dependendo do vínculo
' estar correto, ou não.
    
    Dim db As Database, fld As Field, prp As Property
    Dim strValor As String
    Dim rstCon As Recordset
    
    Set db = DBEngine(0)(0)
    ChecaVinculoMysql = False 'Inicializa a função.
    
    'Tenta obter um campo da tabela vinculada strNomeTab.
    'Se der erro, é preciso revincular as tabelas.
    Set rstCon = db.OpenRecordset(strNomeTab)
    strValor = rstCon(strCampo)
    
    'Se chegou aqui é porque o vínculo é válido.
    ChecaVinculoMysql = True


ChecaVinculo_Sai:
    Set db = Nothing 'libera memória.
    Set fld = Nothing: Set prp = Nothing
    Exit Function

Tenta_Vincular:
    ChecaVinculoMysql = False
    GoTo ChecaVinculo_Sai
    
ChecaVinculo_Err:
    If Err.Number = 3219 Then
        'Erro - Não conseguiu realizar a conexão.
        GoTo Tenta_Vincular
    Else
        Resume ChecaVinculo_Sai
    End If

End Function

Function atualizaVinculoMysql(argUsuario As String, argSenha As String, _
                     argIp As String, argBd As String) As Boolean
On Error GoTo Err_Atualiza
' Atualiza vínculos ao banco de dados informado.
' Retorna True se bem sucedida.
' varPwd (opcional) recebe a senha do arquivo mdb.
    
    Dim bdAtual As Database, defTabela As TableDef
    Dim Contador As Integer
    Dim StatusTexto As String
    Dim strConnect As String
    Dim tabela As String
    
    atualizaVinculoMysql = False ' Valor inicial da função.
    
    Screen.MousePointer = 11 ' Muda cursor para ampulheta
    
    Set bdAtual = DBEngine(0)(0)
    Contador = 1 ' Ajusta contador de tabelas = 1
    
    ' Inicia a barra de progresso do Access.
    StatusTexto = "Atualizando vínculos com " & argBd & "..."
    SysCmd acSysCmdInitMeter, StatusTexto, bdAtual.TableDefs.Count
    
    ' Define a string da propriedade Connect.
    strConnect = "ODBC;driver={MySql ODBC 5.1 driver};server=" & argIp & _
                ";uid=" & argUsuario & ";pwd=" & argSenha & _
                ";database=" & argBd
    
    ' Loop pelas tabelas do front-end.
    For Each defTabela In bdAtual.TableDefs
        
        SysCmd acSysCmdUpdateMeter, Contador 'Atualiza o progresso.
        Contador = Contador + 1
        
        ' Toda tabela vinculada possui a propriedade
        ' Connect preenchida.
        If Len(defTabela.Connect) > 0 Then
            defTabela.Connect = strConnect & ";table=" & defTabela.Name
            defTabela.RefreshLink  ' Atualiza vínculos.
        End If
    
    Next defTabela
    
    atualizaVinculoMysql = True  ' Revinculação completa.
    
Sai:
    SysCmd acSysCmdRemoveMeter
    Set defTabela = Nothing       'libera memória
    Set bdAtual = Nothing
    Screen.MousePointer = 0
    Exit Function
    
Err_Atualiza:
    MsgBox Err.Description
    MsgBox "Houve um problema na Atualização de vínculos..." & vbCrLf & _
            vbLf & _
            "Erro: " & Err.Description
    Resume Sai
    
End Function



{ads1}

ESTRUTURA DO MÓDULO


Perceba que dentro do módulo há duas variáveis e cinco funções:


VARIÁVEIS-------------------------------------------

Private mySqlCon As New ADODB.Connection
Private rstCon As New ADODB.Recordset


FUNÇÕES---------------------------------------------


Sub conectarMySql(argUsuario As String, argSenha As String, argIp As String, argBd As String)

Function atualizaMySql(codigoSql As String) As Boolean

Function consultaMySql(codigoSql As String) As ADODB.Recordset

Function ChecaVinculoMysql(strNomeTab As String, strCampo As String) As Boolean
Function atualizaVinculoMysql(argUsuario As String, argSenha As String, argIp As String, argBd As String) As Boolean


A variável mySqlCon guarda a conexão ativa e a rstCon guarda o recordset para serem usados quando necessário.

As funções realizam as seguintes tarefas:

-> conectarMySql: serve para abrir a conexão e deixá-la ativa;
-> atualizaMySql: executa instruções SQL passadas como argumento, dentro da conexão ativa;
-> consultaMySql: executa uma consulta SQL devolvendo um recordset do tipo ADODB com o registros resultados;

Estas funções de atualização e consulta funcionam mesmo que as tabelas não estejam vinculadas, pois será criada uma nova conexão. Lembre-se que quando quiser executar uma instrução SQL deve antes abrir a conexão com o SERVIDOR.

As funções abaixo servem para tabelas vinculadas:

-> ChecaVinculoMysql: Checa se o vínculo com o banco MySql está correto e acessível, através da tabela passada como argumento. Caso não esteja tentará vincular através da função atualizaVinculoMysql. Observar que o código só funciona se as tabelas já tiverem sido vinculadas anteriormente ao servidor MySql. Caso esteja com tabelas locais ou com Back-End Access não funcionará corretamente.

-> atualizaVinculoMysql: Tenta atualizar os vínculos de todas as tabelas com o servidor MySql, utilizando os atributos passados como argumento: argUsuario (nome do usuário), argSenha (senha do usuário), argIp (endereço do servidor) e argBd (nome do banco de dados no servidor).

Seja social. Compartilhe!