Ajuda com Datas Urgente!

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

vaninho
Usuário Nível 1
Usuário Nível 1
Mensagens: 27
Registrado em: 17 Jul 2004 19:41

Ajuda com Datas Urgente!

Mensagem 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.
Avatar do usuário
Daniel
Usuário Nível 3
Usuário Nível 3
Mensagens: 373
Registrado em: 13 Ago 2003 22:42
Localização: Apucarana - PR

Mensagem 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
Daniel

Harbour + Minigui + dbfcdx
Marinas-Gui Pena que parou o suporte
Avatar do usuário
JLF
Usuário Nível 2
Usuário Nível 2
Mensagens: 78
Registrado em: 21 Jul 2005 12:52
Localização: Sao Paulo

Re: Ajuda com Datas Urgente!

Mensagem 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
JLF - relembrando bons tempos
Clipper 5.3 - Blinker 7
Avatar do usuário
Poka
Usuário Nível 4
Usuário Nível 4
Mensagens: 563
Registrado em: 25 Out 2004 21:26
Localização: Leme/SP

Mensagem 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
spereira
Usuário Nível 2
Usuário Nível 2
Mensagens: 85
Registrado em: 19 Jul 2004 11:42
Localização: Porto - Portugal

Mensagem 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.
Avatar do usuário
momente
Usuário Nível 3
Usuário Nível 3
Mensagens: 496
Registrado em: 03 Mar 2005 11:53
Localização: São Carlos-SP
Contato:

Mensagem 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! -:]
Rogerio L. Momenté
Nada é tão perfeito que não possamos melhorar.
Nunca se explique. Seus amigos não precisam e seus inimigos não vão acreditar.
www.looksystem.com.br
Responder