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


3 participantes

    Atrasar "Delay" execução de código em 2 Segundos

    lgdelai
    lgdelai
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 146
    Registrado : 31/03/2012

    Atrasar "Delay" execução de código em 2 Segundos Empty Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  lgdelai 11/12/2013, 20:30

    Olá.

    Como vão todos?

    Vejam bem, tenho um formulário que deve executar uma ação, porém preciso de um
    Atraso, Delay, pois ele está sendo executado muito rápido e não espera os dados
    da função serem atualizados.

    Tenho um campo [SomaVP] que fica no rodapé do sub-fomulário e soma todos os pagamentos,
    ele possui o seguinte código ''=Soma([Valor_pago])"

    Após ele somar eu desejo que este valor seja copiado para o formulário-Pai.

    Porém no meu código o Refresh e a copia estão sendo executados simultaneamente,
    logo não está dando tempo para o campo SomaVP atualizar.

    Vejam o codigo:
    ======================================================
    Private Sub Valor_pago_Exit(Cancel As Integer)
    Me.Refresh
    Me.Parent.CONTRATOS![Total_Pago] = [SomaVP]
    End Sub
    ======================================================

    Eu preciso que a parte: "Me.Parent.CONTRATOS![Total_Pago] = [SomaVP]"
    Atrase um pouco para dar tempo do Refresh ser executado por completo
    e assim o campo [SomaVP] estar atualizado.  

    Creio que uns 2 a 3 segundos de atraso sejam suficientes.

    Talvez se o sistema desse uma travadinha de 2 seg antes de executar o
    código  "Me.Parent.CONTRATOS![Total_Pago] = [SomaVP]" de certo.


    Alguém pode me ajudar?
    Avelino Sampaio
    Avelino Sampaio
    Developer
    Developer


    Respeito às regras : Respeito às Regras 100%

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

    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  Avelino Sampaio 12/12/2013, 06:56

    Olá!

    Sim, tem como atrasar com a API Sleep() porem acho que vc pode alterar o projeto conforme este meu exemplo:

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

    Neste meu exemplo o valor da soma não é salvo no campo do formulário principal, apenas exibe o valor.

    Se houver a necessidade de copiar, use o RECALC no lugar do REFRESH

    Aguardamos


    .................................................................................
    Vídeos, livros, kit MontaRibbons e acesso vitalício ao site UsandoAcces  
    Clique AQUI e analise o custo beneficio do material oferecido.
    lgdelai
    lgdelai
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 146
    Registrado : 31/03/2012

    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  lgdelai 12/12/2013, 14:40

    Olá.

    Só quero usar o delay mesmo.

    Mas nao entendi como, pode me explicar sobre o API Sleep?
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11026
    Registrado : 04/11/2009

    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  JPaulo 12/12/2013, 14:45

    http://maximoaccess.forumeiros.com/t995-provocar-pausa-numa-instrucao



    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new 102 Códigos VBA Gratuitos...
    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new Instruções SQL como utilizar...
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11026
    Registrado : 04/11/2009

    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  JPaulo 12/12/2013, 14:48

    Ou ainda;

    Public Function TimeDelay(TSegundos As Integer, ByVal TEventos As Boolean)
    'By JPaulo ® Maximo Access
       Dim IniciaContagem As Date
     
       If TSegundos < 1 Then  ' Tempo em segundos
           Exit Function
       End If
       IniciaContagem = Now 'inicia contagem de espera através da hora do sistema.
       Do Until DateDiff("s", IniciaContagem, Now) > TSegundos
           If TEventos Then
               DoEvents
           End If
       Loop
    End Function


    Para utilizar;

    TimeDelay 2, True ' tempo de pausa
    Anexos
    Atrasar "Delay" execução de código em 2 Segundos AttachmentTimeDelay.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (24 Kb) Baixado 139 vez(es)


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new 102 Códigos VBA Gratuitos...
    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new Instruções SQL como utilizar...
    lgdelai
    lgdelai
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 146
    Registrado : 31/03/2012

    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  lgdelai 12/12/2013, 16:11

    Paulo

    usei o código que me passou mas não deu certo.

    veja o print.

    O seu exemplo em anexo não é exatamente o que eu preciso.

    Eu quero que, quando o formulário for aberto ele de um Refresh.

    e depois de alguns segundos AUTOMATICAMENT ele faça o segundo procedimento.

    sem precisar apertar botões.
    Anexos
    Atrasar "Delay" execução de código em 2 Segundos AttachmentErro codigo.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (25 Kb) Baixado 10 vez(es)
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11026
    Registrado : 04/11/2009

    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  JPaulo 12/12/2013, 17:12

    Você está a colocar a função dentro do Current do form, logicamente que vai dar asneira.



    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new 102 Códigos VBA Gratuitos...
    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new Instruções SQL como utilizar...
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11026
    Registrado : 04/11/2009

    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  JPaulo 12/12/2013, 17:18

    Tem de colocar a função no VBA do formulario, mas fora de qualquer instrução ou evento.

    No evento VBA ao carregar do seu form;

    Private Sub Form_Load()
    Me.Recalc
    TimeDelay 2, True
    If Me.Valor_pago.Value <> Null Then
    Me.Parent.CONTRATOS![Total_pago] = Me.Soma_VP.Value
    End If
    End Sub



    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new 102 Códigos VBA Gratuitos...
    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new Instruções SQL como utilizar...
    lgdelai
    lgdelai
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 146
    Registrado : 31/03/2012

    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  lgdelai 12/12/2013, 18:43

    Olá.

    Consegui fazer o código funcionar desta forma sem precisar do Delai.

    -------------------------------------------------------------
    Private Sub Form_Current()
    Me.Refresh
    If IsNull(Me.SomaVP.Value) = False Then
    Me.Parent.CONTRATOS![Total_Pago] = Me.SomaVP.Value
    ElseIf IsNull(Me.SomaVP.Value) = True Then
    Me.Parent.CONTRATOS![Total_Pago] = Null
    End If
    End Sub
    -------------------------------------------------------------

    Porém este método retornou outro problema.

    Normalmente quando clicamos na seta para criar um novo Contrato no
    Formulário-Pai. ele aparece sem contabilizar seu numero de ID.

    Mas usando o código acima, o Campo [Total_Pago] do Formulário.pai
    recebe um valor Null, e mesmo assim o Formulário-Pai recebe um numero
    78, 79, 80... ao invéz de ###

    Como resolver isto?

    Qual valor usar no lugar de Null para que isto nao ocorra?

    Existe outro como por exemplo: Empt, Vazio, Clear ????


    lgdelai
    lgdelai
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 146
    Registrado : 31/03/2012

    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  lgdelai 12/12/2013, 19:18

    Olá.

    Consegui resolver o problema do preenchimento do Null desta forma.

    Tenho um campo no formulário chamado "Ativo" que tem o valor padrão "0".

    Então antes de seguir para o código, é verificado se o contrato está ativo, ou seja
    se "Ativo = 0" Se for, eu mandei dar só um Refresh pois não altera nada (TERIA OUTRA OPÇÃO?)

    Mas se estiver ativo "Ativo = 1" ele segure compiando os dados.

    Vejam como ficou o código.

    ===============================================
    Private Sub Form_Current()
    Me.Refresh
    If Me.Parent.CONTRATOS![Ativo] = 0 Then
    Me.Refresh
    Else
    If IsNull(Me.SomaVP.Value) = False Then
    Me.Parent.CONTRATOS![Total_Pago] = Me.SomaVP.Value
    ElseIf IsNull(Me.SomaVP.Value) = True Then
    Me.Parent.CONTRATOS![Total_Pago] = Null
    End If
    End If
    End Sub
    ===============================================

    Este código é para preencher o campo [Total_Pago] assim que
    que o formulário é aberto.

    Porém também preciso que este campo seja preenchido assim que eu
    adiciono ou excluo um pagamento.

    e é ai que estou tendo o outro problema com o Delay, pois, as vezes
    quando eu pressiono o botão muito rapido, não da tempo de o
    campo soma "SomaVP" ser atualizado.

    este é o motivo de eu precisar do Atraso.

    Eu Adicionei o Recalc, no lugar do Refresh e funcionou, porém o cursor
    volta sempre para o início dos registros.

    Existe uma forma de cancelar isto?
    JPaulo
    JPaulo
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 11026
    Registrado : 04/11/2009

    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  JPaulo 13/12/2013, 09:22

    Ola;

    O Recalc não faz com que o registro volte ao primeiro, o Requery é que faz isso.

    Se pretender, anexe aqui parte do seu banco para o ajudarmos em concreto.


    .................................................................................
    Contribua com o maximoaccess nos links abaixo, ajude a melhorar este que é o seu site na NET.

    Pay-Pal R$ Aqui
    Pay-Pal € Aqui

    Ou ainda: Aqui (Novo)

    Sucesso e Bons Estudos
    Success and Good Studies

    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new Utilize o Sistema de Busca do Fórum...
    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new 102 Códigos VBA Gratuitos...
    Atrasar "Delay" execução de código em 2 Segundos Folder_announce_new Instruções SQL como utilizar...

    Conteúdo patrocinado


    Atrasar "Delay" execução de código em 2 Segundos Empty Re: Atrasar "Delay" execução de código em 2 Segundos

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 23/11/2024, 07:10