MaximoAccess

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

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Compartilhe
    avatar
    OLDRIVG
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 284
    Registrado : 20/07/2010

    [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Mensagem  OLDRIVG em 15/10/2018, 12:53

    Prezados do Fórum, bom dia.

    Alguém saberia me informar/ajudar em como criar uma regra de validação entre tres campos de data/hora para a seguinte situação: existem os campos Data1, Data2 e Data3; a data a ser digitada no campo Data1 deverá ser maior do que a data já existente no campo Data2 e menor do que a data já existente no campo Data3. Ressaltando que as datas dos campos Data2 e Data3 são do sistema(automática). Existe algum código que permita criar esta validação. Agradeço desde já a ajuda.
    avatar
    Silvio
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 4177
    Registrado : 20/04/2011

    Re: [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Mensagem  Silvio em 15/10/2018, 13:03

    Bom dia...talvez algo assim...
    Evento após atualizar o campo data1

    if me.data1 >  me.data2 and < data3 then  
    msgbox"data1 correta !"
    end if

    ou inverta os sinais para avisar o usuário do erro de data.

    if me.data1 <  me.data2 and > data3 then  '
    msgbox"data1 incorreta !"
    end if


    .................................................................................
    Caso tenha resolvido a tua duvida, coloque o tópico como resolvido.
    www.maximoaccess.com/t860-resolucao-de-topicos

    FabioGO
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 87
    Registrado : 22/08/2012

    Re: [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Mensagem  FabioGO em 15/10/2018, 13:14

    De forma bem rudimentar, no evento após atualizar da data1:

    Código:
    If Me.data1 < Me.data2 Or Me.data1 > Me.data3 Then
            MsgBox "A data deve estar contida no intervalo " & Me.data2 & " e " & Me.data3
            Me.data1.SetFocus
    Else
            'coloque a condição a ser executada se a data estiver dentro do intervalo
    End If

    Edit.: o Silvio foi mais rápido no gatilho. De toda forma, a solução foi apresentada.
    avatar
    OLDRIVG
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 284
    Registrado : 20/07/2010

    Re: [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Mensagem  OLDRIVG em 15/10/2018, 14:20

    Prezados Silvio e FabioGO, agradeço a atenção.

    Infelizmente não funcionou. Dá erro nas duas sugestões.

    Vou nominar os campos para ver se faço entender o que realmente necessito;

    o campo Data1, seria "Data de Entrada" de um documento; o campo Data2 seria a "Data de Saída" deste documento e o campo data3 seria a "Data de Retorno" deste mesmo documento. O que estou pretendendo é impedir que o usuário final digite, a bel prazer, uma data de retorno de um documento fora da data de entrada e da data atual  ou entre a data de entrada e de saída.

    Ex.: o documento entrou dia 01/10/2018, saiu em 05/10/2018 retornou na data de 08/10/2018. O usuário somente poderá digitar uma data, no campo Data de Retorno, que seja depois do dia 05/10/2018 até a data atual inclusive (15/10/2018), também não poderá digitar uma data entre 01/10/2018 (data de entrada) e 05/10/2018 (data de saída).

    A msgbox a ser exibida seria informando ao usuário que deverá digitar entre 05/10/2018(data entrada) e 15/08/2018 (data atual).

    Há alguma possibilidade de fazer está rotina com a msgbox? Obrigado

    FabioGO
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 87
    Registrado : 22/08/2012

    Re: [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Mensagem  FabioGO em 15/10/2018, 14:31

    Então você explicou erroneamente na primeira mensagem.
    Tente com o código abaixo no evento após atualizar da data de retorno

    Código:
    If Me.DataRetorno > Me.DataSaida and Me.DataRetorno < Me.DataAtual Then
            'coloque o código a ser executado se a data estiver dentro do intervalo
    Else
            MsgBox "A data deve estar contida no intervalo " & Me.DataSaida & " e " & Me.DataAtual
            Me.DataRetorno.SetFocus        
    End If
    avatar
    OLDRIVG
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 284
    Registrado : 20/07/2010

    Re: [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Mensagem  OLDRIVG em 15/10/2018, 15:32

    Prezado FabioGO.

    Funcionou em parte.

    Explico: Ao digitar uma data fora dos parâmetros e tabular é exibida a msgbox. Entretanto, ao clicar em OK na msg e tabular novamente ou clicar em salvar registro, é feito o salvamento mesmo com a data digitada fora dos parâmetros. Ou seja, é alertado sobre o erro da data mas não impede que o erro permaneça.

    Há como impedir o prosseguimento do preenchimento dos demais campos sem que a data esteja dentro dos parâmetros?

    Aproveitando, como faço o referencia de data atual (=hoje()) no código que você sugeriu? Isto para evitar de ter criar o campo "Data Atual" (que não existe) em cada movimentação.  Obrigado

    Me desculpe, esqueci de uma outra situação que está ocorrendo; no exemplo que escrevi, caso digite a data de 01/10/2018 (data de entrada) é exibida a msg de erro de data, quando não deveria exibir pois a data de 01/10/2018 está dentro do parâmetro do código de validação (entre 01/10/2018 e 08/10/2018).

    FabioGO
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 87
    Registrado : 22/08/2012

    Re: [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Mensagem  FabioGO em 15/10/2018, 16:03

    O que você pode fazer é não permitir salvar o registro se o campo data retorno estiver vazio, isso no evento antes de inserir ou antes de atualizar do form
    A data atual no vba se referencia na palavra "Date"

    Código:
    If Me.DataRetorno > Me.DataSaida And Me.DataRetorno <= Date Then
            'coloque o código a ser executado se a data estiver dentro do intervalo
    Else
        MsgBox "A data deve estar contida no intervalo " & Me.DataSaida & " e " & Date
        Me.DataRetorno = Null
        Me.DataRetorno.SetFocus
    End If

    Código para o evento antes de atualizar do formulario

    Código:
    If IsNull(Me.DataRetorno) = True Then
            MsgBox "O campo de Data de Retorno não pode ficar vazio"
            Me.DataRetorno.SetFocus
    End If

    Me desculpe, esqueci de uma outra situação que está ocorrendo; no exemplo que escrevi, caso digite a data de 01/10/2018 (data de entrada) é exibida a msg de erro de data, quando não deveria exibir pois a data de 01/10/2018 está dentro do parâmetro do código de validação (entre 01/10/2018 e 08/10/2018).
    ao invés de > use >=


    Última edição por FabioGO em 15/10/2018, 16:25, editado 1 vez(es)
    avatar
    OLDRIVG
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 284
    Registrado : 20/07/2010

    Re: [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Mensagem  OLDRIVG em 15/10/2018, 16:24

    Mas aí é se o campo estiver NULO. Que não é o caso.

    O que se pretende é não permitir o prosseguimento do registro se a data de retorno não estiver dentro dos parâmetros da validação.

    Da forma que você está sugerindo, qualquer data que for digitada será aceita, pois o campo não estará nulo.

    De qualquer forma, lhe agradeço pela a ajuda. Se não há como fazer da forma pretendida, paciência.

    Mais uma vez obrigado.

    FabioGO
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 87
    Registrado : 22/08/2012

    Re: [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Mensagem  FabioGO em 15/10/2018, 16:30

    Dá pra fazer da forma pretendida sim, você que precisa de um pouco de paciência Rolling Eyes

    Vamos lá:

    Nesse ultimo código que te passei, se a data não estiver na conformidade, será mostrada a mensagem e o campo dataretorno ficará nulo.

    Enquanto não for digitada uma data válida, ficará nesse looping.

    Colocando o código de verificar se o campo está nulo, não vai permitir salvar o registro enquanto não for digitada uma data válida.

    Se estiver complicado implementar, disponibilize a parte do seu banco para que possamos fazer o código funcionar como você quer.
    avatar
    OLDRIVG
    Avançado
    Avançado

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 284
    Registrado : 20/07/2010

    Re: [Resolvido]Código para validação entre dois campos de data.(Ajuda)

    Mensagem  OLDRIVG em 15/10/2018, 17:43

    Ok. Funcionou.

    Me desculpe se a minha resposta lhe pareceu eu estar com falta de paciência. Mas não foi o que pretendia lhe passar. Paciência e tempo são condições que não me faltam. Tenho em excesso.

    A minha resposta se deveu a sua, na qual entendi que o campo ficaria NULO ou que poderia ali ser digitado qualquer data.

    Mas funcionou. Apenas o código que você sugeriu colocar no evento "Antes de Atualizar" não funcionou neste evento. Coloquei no evento "Ao Sair". Aí funcionou redondinho.

    Lhe agradeço pela prestimosa ajuda. Certamente precisarei de mais ajuda até o término do projeto, portanto, espero poder contra com a sua valiosa prestabilidade.

    Vou dar o Tópico como resolvido.

    Obrigado

      Data/hora atual: 17/1/2019, 23:59