MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


2 participantes

    [Resolvido]Comparar campos data e executar update baseado em condição

    mathusalmeida
    mathusalmeida
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 30/08/2011

    [Resolvido]Comparar campos data e executar update baseado em condição Empty Comparar campos data e executar update baseado em condição

    Mensagem  mathusalmeida 19/8/2013, 02:34

    Estou usando o seguinte código abaixo, desenvolvido pelo amigo matheus aqui do fórum e adaptado por mim:

    Private Sub Comando4_Click()
    Dim calc As String
    Dim x As String

    ' faz o calculo na hora do cadastro + 3 horas
    If Me.Status = 3 Then
    calc = CDbl(Me.txt1 + #3:00:00 AM#)
    x = CDate(calc)
    Me.PrazoEspera.Value = x
    End If
    If Me.Status = 4 Then
    calc = CDbl(Me.txt1 + #4:00:00 AM#)
    x = CDate(calc)
    Me.PrazoEspera.Value = x
    End If

    'envia o resultado do calcula para o campo status da tblcadastro
    CurrentDb.Execute ("INSERT INTO tblcadastro(Nome,hrHoraCadastro,PrazoEspera,status) " & _
    "VALUES (""" & Me.Nome & """,""" & Me.txt1 & """,""" & Me.PrazoEspera & """,""" & Me.Prioridade & """)")
    DoCmd.RunCommand acCmdSaveRecord
    DoCmd.GoToRecord , , acNewRec
    End Sub

    Num btn no evento click em meu formulário gravo os dados na tabela informando no campo "PrazoEspera" o tempo máximo de espera.

    O que ocorre é que quando o tempo de espera acontece depois das 0 (zero) horas, às vezes não grava a hora "PrazoEspera" corretamente, grava às vezes a data 31/12/1899 e a hora.

    se não estiver muito complicado pra entender, alguém pode apontar uma solução.
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    [Resolvido]Comparar campos data e executar update baseado em condição Empty Re: [Resolvido]Comparar campos data e executar update baseado em condição

    Mensagem  Avelino Sampaio 19/8/2013, 08:40

    Olá!

    A explicação da data "estranha" vc tem neste meu artigo:

    http://www.usandoaccess.com.br/tutoriais/tuto49.asp?id=1#inicio

    Tente assim:

    Dim calc
    calc = Cdbl(me!txt1) + (cdbl(#01:00:00#) * me!status)
    Me.PrazoEspera = iif(calc > 1, cdate(calc-1),calc)


    Sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    mathusalmeida
    mathusalmeida
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 30/08/2011

    [Resolvido]Comparar campos data e executar update baseado em condição Empty Re: [Resolvido]Comparar campos data e executar update baseado em condição

    Mensagem  mathusalmeida 19/8/2013, 15:16

    Avelino, obrigado por me responder, saiba que vc acertou muito quando decidiu criar o Usando Access, seus conhecimentos e sua didática tem ajudado a muitos iniciantes e expert em access. Seus materiais são incriveis. Desde já te parabenizo e agradeço. Seu trabalho tem frutificado.

    Em relação a este código:
    calc = CDbl(Me!txt1) + (CDbl(#1:00:00 AM#) * Me!Status)
    Me.PrazoEspera = IIf(calc > 1, CDate(calc - 1), calc)

    Está gravando a hora corretamente, como eu precisava, obrigado. Mas além de ver minha necessidade atendida, gostaria, se possível, que vc me explica as partes deste código pra melhor entendimento e compreensão, tanto minha, quanto dos colegas do fórum que futuramente se depararem com ele.

    Fico aguardando seu retorno em relação a explicação, se for possível, pra depois, com toda certeza dar o meu thanks e o resolvido.

    Sucesso, ainda mais, e forte abraço.

    Matusalém Ameida.
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3883
    Registrado : 04/04/2010

    [Resolvido]Comparar campos data e executar update baseado em condição Empty Re: [Resolvido]Comparar campos data e executar update baseado em condição

    Mensagem  Avelino Sampaio 19/8/2013, 16:07

    Que bom que resolveu!

    Depois de ter lido o artigo vc agora sabe que data e hora na verdade é representado por números no Access.  

    A parte inteira representa a data e a fração representa a hora.

    Um exemplo numérico para a função:

    me!txt1 = #23:00#
    me!status = 3

    a função Cdbl() mostra o número que representa a data e a hora.  então :

    Cdbl(#23:00#) retorna  0,958333333333333

    Cdbl(#01:00:00#) Retorna  0,0416666666666667 (multiplicado pelo me!status temos o tempo de espera)

    cdbl(#01:00:00#) * 3 Retorna 0,125

    Calc = 0,958333333333333 + 0,125

    Calc = 1,08333333333333

    Observe que neste exemplo a soma resultou em valor inteiro, no caso 1.  Este valor inteiro representa a data e não a hora.

    Cdate(1) retorna 31/12/1899

    Como estamos trabalhando somente com a hora estamos eliminado da soma este valor inteiro que representa a data.  Por isso o -1 abaixo:

    Me.PrazoEspera = iif(calc > 1, cdate(calc-1),calc)

    A função IIf() analisa a variável calc se tem o resultado da soma maior que um (o que é indesejado).  Caso seja então maior que 1, subtraímos este 1 da conta, que representa a data.  Caso seja < 1 vale o valor do calc

    Tem um pequeno errinho meu neste caso, pois se a soma der como resultado exatamente 1.  (#21:00# + #3:00#) = 1

    Altere para >=

    Me.PrazoEspera = iif(calc >= 1, cdate(calc-1),calc)

    Sucesso!


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    mathusalmeida
    mathusalmeida
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 30/08/2011

    [Resolvido]Comparar campos data e executar update baseado em condição Empty Re: [Resolvido]Comparar campos data e executar update baseado em condição

    Mensagem  mathusalmeida 19/8/2013, 20:58

    Amigo Avelino, boa tarde.

    Excelente explicação, obrigado.

    Alterei como orientado.

    Muito obrigado mesmo.

    Agora eu entendi mesmo.

    Abraços...
    mathusalmeida
    mathusalmeida
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 30/08/2011

    [Resolvido]Comparar campos data e executar update baseado em condição Empty Re: [Resolvido]Comparar campos data e executar update baseado em condição

    Mensagem  mathusalmeida 19/8/2013, 21:45

    Amigo Avelino, desculpe incomodar mais um pouco.

    Fiquei como uma dúvida?

    Quando registro 23:00:00, a hora pra espera, considerado + 3 hrs, será de 02:00:00 do outro dia certo!

    Eu utilizo esses dados em um form oculto que executa uma consulta que no evento timer tem o seguinte código

    Me.Horário_Automático.Requery

    Me.Horário_Automático.Value = Time$

    If Me.PrazoEspera <= Time$() Then

    CurrentDb.Execute "update tblCadastro2 set Status= '" & Me.NOVOSTATUS & "' WHERE [PrazoEspera] <= time$() "

    Else

    End If

    Me.Requery


    Quando for satisfeita a condição [PrazoEspera]<=[Hora do Sistema (time$()] deverá mudar o status do valor que for pra [ 1 ]. Não haverá problemas na mudança de dia?!

    Desculpe se a resposta for óbvia.

    No aguardo...

    Matusalém Almeida


    Última edição por mathusalmeida em 19/8/2013, 21:48, editado 1 vez(es) (Motivo da edição : dúvida)
    mathusalmeida
    mathusalmeida
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 264
    Registrado : 30/08/2011

    [Resolvido]Comparar campos data e executar update baseado em condição Empty Calculo de prazo de espera dando erro

    Mensagem  mathusalmeida 15/12/2016, 18:12

    Olá a todos do forum.

    Estou tendo um problema com o código do print abaixo:

    [Resolvido]Comparar campos data e executar update baseado em condição <img src=" />

    Alguém pode me ajudar a enxergar a solução ???

    Grato desde de já.

    Conteúdo patrocinado


    [Resolvido]Comparar campos data e executar update baseado em condição Empty Re: [Resolvido]Comparar campos data e executar update baseado em condição

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 10/5/2024, 10:24