none
Calculo de tempo restante - Cronometro RRS feed

  • Pergunta

  • Prezados amigos do forum,

    Tenho uma tabela que contem os seguintes campos:

    TempoRestante time(3)
    HoraUltimaResposta datetime

    O campo tempo restante tem a funcionalidade de um cronometro. Ex.: Inicia com 30 minutos e a cada iteração do usuário ele é decrementado. Utilizo a seguinte instrução:

    "update tabela set TempoRestante=TempoRestante - (getDate() - HoraUltimaRestante), HoraUltimaReposta=getDate()";

    Isso funciona bem, porém, por exemplo: se o tempo restante for 30 segundos e o intervalo de tempo para atualização for maior que 30 segundos, como 1 minuto, o tempo restante retorna: 23:59:30. O que eu desejo é que seja retornado 00:00:00 que identifica como tempo esgotado. Até tenho uma "solução" que funciona porém acredito que não seja a solução adequada seria um update tabela set tempoRestante='00:00:00' where tempoRestante > '00:30:00'.

    Aguardo sugestões.

    Obrigado!!

    segunda-feira, 10 de setembro de 2012 15:34

Respostas

  • Concordo com o Gustavo. Pense sobre isso.

    Mas se não tiver jeito...

    Drop Table #Tabela
    Create Table #Tabela (TempoRestante Time(3), HoraUltimaReposta Time(3))
    Insert Into #Tabela Values (DateAdd(MI, 5, 0), GetDate() - 5)
    
    Update
      #Tabela
    Set
      TempoRestante = Case
                        When Convert(DateTime, Convert(Time, GetDate() - HoraUltimaReposta)) > Convert(DateTime, TempoRestante) Then
    					  0
    					Else
                          TempoRestante - (GetDate() - HoraUltimaReposta)
                      End,
      HoraUltimaReposta = GetDate()
    Where
      (Convert(DateTime, TempoRestante) > 0)
    
    Select * From #Tabela


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Harley Araujo quarta-feira, 12 de setembro de 2012 20:24
    segunda-feira, 10 de setembro de 2012 17:50
    Moderador

Todas as Respostas

  • Boa Tarde,

    Será que implementar esse "decremento" no banco é uma boa idéia ?
    Se você ficar bloqueado por qualquer razão, seus valores ficarão incorretos.

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos:http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível

    segunda-feira, 10 de setembro de 2012 15:53
  • Concordo com o Gustavo. Pense sobre isso.

    Mas se não tiver jeito...

    Drop Table #Tabela
    Create Table #Tabela (TempoRestante Time(3), HoraUltimaReposta Time(3))
    Insert Into #Tabela Values (DateAdd(MI, 5, 0), GetDate() - 5)
    
    Update
      #Tabela
    Set
      TempoRestante = Case
                        When Convert(DateTime, Convert(Time, GetDate() - HoraUltimaReposta)) > Convert(DateTime, TempoRestante) Then
    					  0
    					Else
                          TempoRestante - (GetDate() - HoraUltimaReposta)
                      End,
      HoraUltimaReposta = GetDate()
    Where
      (Convert(DateTime, TempoRestante) > 0)
    
    Select * From #Tabela


    Roberson Ferreira - Database Developer
    Acesse: www.robersonferreira.com.br
    Email: contato@robersonferreira.com.br

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Harley Araujo quarta-feira, 12 de setembro de 2012 20:24
    segunda-feira, 10 de setembro de 2012 17:50
    Moderador
  • Mcdoni,

    Estas iterações do usuários são controladas e identificadas de que forma?

    Você esta querendo aplicar algum controle de tempo de uso de sessão?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quarta-feira, 12 de setembro de 2012 19:44