Página 1 de 1

Ajuda com Datas Urgente!

Enviado: 13 Jul 2005 15:27
por vaninho
Amigos eu preciso limpar um banco de dados atraves de uma rotina,devido ao bco de dados estar muito grande,com dados desnecessarios.
eu gostaria limpar deixando somente os dados dos ultimos 6 meses.

eu pensei assim,

uma variavel ?

comparar esta variavel com a data do banco de dados de pedido por exemplo campo (dataped) type date.

se a data de pedidos que for encontrando for anterior ao periodo de 6 meses deletar.
neste caso eu tenho que trabalhar com mes e ano

tipo:
goto top
dentro do laço do while
if eof()
limpeza concluida
Close all
return
endif
return
if dataped=variavel
set filter to dataped=variavel
delete
skip
else
endif
loop
ENDDO

o que esta pegando é que eu não sei como criar esta variavel( o Valor a ser comparado) para deixar os registros correspondendo ao 6 meses para fazer a busca nas datas do banco de dados.

Alguém por Favor poderia me dar uma força de como fazer esta rotina,se for possivel usar o meu exemplo acima acrescentando ou tirando o que for nescessario para funcionar como eu expliquei.
desde já agradeço a todos pela ajuda.

obs: eu citei uma variavel dentro desta rotina,porque eu gostaria que esta limpeza fosse automatica,sem precisar o usuario digitar nada,somente ativar a rotina para executar a limpeza quando nescessario.

Enviado: 13 Jul 2005 16:45
por Daniel
tente assim

Código: Selecionar todos

use banco
go top
while .t.
   if campo_data <= ctod('01/01/2005') 
        delete
   endif
   skip
   if eof()
      pack
      exit
    endif
end

Re: Ajuda com Datas Urgente!

Enviado: 27 Jul 2005 15:51
por JLF
vaninho escreveu:Amigos eu preciso limpar um banco de dados atraves de uma rotina,devido ao bco de dados estar muito grande,com dados desnecessarios.
eu gostaria limpar deixando somente os dados dos ultimos 6 meses.

eu pensei assim,

uma variavel ?

comparar esta variavel com a data do banco de dados de pedido por exemplo campo (dataped) type date.

se a data de pedidos que for encontrando for anterior ao periodo de 6 meses deletar.
neste caso eu tenho que trabalhar com mes e ano

tipo:
goto top
dentro do laço do while
if eof()
limpeza concluida
Close all
return
endif
return
if dataped=variavel
set filter to dataped=variavel
delete
skip
else
endif
loop
ENDDO

o que esta pegando é que eu não sei como criar esta variavel( o Valor a ser comparado) para deixar os registros correspondendo ao 6 meses para fazer a busca nas datas do banco de dados.

Alguém por Favor poderia me dar uma força de como fazer esta rotina,se for possivel usar o meu exemplo acima acrescentando ou tirando o que for nescessario para funcionar como eu expliquei.
desde já agradeço a todos pela ajuda.

obs: eu citei uma variavel dentro desta rotina,porque eu gostaria que esta limpeza fosse automatica,sem precisar o usuario digitar nada,somente ativar a rotina para executar a limpeza quando nescessario.
Amigo,

Estou tambem tentando fazer algo parecido, no meu caso quero pegar a data de hoje date() e adicionar ou voltar alguns dias para dar sequencia no programa.

Como vc, quero q seja automatica (interna) sem ação do usuário.

Agradeço a ajuda caso vc conseguiu resolver.

abraços

Enviado: 27 Jul 2005 19:50
por Poka
Olá a todos;

Referente a limpeza de registros de arquivos em um sistema, acredito que o + correto seria fazer uma rotina onde o usuario entraria com a data limite para exclusao de registros, por exemplo exluir registros até o dia 31/12/2004.

Mas não é somente ir testando e excluindo os registros. Na rotina de limpeza faça o tratatamento para cada arquivo, por exemplo no arquivo de contas a receber, teste a data de lancamento do registro e teste ainda se o documento ja foi totalmente baixado. Imagine que a data desse documento é de 30/11/2004 e os vencimentos para 30/12/2004 e 30/01/2005, nesse caso esse documento nao pode ser excluido, em contas pagar idem. No meu modo de ver essa é a maneira + correta e é como eu faço.


Um abraço


Poka

Enviado: 28 Jul 2005 07:39
por spereira

Código: Selecionar todos

set date british
set century on

mDATA_LIM = DATE()-182
mDELETOU = .f.

CLEAR
@10,10 SAY "Informe a data limite: " get mDATA_LIM picture "99/99/9999"
read

select banco new
while .not. eof()
   if campo_data <= mDATA_LIM
     delete 
     mDELETOU = .t.
   endif 
   skip 
end
if mDELETOU
  pack 
endif 
close all
return
Veja se assim fica melhor. Desta forma o usuário pode alterar a data limite se quizer. Se não houver exclusões durante o processo não haverá a necessidade de fazer o pack.
Atenção que eu não incluí arquivos de índices. Estes deverão ser incluídos na abertura da área.

Enviado: 28 Jul 2005 14:43
por momente
Ola Pessoal!

Olha concordo plenamente com todas as idéias, inclusive a que devemos deletar apenaz documentos contas a pagar e receber previamente quitados, mas a questão do comando PACK, gostaria de dar a idéia de usá-lo antes do comando de indexação do arquivo, fora da rotina, pois em rede, se for usado desta maneira vai dar bug.

Espero ter contribuido!

um abraço! -:]