Clipper On Line • Ver Tópico - Melhor do que o Set Filter...

Melhor do que o Set Filter...

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

Melhor do que o Set Filter...

Mensagempor WCARDOSO » 13 Set 2017 17:11

Boa tarde, gostaria de uma ajuda em relação de pesquisa, busca, como o arquivo é grande, sei que o Set Filter é lento, gostaria de saber qual o mais rápido em relação a isso.
[]´s
Wagner
Avatar de usuário

WCARDOSO
Usuário Nível 2

Usuário Nível 2
 
Mensagens: 57
Data de registro: 08 Jul 2004 10:49
Curtiu: 0 vez
Mens.Curtidas: 0 vez

Melhor do que o Set Filter...

Mensagempor filizola » 13 Set 2017 19:53

index on NOME to ind1 WHILE NOME="JOAO" FOR SEXO="M"
index on NOME to ind2 FOR SEXO="F"
"Um passo a frente, e já não estará mais no mesmo lugar..."
Avatar de usuário

filizola
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 412
Data de registro: 19 Ago 2003 20:10
Cidade/Estado: Belo Horizonte/MG
Curtiu: 5 vezes
Mens.Curtidas: 6 vezes

Melhor do que o Set Filter...

Mensagempor acelconsultoria » 14 Set 2017 09:37

Indexar o banco de dados já acrescentando uma condição para usar como pesquisa é a melhor forma de "turbinar" as pesquisas.

Além dos exemplos do Filizola, você poderá optar por usar o OrdScope() ou SET SCOPE TO, caso esteja utilizando o Clipper 5.3. Ou ainda, uma combinação de escopo com filtragem.

Vamos supor que eu queira emitir um extrato de um produto do estoque, pra saber quais foram as entradas e saídas durante um período. Vou utilizar o SET SCOPE para delimitar o período a ser pesquisado, e depois o SET FILTER para filtrar apenas o produto desejado.

Campos do MOVIMENTO.DBF:
Data => data da venda ou da compra
CodPro => codigo do produto
Produto => descrição do produto
Quant => quantidade movimentada
Tipo => "E" para entrada ou "S" para saída
SaldoEst => saldo do estoque

FUNCTION EXTRATO()
   LOCAL Ini_Data, Fim_Data, nCodigo
   Ini_Data := CTOD("  /  /  ")
   Fim_Data := CTOD("  /  /  ")
   nCodigo := 0
   @ 10, 05 SAY "Data Inicial .....:" GET Ini_Data
   @ 11, 05 SAY "Data Final ......:" GET Fim_Data
   @ 12, 05 SAY "Código Produto :" GET nCodigo
   READ

   USE MOVIMENTO
   INDEX ON DATA TO IDXDATA
   SET INDEX TO IDXDATA  // indexado por ordem de data

   SET SCOPE TO Ini_Data, Fim_Data // o escopo delimita a data inicial e a data final desejada
   SET FILTER TO CodPro = nCodigo // filtragem para o produto desejado
   DBGOTOP()

   DO WHILE !LASTKEY() = 27
      DBEDIT()
   ENDDO

   SET FILTER TO // limpa a filtragem
   SET SCOPE TO   // limpa o escopo

   DBCLOSEALL()

RETURN .T.
   

Adm. Maickon Sato
Consultoria e Projetos
-------------------------------------------------------
Avatar de usuário

acelconsultoria
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 231
Data de registro: 10 Jan 2006 16:05
Cidade/Estado: Itápolis-SP
Curtiu: 6 vezes
Mens.Curtidas: 6 vezes

Melhor do que o Set Filter...

Mensagempor dbdc5554 » 19 Set 2017 20:50

HUm...

se JA esta criando indices melhor colocar um clausula FOR

Paiva
dbdc5554
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 149
Data de registro: 03 Dez 2012 07:49
Cidade/Estado: uberlandia-MG
Curtiu: 0 vez
Mens.Curtidas: 1 vez




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Google [Bot] 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