Access inicio | | | | | |
Olá,
Seja Bem Vindo ao Blog.

Conecte-se ou registre-se e utilize gratuitamente este equipamento, temos exemplos referente a criação de banco de dados e desenvolvimento de softwares e programas utilizando o Microsoft Access.


Administração do Blog AccessDoProgramador.

Enviar dados de banco MySQL Local para MySQL Online usando Access e PHP

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

18012017

Mensagem 

Enviar dados de banco MySQL Local para MySQL Online usando Access e PHP






Uma primeira amostra posso enviar dados de um banco de dados MySQL Localhost para uma base MySQL online usando o Access para capturar os dados localmente e usando MSXML2.XMLHTTP para enviar para o dominio que contém o código PHP que processará e gravará os dados na base online.

Eu farei apenas com um campo. A ideia é que após a gravação online o Microsoft Access dê um update na base local.

Eu criei um campo na base MySQL local chamado "sd" (que significa algo como "SubirDepois") do tipo int em que os valores serão:
0 -> Não Enviar;
1 -> Enviar à base online

Agora vamos aos códigos:
O código vba para conexão com o banco local foi elaborado pelo Jeferson da Kartoffel disponibilizado no site usandoaccess. Usei Driver ODBC 5.1, mas você poderá usar qualquer outro que dará certo.

Então antes de tudo baixe logo e instale um Driver ODBC para Microsoft Access.

O código para conectar no banco local:
Coloque em um módulo e dê um nome qualquer:

Public Sub conn1_AbreBanco(qSQL)
    'Variaveis de conexão ao servidor MySQL
     Dim qServidor As String
     Dim qUsuario As String
     Dim qSenha As String
     Dim qDatabase As String
     Dim sErrorMySQL As Double
                               '///Carrega os dados do servidor\\\'
     qServidor = "localhost"   
     qDatabase = "nome_do_banco"     
     qUsuario = "NomeDoUsuarioDoBanco"
     qSenha = "SenhaDoBancoDeDados"                  
     
     cn.Open "Driver={MySQL ODBC 5.1 Driver};Server=" & qServidor & "" _
                                        & ";Database=" & qDatabase & "" _
                                        & ";User=" & qUsuario & "" _
                                        & ";Password=" & qSenha & "" _
                                        & ";Option=3;"
     rs1.CursorLocation = adUseClient
     rs1.Open qSQL, cn, adOpenDynamic, adLockOptimistic
End Sub

Public Sub conn2_AbreBanco()
    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
  
    strDataBaseName = "nome_do_banco"  
    usr_id = "NomeDoUsuarioDoBanco"    
    pass = "SenhaDoBancoDeDados" 
    mySqlIP = "localhost"              
    strCD = "driver={MySQL ODBC 5.1 Driver};server=" & mySqlIP & ";" _
                                                 & "uid=" & usr_id & ";" _
                                                 & "pwd=" & pass & ";" _
                                                 & "database=" & strDataBaseName   
    Set ado_data_conn = New ADODB.Connection
    'Preparando o objeto connection
    ado_data_conn.CursorLocation = adUseClient
    'Usamos um cursor do lado do cliente pois os dados serao acessados na
    'maquina do cliente e nao de um servidor
    ado_data_conn.Open strCD
    'Abre o objeto connection
End Sub


Módulo com variáveis globais:
Coloque em um módulo e dê um nome qualquer:

'===================================== PARAMETROS conn1 ========================================
'Variaveis de conexão ao banco de dados MySQL
Global cn As New ADODB.Connection
Global rs1 As New ADODB.Recordset
Global qSQL As String
'===================================== PARAMETROS conn2 ========================================
'Variaveis de conexão ao banco de dados MySQL
Global ado_data_conn As New ADODB.Connection
Global rs2 As New ADODB.Recordset
Global strSQL As String
Global strCD As String
'===================================== OUTROS PARAMETROS ========================================
'Outras variáveis globais
Global qURL As String


O código que buscará na base MySQL Local
Coloque em um módulo e dê um nome qualquer:

Public Function Buscar_No_MySQL_Local(qSQL)
Call conn1_AbreBanco(qSQL)
   Do While Not rs1.EOF
         Call WebEnviar(rs1.Fields("id"), rs1.Fields("email"))
         rs1.MoveNext
   Loop
