MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


3 participantes

    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    avatar
    gtpsp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 40
    Registrado : 01/11/2013

    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo. Empty [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    Mensagem  gtpsp 27/6/2020, 14:23

    Bom dia a todos, venho recorrer a vocês pois já estou quebrando a cabeça tem um tempo e não consigo resolver.

    Tenho um código vba para conexão ao banco mysql que consegui aqui no forum, fiz uma adaptação incluindo a porta do mysql o que permite tambem a conexão externa ao banco de dados, seja em nuvem ou fisico e que funciona 100%. para executar o código utilizo uma macro autoexec, não sei se colocando uma condição se, para verificar a variável que não identifico resolveria.

    Os problemas que tenho e não estou conseguindo resolver é.

    1-Verificar se a conexão com o banco esta ok, estando faz o processo normal, não estando informar que o banco não foi encontrado, pois se o banco não esta ativo o sistema mostra a tela da conexão odbc para cada tabela o que demora muito para o fechamento do sistema. Sei que isso posso fazer com o if porem não consigo identificar a variavel ou instrução para essa verificação)

    2-O código não apaga tabelas que já não estão mencionadas no código.

    abaixo segue o código que utilizo já com a adaptação da porta.

    Código:

    On Error GoTo AttachDSNLessTable_Err
    Dim td As TableDef
    Dim stConnect As String

    ' deletar as tabelas se ja existirem

    For Each td In CurrentDb.TableDefs
        If td.Name = stLocalTableName Then
            CurrentDb.TableDefs.Delete stLocalTableName
        End If
    Next

    If Len(stUserName) = 0 Then
    '/ / Use autenticação confiável se stUsername não é fornecido.
    ' stConnect = "ODBC; DRIVER ={SQL SERVER};SERVER=" & stServer & ";DATABASE=" & stDatabase & ";Trusted_Connection=Yes"
    stConnect = "ODBC; DRIVER ={MySQL ODBC 5.3 ANSI Driver};SERVER=" & stServer & ";DATABASE=" & stDatabase & ";PORT=" & strPort & ";Trusted_Connection=Yes"
    Else
    '/ / AVISO: Isto irá poupar o nome de usuário e a senha com as informações da tabela vinculada.
    stConnect = "ODBC;DRIVER={MySQL ODBC 5.3 ANSI Driver};SERVER=" & stServer & ";DATABASE=" & stDatabase & ";UID=" & stUserName & ";PWD=" & stPassword & ";PORT=" & strPort & ";Option=3;"
    End If

    Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
    CurrentDb.TableDefs.Append td
    AttachDSNLessTable = True
    Exit Function

    AttachDSNLessTable_Err:

    AttachDSNLessTable = False
    MsgBox "AttachDSNLessTable encontrou um erro inesperado: " & Err.Description

    End Function


    Function CreateConnection()

    Dim strPasswd As String
    Dim strServer As String
    Dim strUser As String
    Dim strDB As String
    Dim strPort As String

    strPasswd = "jo092926" ' Senha do servidor
    strUser = "root" ' Usuario do servidor
    strServer = "127.0.0.1" 'IP do servidor
    strDB = "altasystem" 'Banco de Dado
    strPort = "3306" 'Porta do servidor
    Rem error


    On Error Resume Next 'Tratamento de erro


    'Essa tabela devem ser ligados

    'AttachDSNLessTable("NOME DESTINO", "NOME ORIGEM", strServer, strDB, strUser, strPasswd,strPort)

    Set dummy = AttachDSNLessTable("sy01empresa", "sy01empresa", strServer, strDB, strUser, strPasswd, strPort)

    End Function


    Desde já agradeço a todos.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 22/11/2016

    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo. Empty Re: [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    Mensagem  DamascenoJr. 30/6/2020, 00:39



    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.

    jose alves e gtpsp gostam desta mensagem

    avatar
    gtpsp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 40
    Registrado : 01/11/2013

    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo. Empty Re: [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    Mensagem  gtpsp 1/7/2020, 15:57

    Obrigado DamascenoJr., vou olhar os exemplos e "tentar" entender, assim que conseguir a solução aviso e coloco o código como ficou..

    Muito obrigado por enquanto e qualquer coisa volto a incomodar.

    marcelo3092
    marcelo3092
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 294
    Registrado : 19/08/2010

    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo. Empty Re: [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    Mensagem  marcelo3092 1/7/2020, 17:33

    Ola Amigo eu uso um codigo muito bom do Alexandre Fim que faz a conexão mais e online o banco mysql porem ele funciona local basta alterar os parametros no meu caso eu uso uma tabela para colocar os parametro de conexao, e carrego as variaveis com as informações. Agora o caso de ele não achar o db poderia criar um tratamento de erro a partir do código que ele te mostra.


    '---------------------------------------------------------------------------------------
    ' PROCEDIMENTO: MySQL_Server
    ' DESCRIÇÃO: Carrega os dados para conexão ao servidor MySQL com base na tabela
    ' parametros
    '---------------------------------------------------------------------------------------

    Public Function MySQL_Server()

    MyslqServidor = DLookup("[Servidor]", "_parametros") 'Servidor Web
    MyslqUsuario = DLookup("[Usuario]", "_parametros") 'Usuário do banco de dados
    MyslqSenha = DLookup("[Senha]", "_parametros") 'Senha do banco de dados
    MyslqDatabase = DLookup("[Banco_Dados]", "_parametros") 'Database
    MyslqDriver = DLookup("[Driver]", "_parametros")

    End Function



    Public Function Conecta()

    On Error GoTo trata_erro
    Dim blnConn As Boolean
    Dim myDriver As String


    'se a conexão estiver aberta e o nome do DB for igual ao nome do DB do parâmetro
    'Então está conectado
    If cn.State = 1 And cn.DefaultDatabase = MyslqDatabase Then
    Conecta = True
    Exit Function
    End If

    'Se a conexão estiver fechada então vá para seção de abertura
    If cn.State = 0 Then
    blnConn = True
    GoTo CONECTA_DB
    End If

    If cn.State = 0 And (IsNull(cn.DefaultDatabase) Or Trim(cn.DefaultDatabase) = Empty) Then
    blnConn = True
    ElseIf cn.State = 1 And (IsNull(cn.DefaultDatabase) Or Trim(cn.DefaultDatabase) = Empty) Then
    Call Desconecta
    blnConn = True
    Else
    blnConn = False
    End If

    CONECTA_DB:

    Call MySQL_Server 'Carrega parametros do servidor

    myDriver = "driver={" & MyslqDriver & "}"

    If blnConn = True Then
    With cn
    .CursorLocation = adUseClient
    .ConnectionTimeout = 0
    .CommandTimeout = 0
    .ConnectionString = "" & myDriver & ";" & _
    "SERVER=" & MyslqServidor & ";" & _
    "DATABASE=" & MyslqDatabase & ";" & _
    "USER=" & MyslqUsuario & ";" & _
    "PASSWORD=" & MyslqSenha & ";" & _
    "OPTION=3;"
    .Open
    End With
    End If

    Exit Function

    trata_erro:

    blnConn = True

    GoTo CONECTA_DB

    MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "" & _
    vbCrLf & " O sistema será encerrado.", vbCritical + vbOKOnly + vbApplicationModal, "Erro de Conexão"
    Set cn = Nothing

    Exit Function

    End Function

    'Alexandre Fim
    Public Function Desconecta()

    If cn.State = 1 Then
    cn.Close
    Set cn = Nothing
    End If

    End Function

    Public Function FN_FechaRst(nNomeRst As ADODB.Recordset)
    On Error Resume Next

    If nNomeRst.State = 1 Then
    nNomeRst.Close
    Set nNomeRst = Nothing
    End If

    End Function


    Espero ter ajudado.

    gtpsp gosta desta mensagem

    avatar
    gtpsp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 40
    Registrado : 01/11/2013

    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo. Empty Re: [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    Mensagem  gtpsp 14/7/2020, 15:08

    Desculpe a demora para responder estou afastado por uns dias.. assim que retornar as atividades verifico e digo como ficou..

    obrigado mais uma vez Damasceno e Marcelo.
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 22/11/2016

    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo. Empty Re: [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    Mensagem  DamascenoJr. 23/9/2020, 23:36

    gtpsp, algum avanço?

    Aguardamos...


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    gtpsp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 40
    Registrado : 01/11/2013

    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo. Empty Re: [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    Mensagem  gtpsp 16/11/2020, 19:01

    DamasceloJr.

    Desculpe a demora para responder!

    Não consegui fazer a verificação tentei usar o método conectar e verificar antes do código que uso e não obtive sucesso.

    gera erro de compilação quando chamo o call conectar() para verificar o status..

    Não sei se é porque estou misturando ADO (sugerido) com ODBC (utilizando)..

    Alguma luz por favor de um caminho?

    Obrigado!
    DamascenoJr.
    DamascenoJr.
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3845
    Registrado : 22/11/2016

    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo. Empty Re: [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    Mensagem  DamascenoJr. 4/9/2021, 14:08

    Giovanni, avançou aqui?

    Aguardamos...


    .................................................................................
    Ajude-se a ser ajudado, anexe seu projeto.
    Sempre tente entender o código,
    não somente copie e cole.
    Positive as mensagens que achar útil clicando no '+' no canto superior direito delas.
    avatar
    gtpsp
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 40
    Registrado : 01/11/2013

    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo. Empty Re: [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    Mensagem  gtpsp 13/9/2021, 12:22

    Mais um que estava parado, mudei o conceito do sistema e estou iniciando do zero utilizando o ADO.
    Após alguns estudos e pesquisas optei e tomei como base o exemplo do accessweb abordado pelo Avelino e criado pelo Plinio da Mabesi, apanhei um pouco no início e como pode perceber em outros posts aparecem algumas dúvidas pois não tenho tanta experiência em instruções sql. Mas com a ajuda de vocês o projeto esta caminhando.

    Ficou assim

    Parametros globais
    Código:


    'Variaveis de conexão ao servidor MySQL
    Global MyslqServidor As String
    Global MyslqUsuario As String
    Global MyslqSenha As Variant
    Global MyslqDatabase As String
    Global MyslqPorta As String
    Global sErrorMySQL As Double
    Global strFName As String


    'Variaveis de conexão ao banco de dados MySQL
    Global cn As New ADODB.Connection
    Global rs As New ADODB.Recordset
    Global mstream As New ADODB.Stream
    Global cn1 As New ADODB.Connection
    Global rs1 As New ADODB.Recordset
    Global sSQL As String
    Global csql As String



    Conexão
    Código:


    Global sMySQL As String

    '---------------------------------------------------------------------------------------
    '  PROCEDIMENTO: MySQL_Server
    '    DESCRIÇÃO: Carrega os dados para conexão ao servidor MySQL com base na tabela
    '                parametros
    '---------------------------------------------------------------------------------------

    Public Sub MySQL_Server()

        MyslqServidor = DLookup("[Valor]", "_Parametros", "[ID]=8")    'Servidor Web
        MyslqUsuario = DLookup("[Valor]", "_Parametros", "[ID]=10")    'Usuário do banco de dados
        MyslqSenha = DLookup("[Valor]", "_Parametros", "[ID]=11")    'Senha do banco de dados
        MyslqDatabase = DLookup("[Valor]", "_Parametros", "[ID]=12")    'Database
        MyslqPorta = DLookup("[Valor]", "_Parametros", "[ID]=16")    'Porta Database

    End Sub


    '---------------------------------------------------------------------------------------
    '  PROCEDIMENTO: Conexao_Open
    '    DESCRIÇÃO: Realiza a conexão com o servidor MySQL
    '---------------------------------------------------------------------------------------
    Public Sub Conexao_Open(csql)

        Call MySQL_Server    'Carrega parametros do servidor


        If cn.State = 1 Then
            cn.Close
        End If

        If rs.State = 1 Then
            cn.Close
        End If

        cn.Open "Driver={MySQL ODBC 5.3 ANSI Driver};Server=" & MyslqServidor & ";Database=" & MyslqDatabase & ";User=" & MyslqUsuario & "; Password=" & MyslqSenha & "; PORT=" & MyslqPorta & ";Option=3;"
        rs.CursorLocation = adUseClient
        rs.Open csql, cn, adOpenDynamic, adLockOptimistic


    End Sub


    A única diferença é que ao invés de utilizar o metodo dados padrão para todos os CRUDS estou criando dentro dos proprios formulários.

    Obrigado!

    Conteúdo patrocinado


    [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo. Empty Re: [Resolvido]Conexão ao banco mysql via código vba - verificar se esta ativo.

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 29/4/2024, 05:35