Melhor do que o Set Filter...

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
WCARDOSO
Usuário Nível 2
Usuário Nível 2
Mensagens: 59
Registrado em: 08 Jul 2004 10:49

Melhor do que o Set Filter...

Mensagem por WCARDOSO »

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 do usuário
filizola
Usuário Nível 3
Usuário Nível 3
Mensagens: 421
Registrado em: 19 Ago 2003 20:10
Localização: Belo Horizonte/MG

Melhor do que o Set Filter...

Mensagem por filizola »

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 do usuário
acelconsultoria
Usuário Nível 3
Usuário Nível 3
Mensagens: 231
Registrado em: 10 Jan 2006 17:05
Localização: Itápolis-SP

Melhor do que o Set Filter...

Mensagem por acelconsultoria »

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

Código: Selecionar todos

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
-------------------------------------------------------
dbdc5554
Usuário Nível 3
Usuário Nível 3
Mensagens: 149
Registrado em: 03 Dez 2012 08:49
Localização: uberlandia-MG

Melhor do que o Set Filter...

Mensagem por dbdc5554 »

HUm...

se JA esta criando indices melhor colocar um clausula FOR

Paiva
Responder