rs1.Close
Set rs1 = Nothing
cn.Close
Set cn = Nothing
End Function


A chamada da função para obter os dados do banco offline 
Coloque no melhor evento que lhe for conveniente:
Call Buscar_No_MySQL_Local("SELECT id, email FROM usuarios WHERE sd=1 LIMIT 5;")

A Função que usa MSXML2.XMLHTTP para enviar ao dominio (site online):
Coloque em um módulo e dê um nome qualquer:

#If VBA7 Then
       Declare PtrSafe Sub Sleep Lib "kernel32" _
       (ByVal dwMilliseconds As Long)
#Else
       Declare Sub Sleep Lib "kernel32" _
       (ByVal dwMilliseconds As Long)
#End If
Public Function WebEnviar(argID As Integer, argDado As String)
On Error GoTo Trata_Erro
      Dim qRetorno
      '-------------------------------- winhttp 1 de 2
      Dim WinHttpReq As Object
      Dim strResult As String
      Set WinHttpReq = CreateObject("MSXML2.XMLHTTP")
      '-------------------------------- Fim winhttp 1 de 2
      DoCmd.Hourglass (True)
      '----------------------------------------------- winhttp 2 de 2
      WinHttpReq.Open "GET", "http://www.nome_do_site.com" _
                    & "/nome_pasta/nome_pagina.php" _
                    & "?form_access=nome_do_form" _
                    & "&qdado=" & argDado, False
      WinHttpReq.SetRequestHeader "Content-type", "application/x-www-form-urlencoded"
      WinHttpReq.Send
      strResult = WinHttpReq.ResponseText
      '----------------------------------------------- Fim winhttp 2 de 2
              DoCmd.Hourglass (False)
              qRetorno = Nz(strResult)
              k = Split(qRetorno, ";")
             ' MsgBox k(0) & " - " & k(1)
              If IsNumeric(k(1)) = True Then
                   'Vamos dar update da base local transformando 
                   'o campo "sd" = 0
                     Call conn2_AbreBanco
                     Dim strSQL As String
                     strSQL = "UPDATE usuarios " _
                            & "SET " _
                                   & "sd='0' " _
                            & "WHERE " _
                            & "id=" & argID
                     ado_data_conn.Execute CommandText:=strSQL
                     'MsgBox argID & " - " & k(1)
                     Sleep 3000
              End If
Set WinHttpReq = Nothing
Sai:
Exit Function
Trata_Erro:
DoCmd.Hourglass (False)
Exit Function
Resume Sai
End Function


O código PHP para conexão no MySQL Online: 
Arquivo conexao_pdo.php

<?php
try{
$conecta = new PDO('mysql:host=mysql.nome_dominio.com;'
. ' dbname=nome_do_banco',
'usuario_do_banco', 'senha_do_banco');
$conecta->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
date_default_timezone_set('America/Sao_Paulo');
}catch(PDOException $errar){
'Erro inesperado, veja: ' . $errar->getMessage();
}

O código PHP que receberá dados do Ms Access e gravará no banco MySQL Online:
Arquivo nome_pagina.php

<?php
/* Verifica se existe form_access na url */
if (isset($_GET['form_access'])) {
    $qEmail = $_GET['qdado'];
}
/* Conexão no banco */
require_once 'conexao_pdo.php';
        try {
            $sentenca = $conecta->prepare('INSERT INTO teste(setor) VALUES (:place)');
            $sentenca->bindParam(':place', $qEmail);
            $execut = $sentenca->execute();
            if ($execut) {
               /* Se inseriu correto, agora iremos capturar o id para guardar no banco off-line */
               echo "residual;123";
            }
        } catch (PDOException $e) {
            var_dump($e->getMessage());
            echo 'Erro', PHP_EOL;
        }


Bom. É apenas uma introdução à possibilidades. 
Isso que postei funciona no pleno. Vou melhorar algumas coisas ao longo do tempo, 
de repente elaborar um exemplo funcional.


avatar
Dilson
Facilitador
Facilitador

Brasil


http://www.dadosweb.com

Voltar ao Topo Ir em baixo

- Tópicos similares
Compartilhar este artigo em: BookmarksDiggRedditDel.icio.usGoogleLiveSlashdotNetscapeTechnoratiStumbleUponNewsvineFurlYahoo!Smarking

 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum