VB.NET | Eventos ao fechar programa

diog0silva

Power Member
Boas.

Estou a fazer um programa com login. Quando abre o form principal, o utilizador insere os dados, verifica se coincide com a base de dados, e passa o campo "estado" da tabela utilizador para "Ligado".

Em contrapartida, quando o form principal é fechado, actualizo o estado do utilizador para "Desligado".

O problema é que quando o programa "encrava" por causa de um erro, ele não corre o código de "desconectar o utilizador", e fica como "Ligado". Da próxima vez que for a entrar não vai conseguir, porque supostamente já está ligado.

Não há maneira de associar eventos que corram quando o programa encerre, seja porque motivos for?

Cumprimentos.
 
Quando um programa encrava, o programa encrava..

Podes é, quando um utilizador tenta fazer login verifica se já está ligado, se estiver indicas ao user que já está ligado e pergunta se quer fechar a sessão que está ligada. Se sim, vais a Bd e mudas o campo para desligado e depois o user ao fazer login novamente já pode entrar.
 
Da forma que me estás a sugerir e da forma como eu tenho o código, se já existir uma sessão aberta desse utilizador, ele não vai encerrá-la, vai apenas mudar o campo "estado" para desligado. Ou seja, além da sessão que já está aberta, ele vai permitir abrir outra com o mesmo username.

Para o problema do programa encravar, a solução que sugeriste acho que resolve bem. Mas imagina que um utilizador descobre a password de outro. Com essa solução ele vai poder iniciar uma sessão, mesmo estando o "verdadeiro" utilizador já com uma sessão aberta.
 
numa forma que esteja sempre activa, colocas uma timer e no evento tick poes:
Código:
If form1.visible=true then
'código para estado ligado
else
'codigo para estado desligado
end if
 
Última edição:
Pode-se colocado um código na BD ou num ficheiro de quando o último formulário da aplicação é fechado ou se fez logout. Se esse código não existir quando se inicia de novo o programa, a sessão é terminada automaticamente e é pedido o login de novo
 
Boas
O programa fecha devido a um erro porque não estás a tratar os erros.Em todas as rotinas ou funções que uses coloca um Try Catch deste estilo:

Código:
Try
    Fazer qualquer coisa...
Catch ex As Exception
    Msgbox "Ocorreu o seguinte erro:" & vbCrlf & ex.Message
End Try
O que vai acontecer é quando ocorrer um erro o programa vai emitir uma mensagem de erro mas o programa continua aberto!
Se quiseres por outro lado obrigar o campo a ficar "Desligado" quando fechas um formulário (no form principal talvez) mete o código que usas para alterar o campo no evento FormClosed do formulário.
Cumps
 
Back
Topo