Executar consulta apenas na primeira vez de abertura do BD
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
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 |