Clipper On Line • Ver Tópico - busca no clipper / harbour por mes e ano

busca no clipper / harbour por mes e ano

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

busca no clipper / harbour por mes e ano

Mensagempor tchadrack » 25 Dez 2020 17:44

Desculpem a pergunta básica mas estou acostumado a usar SQL e estou precisando fazer a seguinte busca cujo exemplo em SQL seria:

select * from Tabela where year(data) = 2020 and month(data) = 12


usando a RDD padrão do clipper / harbour, (dbf), qual a maneira correta e mais eficiente de conseguir isso? Existe alguma forma ou sou obrigado
a percorrer a tabela testando cada registro?

Grato,
tchadrack
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 27
Data de registro: 15 Mar 2016 15:42
Cidade/Estado: São Paulo
Curtiu: 1 vez
Mens.Curtidas: 2 vezes

busca no clipper / harbour por mes e ano

Mensagempor alxsts » 25 Dez 2020 18:25

Olá!
tchadrack escreveu:Existe alguma forma ou sou obrigado
a percorrer a tabela testando cada registro?

Depende...
Se a tua tabela não tem índice pelo campo "data", será necessário percorrer a tabela toda.

Usando o RDD padrão xBase (DBFNTX)
INDEX ON DtoS (data) TO idxData 


Uma vez criado o índice, é só usar:
USE tabela SHARED NEW INDEX idxData
DbSeek ( "202012", .T. ) // Soft seek
DO WHILE .NOT. Eof() .AND. Left (DtoS(data), 6) == "202012"
   // comandos...
   tabela->( DbSkip () )
ENDDO

tabela->(DbCloseArea ())

RETURN
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

busca no clipper / harbour por mes e ano

Mensagempor JoséQuintas » 25 Dez 2020 22:05

No uso, talvez mais fácil assim, também após existir o índice por Dtos( Data ):

SET SCOPE TO "202012"
GOTO TOP
DO WHILE ! Eof()
   SKIP
ENDDO


De certa forma, é parecido com SQL, mas não tem nada automático, e é acessando diretamente a base, selecionando índice, etc.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18008
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

busca no clipper / harbour por mes e ano

Mensagempor alxsts » 25 Dez 2020 22:42

Olá!

Minha resposta se condicionou ao RDD citado pelo OP.

Se alterar o RDD para DBFCDX ganha-se recursos mais poderosos como definição de scope top, scope bottom, uso das funções OrdScope () e OrdWildSeek ()...
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2943
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

busca no clipper / harbour por mes e ano

Mensagempor LDOSISTEMAS » 15 Jan 2021 09:09

Bom dia,
Observando o exemplo dele acho que poderia usar
 set filter to Year(data)=2020 and month(data)=12 

Observando o titulo do post ai eu acho que poderia usar a sugestão dos colegas
LAURO DE OLIVEIRA
Analista/Diretor
(37) 3381 32 11
www.ldosistemas.com.br
Imagem
LDOSISTEMAS
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 45
Data de registro: 01 Set 2014 17:04
Cidade/Estado: CLAUDIO/MG
Curtiu: 1 vez
Mens.Curtidas: 2 vezes

busca no clipper / harbour por mes e ano

Mensagempor vailton » 27 Jan 2021 08:20

Se o RDD em uso for realmente o NTX o uso do SET FILTER penaliza o desempenho e neste caso o uso de um SEEK com laço DO WHILE como citado pelo alxsts pode trazer mais rapidez na operação.
Avatar de usuário

vailton
Colaborador

Colaborador
 
Mensagens: 378
Data de registro: 17 Nov 2005 18:08
Cidade/Estado: Brasil
Curtiu: 2 vezes
Mens.Curtidas: 11 vezes




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro