Ajuda na comparaçao de datas no registro windows

24/11/2005

0

Estou desenvolvendo uma aplicação pra ser executada de 30 em 30 dias.
Jah consegui fazer gravar a data atual no envento onshow do form como no codigo abaixo:


regbb:=tregistry.create;
try
regbb.rootkey:=HKEY_CURRENT_USER;
if not regbb.KeyExists(´Software\Microsoft\Config\Key\Windows\backup´) = true then
regbb.CreateKey(´Software\Microsoft\Config\Key\Windows\backup´);

data:= DateToStr(now);
regbb.OpenKey(´Software\Microsoft\Config\Key\Windows\backup´,true);
regbb.WriteTime(data,now);
finally
regbb.Free;

O problema eh usar a chave pra comparar com a data atual e se for igual ou maior que 30 dias, de 30 em 30 dias...

Obrigado..


O4pr3ndiz

O4pr3ndiz

Responder

Posts

25/11/2005

Marcio.theis

Leia a chave que vc tem no registro, compare e depois grava...


Responder

25/11/2005

Emerson Nascimento

para poder fazer esse controle seu programa precisa ficar rodando em background (ou você precisa agendar isso no windows ou em qualquer outra agenda que aceite o agendamento de execução de programas como se fosse um ´compromisso´).

deveria ser algo assim:
var
  regbb: tregistry;
  dataultimobackup: TDate;
begin
  regbb := tregistry.create;
  try
    regbb.rootkey:=HKEY_CURRENT_USER;
    regbb.OpenKey(´Software\Microsoft\Config\Key\Windows\backup´,true);

    try
      dataultimobackup := regbb.ReadDate(´data´);
    except
      dataultimobackup := sysutils.date - 30;
    end;

    if (trunc(sysutils.date - dataultimobackup) >= 30) and
       (application.MessageBox(´É necessário efetuar o backup. Deseja fazer isso agora?´,
                               ´Backup´,MB_TASKMODAL + MB_YESNO + MB_DEFBUTTON1) = mrYes) then
    begin
      {rotina de execução do backup}

      if BackupEfetuadoComSucesso then
        regbb.WriteDate(´data´,sysutils.date);
    end;
  finally
    regbb.Free;
  end;
end;


você poderia ainda colocar essa rotina num Timer, para ser executada de hora em hora assim, se o usuário não fizer o backup na abertura do programa, ele será avisado de hora em hora, até que aceite executar o backup.


Responder

26/11/2005

O4pr3ndiz

Agradeço a ajuda mas o codigo aparece o seguinte erro na execução e naum executa

1) erro na linha
dataultimoITA := regita.ReadDate(´data´);

na compilação exibe o erro ERegistryException ´Failed to get data for ´data´

e naum executa o projeto, mudei pra data := DateToStr(now);
e tb naum resolveu.


Eu li sobre o readdate e naum vi nehuma anormalidade de sintaxe, tanto que passo pelo ctrl+F9.

Se puder me ajudar..
Estou precisando disto com urgencia... obrigado


Responder

26/11/2005

Emerson Nascimento

isso deve trer acontecido porque o valor ´Data´ ainda não havia sido criado. essa informação só aparece para o Delphi e somente na primeira execução. para evitar a exibição de erros tratados, vá em Tools -> Debugger Options -> Language Exceptions e desmarque a caixa [i:013ec86ff8]Stop on Delphi Exceptions[/i:013ec86ff8]. Feito isso, o Delphi somente exibirá mensagens para os erros não tratados.


Responder

26/11/2005

O4pr3ndiz

.. e funcionou a primeira vez, mas as outras naum...


Mas valew a força..


Responder

01/12/2005

Emerson Nascimento

com assim ´funcionou a primeira vez, mas as outras naum´?


Responder

02/12/2005

O4pr3ndiz

Coloquei o codigo na integra no timer e funcionou uma vez...
altererei a data do sistema e tudo depois nda.. ele cria a pasta backup no registro vazia....


Eu ainda naum percebi o que aconteceu..


Responder

02/12/2005

Emerson Nascimento

olha, eu executei aqui e funcionou perfeitamente.

fiz assim:
coloquei um timer com intervalo de 30.000 (30 segundos)

data atual: 01/12/2005 (1o. de dezembro de 2005)
- rodei o programa;
- depois de 30 segundos o programa perguntou se eu queria efetuar o bkp. respondi que [b:703227ba0a]não[/b:703227ba0a];
- depois de mais 30 segundos perguntou de novo. respondi que [b:703227ba0a]não[/b:703227ba0a] novamente;
- mais 30 segundos e perguntou novamente. respondi que [b:703227ba0a]sim[/b:703227ba0a], queria efetuar o bkp;
- nos 30 segundos seguintes a [i:703227ba0a]pergunta não apareceu[/i:703227ba0a]. esperei mais uns 5 minutos e a [i:703227ba0a]pergunta não apareceu[/i:703227ba0a] mais.
- alterei a data para 31/12/2005 - 31 de dezembro de 2005 - portanto, TRINTA DIAS PRA FRENTE, e a pergunta começou a aparecer novamente.

ou seja, tudo funcionou como devido...


OBS.: o registro do windows só será alterado se você optar por efetuar o bkp e esse for efetuado com sucesso (conforme aquele código passado)

p.s.: eu só gostaria de acrescentar duas linha àquele código:

var 
  regbb: tregistry; 
  dataultimobackup: TDate; 
begin 
  TIMER1.ENABLED := FALSE; // nova linha

  regbb := tregistry.create;
  try 
    regbb.rootkey:=HKEY_CURRENT_USER; 
    regbb.OpenKey(´Software\Microsoft\Config\Key\Windows\backup´,true); 

    try 
      dataultimobackup := regbb.ReadDate(´data´); 
    except 
      dataultimobackup := sysutils.date - 30; 
    end; 

    if (trunc(sysutils.date - dataultimobackup) >= 30) and 
       (application.MessageBox(´É necessário efetuar o backup. Deseja fazer isso agora?´, 
                               ´Backup´,MB_TASKMODAL + MB_YESNO + MB_DEFBUTTON1) = mrYes) then 
    begin 
      {rotina de execução do backup} 

      if BackupEfetuadoComSucesso then 
        regbb.WriteDate(´data´,sysutils.date); 
    end; 
  finally 
    regbb.Free; 
  end; 

  TIMER1.ENABLED := TRUE; // nova linha
end;


assim o timer será executado e, se for o necessário, irá esperar a resposta do usuário para reiniciar a contagem do tempo.


Responder

02/12/2005

O4pr3ndiz

obrigado....


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar