... Assinatura do site por 1 ano + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$100,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Executar consulta apenas na primeira vez de abertura do BD

Usuário Baretta:

Prezado, boa noite.

Através da macro AutoExec, executo uma consulta que altera uma coluna inteira para a data atual.  Desse modo, comparo a data de recebimento de um processo com a data atual e determino se ele está no prazo, se está atrasado, etc...

Tudo funciona muito bem, porém toda vez que o Microsoft Access é aberto por um usuário, ele executa essa atualização de data.

Pergunta: - existe um modo desta consulta ser executada apenas a primeira vez que o banco é aberto no dia?

Suporte:

Baretta,

crie uma tabela tblDataExecução, nesses moldes:

Campo Código como numeração automática e chave primária
Campo Data como tipo data e formato data abreviada
Campo Executado do tipo Sim/Não e com valor padrão 0.

Exemplo:

Código Data Executado
1 26/07/2017 x

 

Em um módulo global, cole este código:

Public Function fncExecuta()

    Dim rs As DAO.Recordset 'declaro ao VBA uma variável
    'abro a tabela que contém o controle de execução
    Set rs = CurrentDb.OpenRecordset("tblDataExecução") 
    
    If rs.EOF Then 'se ao abrir a tabela e ela não ter registro algum, então
        rs.AddNew 'movo o ponteiro para a posição de novo registro
           rs.Fields("Data").Value = Date 'defino o campo data como a data atual
        rs.Update 'salvo o registro
    End If
    
    rs.MoveLast 'movo o ponteiro para o último registro
    'se a última data registrada na tabela for menor que a data de hoje, então
    If rs.Fields("Data").Value < Date Then 
        rs.AddNew 'movo o ponteiro para a posição de novo registro
            rs.Fields("Data").Value = Date 'defino o campo data como a data atual
        rs.Update 'salvo o registro
        rs.MoveLast 'e movo o ponteiro para o registro que acabei de criar
    End If
    
    'se a última data registrada na tabela for menor que a data de hoje e o 
    'campo executado estiver falso, então
    If rs.Fields("Data").Value = Date And rs.Fields("Executado").Value = False Then
        CurrentDb.Execute "MinhaConsulta" 'executo a minha consulta
        rs.Edit 'começo a editar o registro atual
            rs.Fields("Executado").Value = True 'defino o campo executado como verdadeiro
        rs.Update 'salvo a edição que fiz
        'dou um aviso que executei a consulta
        MsgBox "Executei a consulta MinhaConsulta. Agora só amanhã.",vbInformation,"Aviso" 
    End If
    
    rs.Close 'fecho a tabela
    Set rs = Nothing 'descarrego a memória

End Function

Na sua macro AutoExec escolha ExecutarCódigo e chame a função - cole isto -> fncExecuta()

Usuário Barreta:

Perfeito!

E muito obrigado por cada linha de comentário no código.


 

 


Não há comentário

Envie seu comentário: