Clipper On Line • Ver Tópico - busca no clipper / harbour por mes e ano
Mudar para estilo Clássico
Discussão sobre a linguagem CA-Clipper.
Postar uma resposta

busca no clipper / harbour por mes e ano

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:

Código:
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

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)
Código:
INDEX ON DtoS (data) TO idxData


Uma vez criado o índice, é só usar:
Código:
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

25 Dez 2020 22:05

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

Código:
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

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 ()...

busca no clipper / harbour por mes e ano

15 Jan 2021 09:09

Bom dia,
Observando o exemplo dele acho que poderia usar
Código:
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

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.
Postar uma resposta