HELP URGENTE TO PERDIDO

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

HELP URGENTE TO PERDIDO

Mensagem por managercorp »

TENHO UM ARQ. COM 15201254 REGISTROS E PRECISO
IMPRIMIR OS DADOS DE UM DETERMINADO PERIODO
EX: CLIENTES QUE ESTAVAM NA ESCOLA EM 01/05/2004
SO QUE EU NAO TENHO ESTA DATA NO ARQUIVO
O QUE EU TENHO E UM PERIODO
EX: DATA CHEGADA = 01/04/2004
DATA SAIDA = 01/06/2004
ENTAO ESTE PASSOU PELO PERIODO SOLICITADO E SERA
IMPRESSO.
A DUVIDA E O SEGUINTE, COMO NAO TENHO UMA DATA GRAVADA E SIM UM PERIODO QUE SERA VALIDO DENTRO DA DATA SOLICITADA, COMO FACO PARA USAR UM SEEK OU DBSEEK PARA UM DETERMINADO PERIODO.
NO MOMENTO EU FACO UM LOP DA 1.DATA EX: 01/04/2004
ADICIOANDO +1 ATE A ULTIMA DATA EX: 01/06/2004
E VEJO SE A DATA SOLICITADA PASSA POR ESTE DIA
FUNCIONA, SO QUE O PROBLEMA E QUE FICA MUITO LENTO
POIS SE EU PECO UM RELATORIO DAS PESSOAS QUE PASSARAM PELA EMPRESA EM UM PERIODO DE 2 MESES A ROTINA VAI FAZER UM LOP DE 60 VEZES PARA CADA REGISTRO.

*** EXISTE ALGUM SEEK POR PERIODO OU ALGUM INDICE ? *****
HELP, HELP, HELP...

ALEXANDRE
alexandre@managercorp.com.br
solucoeshotel@bol.com.br
solucoeshotel@hotmail.com (MSN)
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Experimente:

Código: Selecionar todos

set SOFTSEEK ON
sele SEU_ARQ
seek DT_CHEGADA=mDATA
if .not. EOF() .and. DT_SAIDA <= mDATA
   (registro válido ... )
else
   (registro inexistente ou inválido)
endif
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

duvida continua PLEASSSEEE

Mensagem por managercorp »

********** A SOLUCAO APRESENTADA ***********
set SOFTSEEK ON
sele SEU_ARQ
seek DT_CHEGADA=mDATA
if .not. EOF() .and. DT_SAIDA <= mDATA
(registro válido ... )
else
(registro inexistente ou inválido)
endif
**********************************************
COMO FALEI ANTES ASSIM NAO FUNCIONA POIS A DATA DE
CHEGADA DT_CHEGADA NAO EXISTE:
EXEMPLO:
INFORME O PERIODO DESEJADO: 01/05/2004 A 15/05/2004
SO QUE O CLIENTE CHEGOU DIA 20/04/2004 E SAIU DIA 12/05/2004
VEJA QUE A DATA DE CHEGADA E DIFERENTE DA INFORMADA E QUE A DATA DE SAIDA TAMBEM E DIFERENTE DA INFORMADA
SO QUE ELE ESTAVA NA EMPRESA NESTE PERIODO
OU SEJA ELE NEM CHEGOU DIA 01 NEM SAIU DIA 15
MAS MESMO ASSIM E PARA APARECER NO RELATORIO POIS
O MESMO ESTAVA NA EMPRESA NO MEIO DO PERIODO
ISTO NUM ARQ COM 15424552 REGISTROS , COMO FACO PARA PESQUISAR TODOS QUE PASSARAM PELO PERIODO SOLICITADO, ATENCAO NAO E QUEM CHEGOU DIA TAL OU SAIU DIA TAL E SIM QUEM ESTAVA NO DIA TAL DO PERIOSO SOLICITADO
ISTO TUDO DENTRO DE UM DO WHILE.
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Veja bem... o meu intúito é de te ajudar... certo ??

Pelo que pude perceber nessa sua segunda colocação, vc precisa testar se o período solicitado está compreendido no período gravado no arquivo logo, o comando SEEK não atenderá sua necessidade. O que poderá fazer é usar um filtro do tipo SET FILTER ou outro mais rápido onde você possa selecionar "todos"os registros que atendam sua necessidade.

Exemplo:

Código: Selecionar todos

use SEU_ARQ
set filter to DT_CHEGADA <= PER_INICIO .and. DT_SAIDA >= PER_FIM
go top
if eof()
   (não há registros para o período solicitado)
else
   (somente os registros que atendem seu filtro serão impressos)
endif
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

