Página 1 de 1

busca no clipper / harbour por mes e ano

Enviado: 25 Dez 2020 17:44
por tchadrack
Desculpem a pergunta básica mas estou acostumado a usar SQL e estou precisando fazer a seguinte busca cujo exemplo em SQL seria:

Código: Selecionar todos

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,

busca no clipper / harbour por mes e ano

Enviado: 25 Dez 2020 18:25
por alxsts
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)

Código: Selecionar todos

INDEX ON DtoS (data) TO idxData 
Uma vez criado o índice, é só usar:

Código: Selecionar todos

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

busca no clipper / harbour por mes e ano

Enviado: 25 Dez 2020 22:05
por JoséQuintas
No uso, talvez mais fácil assim, também após existir o índice por Dtos( Data ):

Código: Selecionar todos

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.

busca no clipper / harbour por mes e ano

Enviado: 25 Dez 2020 22:42
por alxsts
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 ()...

busca no clipper / harbour por mes e ano

Enviado: 15 Jan 2021 09:09
por LDOSISTEMAS
Bom dia,
Observando o exemplo dele acho que poderia usar

Código: Selecionar todos

 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

busca no clipper / harbour por mes e ano

Enviado: 27 Jan 2021 08:20
por vailton
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.