Ir para conteúdo
Fórum Script Brasil
  • 0

VBA não acessa DB MySQL


matheusrf

Pergunta

Prezados boa tarde,

Abaixo há um código que será executado toda vez que um determinado arquivo excel for aberto com o objetivo de bloquear o acesso de computadores não autorizados.

Para isso a ideia é verificar o serial da placa mãe do computador e verificar se o mesmo está cadastrado em um banco de dados mysql. Se não estiver cadastrado fecha o arquivo e caso contrário libera o acesso.

A função Workbook_Open é responsável por liberar ou bloquear o acesso

A função MBSerialNumber pega o serial da placa mãe

A função ConnectDB acessa e realizar uma pesquisa do DB MySQL verificando se o serial do computar está cadastrado.

 

Justamente nesta última função estou tendo o erro 3709 (The connection cannot be used to perform this operation. Its either closed or invalid in this context), na linha 4 de baixo para cima. Gostaria da ajuda de vocês para solucionar este problema.

 

Public cn As Variant
Private Sub Workbook_Open()
    Call MBSerialNumber
    Call ConnectDB
    If rs < 1 Then
        MsgBox ("Data Security failier, This workbook will close")
        ActiveWorkbook.Save
        ActiveWorkbook.Close
    End If
End Sub
Public Function MBSerialNumber() As String
    Dim objs As Object
    Dim obj As Object
    Dim WMI As Object
    Dim sAns As String
    Set WMI = GetObject("WinMgmts:")
    Set objs = WMI.InstancesOf("Win32_BaseBoard")
    For Each obj In objs
        sAns = sAns & obj.SerialNumber
        If sAns < objs.Count Then sAns = sAns & ","
    Next
    MBSerialNumber = sAns
End Function
Private Sub ConnectDB()
    Set cn = CreateObject("ADODB.Connection")
    cn.Open "DRIVER={MySQL ODBC 5.3 ANSI Driver};" & _
        "SERVER=xxx.com.br;" & _
        "DATABASE=xxx;" & _
        "USER=xxx;" & _
        "PASSWORD=xxx"

    Set rs = CreateObject("ADODB.Recordset")
    rs.Open "SELECT COUNT(serial) FROM users WHERE serial='" & MBSerialNumber & "', cn, adOpenStatic, adLockOptimistic"";"

    cn.Close
    Set cn = Nothing

End Sub

 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

De acordo com a mensagem de erro, a conexão não está aberta ou é inválida. Tente checar o estado da conexão, após chamar cn.Open:

MsgBox(cn.State)

E veja se retorna 1, caso retorne 0 é porque a conexão não foi aberta, então você deve conferir se a sua string de conexão está correta.

Abraços!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...