ONDE ESTA O ERRO
Pessoal,
Estou desenvolvendo um sistem em rede e estou usuado o codigo abaixo para informar quando um usuário entra no sistema
Private Sub entrando_Timer()
Dim help As Integer
Dim help2 As Integer
Dim sql As String
Dim X As Integer
Conecta
Set rs = New ADODB.Recordset
help = [Ô]0[Ô]
sql = [Ô]SELECT Estado, Usuario FROM Usuarios[Ô]
sql = sql & [Ô] WHERE Estado=[ô][Ô] & help & [Ô][ô]AND NOT Usuario=[ô][Ô] & VNomeCompletoUsuario & [Ô][ô][Ô]
With rs
.Open sql, cnn
If .BOF = False And .EOF = False Then
For X = 1 To 3
Dim CARATA As clsmsg
Set CARATA = New clsmsg
CARATA.ShowMessage rs([Ô]Usuario[Ô]) & [Ô] acabou de entrar![Ô], &HFFFF&, &H8000000C, , 30, 7000, 20, WP_LowerRight, , , , [Ô]Arial Black[Ô], , 12
Next X
help2 = [Ô]1[Ô]
cnn.Execute ([Ô]update Usuarios set estado=[ô][Ô] & help2 & [Ô][ô] where estado=[ô][Ô] & help & [Ô][ô][Ô])
End If
End With
End Sub
O problema é que quando o cliente acessar no servidor estar dando seguinte mensagem [Ô]CONEXÃO NÃO PODE SER USUADA PARA REALIZAR ESTA OPERAÇÃO. ELA ESTAR FECHADA OU é INVALIDA NESTE CONTEXTO.
Não consigo corrigir o erro. O erro só ocorre no servidor
O codigo encontra-se no time.
alguém sabe como corrir
grato
Estou desenvolvendo um sistem em rede e estou usuado o codigo abaixo para informar quando um usuário entra no sistema
Private Sub entrando_Timer()
Dim help As Integer
Dim help2 As Integer
Dim sql As String
Dim X As Integer
Conecta
Set rs = New ADODB.Recordset
help = [Ô]0[Ô]
sql = [Ô]SELECT Estado, Usuario FROM Usuarios[Ô]
sql = sql & [Ô] WHERE Estado=[ô][Ô] & help & [Ô][ô]AND NOT Usuario=[ô][Ô] & VNomeCompletoUsuario & [Ô][ô][Ô]
With rs
.Open sql, cnn
If .BOF = False And .EOF = False Then
For X = 1 To 3
Dim CARATA As clsmsg
Set CARATA = New clsmsg
CARATA.ShowMessage rs([Ô]Usuario[Ô]) & [Ô] acabou de entrar![Ô], &HFFFF&, &H8000000C, , 30, 7000, 20, WP_LowerRight, , , , [Ô]Arial Black[Ô], , 12
Next X
help2 = [Ô]1[Ô]
cnn.Execute ([Ô]update Usuarios set estado=[ô][Ô] & help2 & [Ô][ô] where estado=[ô][Ô] & help & [Ô][ô][Ô])
End If
End With
End Sub
O problema é que quando o cliente acessar no servidor estar dando seguinte mensagem [Ô]CONEXÃO NÃO PODE SER USUADA PARA REALIZAR ESTA OPERAÇÃO. ELA ESTAR FECHADA OU é INVALIDA NESTE CONTEXTO.
Não consigo corrigir o erro. O erro só ocorre no servidor
O codigo encontra-se no time.
alguém sabe como corrir
grato
amigo esse erro é pq a conexao está fechada onde você está abrindo a conexao com o banco?
Você está finalizando o Timer? Ele deve ser finalizado logo no inÃcio, pois no segundo Loop o erro deverá acontecer na linha .Open sql, cnn
Private Sub entrando_Timer()
entrando_Timer.Enabled=False
(restante do código)
End Sub
Hidden,
Obrigado cara pelo apoio é exatamente isso no segundo loop estar ocorrendo o erro na linha que você mencionou só que quando eu coloco o codigo: entrando.enabled=false no inicio como você disse o sistema não dar mais o erro, porém, não mostra mais quando um usuário acessa o sistema.
teria como você postar o codigo de como eu deve fazer.
Obrigado cara pelo apoio é exatamente isso no segundo loop estar ocorrendo o erro na linha que você mencionou só que quando eu coloco o codigo: entrando.enabled=false no inicio como você disse o sistema não dar mais o erro, porém, não mostra mais quando um usuário acessa o sistema.
teria como você postar o codigo de como eu deve fazer.
Ah, entendi. O timer tem que ficar rodando constantemente, aguardando o login.
Tente fazer assim
Você deve fechar o Recordset antes de tentar abri-lo novamente. Qual o valor de Interval no timer? Seria bom você colocar algo em torno de 5 segundos (Interval=5000), para que seu sistema não fique lento.
Tente fazer assim
With rs
.Open sql, cnn
If .BOF = False And .EOF = False Then
For X = 1 To 3
Dim CARATA As clsmsg
Set CARATA = New clsmsg
CARATA.ShowMessage rs([Ô]Usuario[Ô]) & [Ô] acabou de entrar![Ô], &HFFFF&, &H8000000C, , 30, 7000, 20, WP_LowerRight, , , , [Ô]Arial Black[Ô], , 12
Next X
help2 = [Ô]1[Ô]
cnn.Execute ([Ô]update Usuarios set estado=[ô][Ô] & help2 & [Ô][ô] where estado=[ô][Ô] & help & [Ô][ô][Ô])
End If
.close
End With
Você deve fechar o Recordset antes de tentar abri-lo novamente. Qual o valor de Interval no timer? Seria bom você colocar algo em torno de 5 segundos (Interval=5000), para que seu sistema não fique lento.
Hidde,
Obrigado mais uma vez pela atenção,
Uso o time 6 segundos, já havia colocado o close como você mencionou, mas o erro continua o engraçado é que so ocorre onde no computado onde o banco esta instalado, nos clientes não tem esse erro de conexão.
Você matou a xarada realmente o time tem que fica rodando aguardando algum logim.
Só mais uma coisa vejo que você é de Goiania tenho parentes ai os quais visito frequentemente e também tenho ido ai a trabalho, gostaria de manter contato com você a fim de lhe mostrar um sitema que estou desenvolvendo quem sabe você possa fazer alguns ajustes que nele, pelo que vejo tem bastante experiencia em programação. Seus serviços serão remunerados com preço justo.
Se quizer manter contato jaircarvalhosilva@bol.com.br
Obrigado mais uma vez pela atenção,
Uso o time 6 segundos, já havia colocado o close como você mencionou, mas o erro continua o engraçado é que so ocorre onde no computado onde o banco esta instalado, nos clientes não tem esse erro de conexão.
Você matou a xarada realmente o time tem que fica rodando aguardando algum logim.
Só mais uma coisa vejo que você é de Goiania tenho parentes ai os quais visito frequentemente e também tenho ido ai a trabalho, gostaria de manter contato com você a fim de lhe mostrar um sitema que estou desenvolvendo quem sabe você possa fazer alguns ajustes que nele, pelo que vejo tem bastante experiencia em programação. Seus serviços serão remunerados com preço justo.
Se quizer manter contato jaircarvalhosilva@bol.com.br
Podemos conversar sim.
Em relação ao seu código, tente uma última cartada: ao invés de fechar no bloco de código, chame um segundo timer para fazer isso. Por exemplo:
Private Sub timerRecordset_Timer()
timerRecordset.Enabled = False
Rs.Close
End Sub
AÃ você substiuiria o .Close por timerRecordset.Enabled=True.
é importante definir o Timer com Enabled=False (só será ativado quando você quiser fechar) e com Interval=10.
Se isso não funcionar, será preciso analisar mais detalhes do seu código.
Em relação ao seu código, tente uma última cartada: ao invés de fechar no bloco de código, chame um segundo timer para fazer isso. Por exemplo:
Private Sub timerRecordset_Timer()
timerRecordset.Enabled = False
Rs.Close
End Sub
AÃ você substiuiria o .Close por timerRecordset.Enabled=True.
é importante definir o Timer com Enabled=False (só será ativado quando você quiser fechar) e com Interval=10.
Se isso não funcionar, será preciso analisar mais detalhes do seu código.
Ps.: Estou supondo que seu objeto Rs está declarado em um módulo.
Hidden,
Mais uma vez muito obrigado vou te os credito da grande colaboração seguir a sua dica e conseguir fazer funcionar ainda tem momento que dar erro mas estou eliminando.
Grato
Jair
Mais uma vez muito obrigado vou te os credito da grande colaboração seguir a sua dica e conseguir fazer funcionar ainda tem momento que dar erro mas estou eliminando.
Grato
Jair
Tópico encerrado , respostas não são mais permitidas