Logo Hardware.com.br
rahfaeu
rahfaeu Novo Membro Registrado
1 Mensagem 0 Curtidas

Verificar se Conexão ADODB já esta aberta (uso simultâneo de planilha)

#1 Por rahfaeu 06/02/2015 - 14:01
Boa tarde a todos,

Estou meio que criando um sistema integrado via Excel (VBA), onde, diversas pessoas irão utilizar simultaneamente (para inserir, editar e consultar dados nos bancos de dados externos “.xlsx”).
Achei que a probabilidade de duas ou mais pessoas clicar no botão ‘Salvar’ (que roda a rotina de Conexão e RecordSet com SQL) fosse impossível, mas aconteceu.

Gostaria de identificar se algum outro usuário esta executando esta mesma rotina, se sim, quero um comando que entenda que a Conexão esta aberta e alguém esta inserindo dados no banco de dados, ou seja, de alguma forma queria criar um loop para que ele não execute o Insert e tente novamente até que a rotina do outro usuário termine.

Pensei em utilizar o comando Wait ou o Sleep, para aguardar que a rotina alheia termine e logo em seguida tentar executar novamente.

Seria possível??? Não estou conseguindo =(
Me ajudem, por favor...

Abaixo segue a macro que fiz(comentada):

Sub SalvarDt()
On Error GoTo TratarERRO
Dim strSQL As String, iSql

‘Abre a conexão:
Call ConnTbOrderDt
strSQL = "INSERT INTO [DataBase$] (Delivery, Destino, Usuario, DtHrIn, Status)"
strSQL = strSQL & " VALUES "
strSQL = strSQL & "('" & Plan4.Range("rngDLV") & "'," 'Delivery
strSQL = strSQL & "'" & Plan4.Range("rngOrdem") & "'," ' Destino
strSQL = strSQL & "'" & Application.UserName & "'," 'Usuario
strSQL = strSQL & "'" & CDate(Now) & "'," ' DtHrIn
strSQL = strSQL & "'" & "Pendente" & "');" ' Status
Debug.Print strSQL

‘**** // É aqui a questão: Gostaria de identificar se algum outro usuário esta executando esta mesma rotina, e se sim, _
‘****//quero um comando que entenda que a Conexão esta aberta e alguém esta inserindo dados no banco de dados, _
‘****// ou seja, de alguma forma queria criar um loop para que ele não execute o Inserte e tente novamente até que a rotina de outro usuário termine.
‘****// Pensei em utilizar o comando Wait ou o Sleep, para aguardar que a rotina alheia termine e logo em seguida tentar executar novamente.
‘****// Seria possível???

On Error Resume Next
DbCont.Execute strSQL
Call CloseDatabase

TratarSAIR:
Exit Sub

TratarERRO:
MsgBox "ERRO na Execução, entre em Contato com o Desenvolvedor, por favor." & vbLf & _
"Relate o ERRO ocorrido: " & Err.Description, vbCritical, "ATENÇÃO"
Resume TratarSAIR

End Sub
© 1999-2024 Hardware.com.br. Todos os direitos reservados.
Imagem do Modal