VALEU AUGUSTO, MAS E INOPERANTE

Mensagem por managercorp »

VALEU AUGUSTO, MAS E INOPERANTE
UM SET FILTER NA QTD DE REGISTRO QUE TENHO
FICA ABSURDAMENTE LENTO..
VALEU A ATENCAO
E SE TIVER MAIS ALGUMA SUGESTAO AGRADECO MUITO
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Mensagem por Augusto »

Prq vc não cria um DBF temporário com estrutura identica ao arquivo principal?? É mais rápido do que qqr SET FILTER... Tipo...

Código: Selecionar todos

sele 1
use SEU_TMP
zap
sele 2
use SEU_ARQ

do while .not. eof()
   if DT_CHEGADA <= PER_INICIO .and. DT_SAIDA >= PER_FIM
      sele 1
      append blank
      replace REG with SEU_ARQ->REG
      sele 2
   endif
   skip
enddo

sele 1
(imprime relatório)
Editado pela última vez por Augusto em 13 Jan 2005 11:12, em um total de 1 vez.
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Mensagem por Toledo »

Alexandre,

Como você só tem a data de chegada e a data de saída no DBF, fica impossível utilizar o SEEK, mas o que você poderia fazer era verificar se a data de chegada ou a data de saída esta dentro do período que você deseja imprimir.

Por exemplo:
Legenda:
DC_ = Data de Chegada
DS_ = Data de Saída

PI_ = Período Inicial
PF_ = Período Final

Código: Selecionar todos

SELECT 1
USE SEU_DBF
GO TOP
DO WHILE !EOF()
 IF (DC_ >= PI_ .AND. DC_ <= PF_) .OR.;
    (DS_ >= PI_ .AND. DS_ <= PF_)
    @ PROW(), PCOL() SAY "Este reg está dentro do Período"
 ENDIF
 SKIP
ENDDO
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
managercorp
Usuário Nível 3
Usuário Nível 3
Mensagens: 138
Registrado em: 16 Nov 2004 11:03
Localização: recife
Contato:

E TOLEDO ?

Mensagem por managercorp »

ACHO QUE VOCE NAO ACOMPANHOU O INICIO DO ASSUNTO
O MEU PROBLEMA NAO E FILTRAR, ISTO NAO TEM MISTERIO
O PROBLEMA E A VELOCIDADE DESTE FILTRO................
....................
Alexandre Pessoa
alexandre@managercorp.com.br
81-96152319
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Re: E TOLEDO ?

Mensagem por Augusto »

managercorp escreveu:ACHO QUE VOCE NAO ACOMPANHOU O INICIO DO ASSUNTO
O MEU PROBLEMA NAO E FILTRAR, ISTO NAO TEM MISTERIO
O PROBLEMA E A VELOCIDADE DESTE FILTRO................
....................
Bem meu nobre... Não que eu queira falar pelos demais companheiros... Mas acho que nem eu nem nenhum deles, vamos poder te dar qqr outra solução uma vez que as que foram apresentadas, "normalmente" são as utilizadas para um problema como o seu, entretanto, se me permite uma crítica e com todo respeito, o maior erro não está na suposta "limitação" ou "deficiência" do Clipper para questões como a sua mais sim, no erro conceitual na criação da estrutura desse DBF, isso porque a quantidade de registros não interfere de forma "imperativa" na velocidade da pesquisa se vc optar pela criação de um DBF temporário para tal, sem contar que em casos como esse até a velocidade do processador e o tamanho de memória da máquina em uso, são fatores relevantes para uma resposta mais rápida na utilização de qualquer das soluções dadas.
Volto a afirmar que a 2a. alternativa apresentada por mim é a mais "perto" da solução do seu problema, exceto se algum outro colega mais experiente que o Toledo tenha algo a dizer.
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
Tim9
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 14 Ago 2003 15:18
Localização: Ribeirão Preto
Contato:

Mensagem por Tim9 »

Oi Alexandre!

Fique esperto! pois na solução apresentada pelo Toledo não tem filtro, apesar que nesta solução vai ler todos os registros.

Vc tem índice desse arquivo com a chave da data de chegada?
Se tiver creio que vc pode usar o que já foi recomendado pelos colegas com o SET SOFTSEEK ON dentro da solução do Toledo. Pense!
Até Breve!
Luz e Paz!
Tim9
------------------------------------------
olynthes@gmail.com
** Somos livres para escolher, mas prisioneiros das conseqüências **
------------------------------------------
Uso Clipper 5.2e, Blinker 7.0, Prwin 1.0 BFNTX migrando p/ xHarbour e Hwgui Dbfcdx
Responder