HELP URGENTE TO PERDIDO
Moderador: Moderadores
-
managercorp
- Usuário Nível 3

- Mensagens: 138
- Registrado em: 16 Nov 2004 11:03
- Localização: recife
- Contato:
HELP URGENTE TO PERDIDO
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)
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)
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
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
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

- Mensagens: 138
- Registrado em: 16 Nov 2004 11:03
- Localização: recife
- Contato:
duvida continua PLEASSSEEE
********** 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.
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.
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
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:
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
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

- Mensagens: 138
- Registrado em: 16 Nov 2004 11:03
- Localização: recife
- Contato:
VALEU AUGUSTO, MAS E INOPERANTE
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
UM SET FILTER NA QTD DE REGISTRO QUE TENHO
FICA ABSURDAMENTE LENTO..
VALEU A ATENCAO
E SE TIVER MAIS ALGUMA SUGESTAO AGRADECO MUITO
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
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
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
- Toledo
- Administrador

- Mensagens: 3133
- Registrado em: 22 Jul 2003 18:39
- Localização: Araçatuba - SP
- Contato:
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
Abraços,
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
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
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

- Mensagens: 138
- Registrado em: 16 Nov 2004 11:03
- Localização: recife
- Contato:
E TOLEDO ?
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................
....................
O MEU PROBLEMA NAO E FILTRAR, ISTO NAO TEM MISTERIO
O PROBLEMA E A VELOCIDADE DESTE FILTRO................
....................
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Re: E TOLEDO ?
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.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................
....................
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
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
- Tim9
- Usuário Nível 3

- Mensagens: 154
- Registrado em: 14 Ago 2003 15:18
- Localização: Ribeirão Preto
- Contato:
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!
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
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