MONITORAR SE UM CAMPO DA TABELA FOI ALTERADO

LUIZFGOMES 22/07/2016 14:59:46
#465037
Boa tarde amigos...
Estou com uma dúvida que não consigo solucionar e preciso da ajuda de vocês.
Criei um sistema que delega tarefas para os funcionários da empresa.
Cada funcionário loga no sistema com o seu usuário e senha, com isso, na Tabela Usuários criei um campo chamado STATUS que altera entre ON e OFF conforme o usuário loga no sistema.
Agora vem a dúvida. Preciso que quando eu logue no sistema, uma pequena janela com uma Listbox seja exibida, mostrando quem está ON baseado na tabela Usuários.
Até aí eu já consegui fazer, o problema é que eu gostaria que a cada 5 segundos, essa Listbox fosse atualizada enquanto ele estiver aberta, para saber quem ainda está ON ou quem acabou de entrar ou quem ficou OFF.
Tentei fazer esse procedimento dentro de um Timer, mas o ponteiro do mouse fica piscando a cada vez que ele atualiza.
Será que alguém tem alguma idéia que possa me ajudar ???
JABA 22/07/2016 15:17:57
#465039
Coloque um DoEvents juntamente com o Timer, talvez melhore as piscadas.
LUIZFGOMES 23/07/2016 08:17:09
#465060
Citação:

:
Coloque um DoEvents juntamente com o Timer, talvez melhore as piscadas.


Bom dia JABA...

Poderia demonstrar com um exemplo pra eu entender melhor ??? é que sou meio inexperiente nessa área.

JABA 23/07/2016 15:06:19
#465065
http://forum.baboo.com.br/index.php?/topic/186102-doevents-o-que-%C3%A9-isso/
MILTONSILVA94 23/07/2016 22:42:10
#465079
Postei uns meses atrás aqui no fórum uma rotina de [ô]refresh[ô] que mostra já de cara os registros atualizados quando o form é aberto, e daí com um timer ou até um botão que pode-se criar uma rotina automática a cada 5 segundos para apertar neste botão automático e assim a lista dos usuários vai atualizando conforme você quer.
ADEMIRAS217 24/07/2016 12:13:51
#465084
Bom dia LUIZFGOMES e amigos,
Tenho um código com DoEvents que acredito resolver de forma eficiente o problema.
Preciso fazer um teste e me certificar disso, para poder enviar um exemplo como sugestão.
Essa rotina atua sem interferir na tela sem [Ô]piscadas[Ô] ou outras interferências.
No momento estou impossibilitado devido um pequeno problema de saúde causado pelo diabetes, que me trouxe até a UPA, para uma medicação rápida.
Tão logo eu esteja disponível, darei uma resposta que poderá ser bem interessante.
Um abraço,
AAS.

é mais ou menos assim:

Do while DoEvents()

T1 = Time
Executa o programa
T2 = Time
If T2 - T1 > n segundos then
Scan Tabela
Atualiza Listbox
End if

Loop
ADEMIRAS217 24/07/2016 18:33:51
#465090
Caro Luiz
Conforme prometido segue o programa exemplo. Espero ter contribuído com idéias.
Um abraço
AAS
ADEMIRAS217 24/07/2016 23:37:54
#465100
Amigo,
Fiz uma versão 2 com alguns melhoramentos.
Segue DoEvents2.zip.
Um abraço,
AAS
LUIZFGOMES 25/07/2016 10:31:49
#465104
Bom dia a todos...
Quero primeiramente agradecer a todos pela ajuda que se propuseram a me dar. Em atenção especial ao amigo Ademir, que mandou dois exemplos fantásticos de como resolver o meu problema.
Infelizmente não consegui adaptar os exemplos do Ademir ao meu código fonte.
Para uma melhor visualização do meu código, segue como estou fazendo a consulta no meu banco para saber se o colaborador está ON ou OFF:

Sub Conectados()
Dim conx As New ADODB.Connection
Dim FUNC As New ADODB.Recordset

conx.Open [Ô]DRIVER={Microsoft Access Driver (*.mdb)};dbq=\\10.14.249.201\cpd\programas\Agenda de Tarefas\BD.mdb[Ô]

Set FUNC = conx.Execute([Ô]select nome from usuarios where nome <> [ô][Ô] & frm_principal.Status.Panels(2) & [Ô][ô] and status = [ô]ON[ô] order by nome[Ô])

lst_colab.Clear

While Not FUNC.EOF
lst_colab.AddItem FUNC!nome
FUNC.MoveNext
Wend

End Sub


Se tiverem alguma ideia de como posso adaptar os códigos, agradeço muito.

Obrigados a todos
NILSONTRES 25/07/2016 12:20:06
#465107
Agora que fiquei sabendo qual o banco de dados, access, alias não é banco de dados.
Você não vai conseguir isso, esse tipo de controle não funciona 100% seguro, pois pode ocorrer o desligamento indevido da maquina, nesse caso o registro de controle ficara com o usuário como se estivesse logado.
Mas se utilizar o mysql por exemplo, basta executar a query: [Ô]show full processlist[Ô], que terá os usuários logados e inclusive o tempo de ociosidade dos logados, ai sim. De resto é quebra galho e não 100%
e em sistema, 99,99% não serve.

Faça seu login para responder