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