Ronaldo boa noite,
O serviço do seu provedor oferece servidor de banco de dados dedicado ou compartilhado?
Recentemente desenvolvi um sistema comercial em Access com database MySQL e o pacote de serviços do provedor (Hostgator) do meu cliente oferecia banco de dados remoto MySQL, porém, o serviço era de servidor "Compartilhado", ou seja, várias empresas/pessoas utilizando o mesmo serviço.
O sistema foi desenvolvido na arquitetura Client/Server, e os formulários eram todos com os campos "Não Acoplados", onde toda vez que era executado uma
instrução (SELECT, INSERT, DELETE, UPDADTE), a função de conexão ADO com o banco era executada para realizar o comando desejado.
Um dos problemas que eu tive com o servidor compartilhado é que, quando o sistema ficava ocioso (entre 1 a 3 minutos), o servidor "derrubava" a conexão. Entrei em contato com a equipe técnica do serviço de provedor e eles disseram que era uma característica do serviço compartilhado, ou seja, o provedor derruba a conexão para que outros utilizem também, o que faz jus ao preço (R$23,90 /mês).
No modulo de conexão do sistema, criei uma rotina que verifica se a conexão estava aberta (if cnn.state = 1) e se a propriedade "Defaultdatabase" não fosse NULL, e este era o sinal que a conexão estava ativa.
Em algumas ocasiões, a conexão estava ativa mas o Defaultdatabase era "NULL" e ai a conexão era inválida.
Tive que fazer este tratamento para que não caisse a conexão.
Eu acredito que se voce trabalhar com Access com tabelas vinculadas, talvez tenha o mesmo problema.
Caso precisar, segue código e conexão que utilizei:
- Código:
Public Function Conect() As Boolean
On Error GoTo trata_erro
blnconn = False
If cnn.State = 1 And cnn.DefaultDatabase = myDB Then
Conect = True
Exit Function
End If
If cnn.State = 0 Then
blnconn = True
GoTo CONECTA
End If
If cnn.State = 0 And (IsNull(cnn.DefaultDatabase) Or Trim(cnn.DefaultDatabase) = Empty) Then
blnconn = True
ElseIf cnn.State = 1 And (IsNull(cnn.DefaultDatabase) Or Trim(cnn.DefaultDatabase) = Empty) Then
blnconn = True
Else
blnconn = False
End If
CONECTA:
If blnconn = True Then
Set cnn = CreateObject("ADODB.Connection")
myDriver = "DRIVER={MySQL ODBC 5.3 ANSI Driver}"
myServer = "<IP DA CONEXÃO REMOTA>": myPort = "3306": myDB = "<NOME_DO_DATABASE>": myUser = "<USER_NAME>": myPwd = "<PASSWORD>"
With cnn
.CursorLocation = adUseClient
.ConnectionTimeout = 0
.CommandTimeout = 0
.ConnectionString = "" & myDriver & ";" & _
"SERVER=" & myServer & ";" & _
"DATABASE=" & myDB & ";" & _
"USER=" & myUser & ";" & _
"PASSWORD=" & myPwd & ";" & _
"OPTION=3;"
.Open
Conect = True
End With
End If
Exit Function
trata_erro:
blnconn = True
GoTo CONECTA
MsgBox "Erro gerado: " & Err.Number & " - " & Err.Description & "" & _
vbCrLf & " O sistema será encerrado.", vbCritical + vbOKOnly + vbApplicationModal, "Erro de Conexão"
Set cnn = Nothing
End Function
Espero ter ajudado.
Boa sorte
[]'s