Usar mais de um SET FILTER

Projeto MiniGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Vandi
Usuário Nível 2
Usuário Nível 2
Mensagens: 83
Registrado em: 16 Set 2011 23:26
Localização: Brasilia-DF

Usar mais de um SET FILTER

Mensagem por Vandi »

Bom dia a todos,

Gostaria de saber como fazer para usar dois comandos SET FILTER em um mesmo arquivo.
Por exemplo:

Código: Selecionar todos

        set filter to MVT->nCont == vContaInicial  
        set filter to DTOS(MVT->mData) >= dDatai .AND. DTOS(MVT->mData) <= dDataf
Me parece que o segundo SET FILTER cancela o primeiro.

Como faço para usar os dois filtros no arquivo?

Gilvandi
lugab
Colaborador
Colaborador
Mensagens: 843
Registrado em: 19 Mai 2009 15:58

Usar mais de um SET FILTER

Mensagem por lugab »

No seu exemplo, acredito que o segundo set filter anulará o primeiro.

Se as condições não forem conflitantes entre sí, vc pode usar todas num set filter único

Código: Selecionar todos

set filter to   MVT->nCont == vContaInicial  .and.  DTOS(MVT->mData) >= dDatai .AND. DTOS(MVT->mData) <= dDataf 

Agora, se as condições forem conflitantes entre sí, nem set filter, nem nada semelhante vai funcionar
lugab
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Usar mais de um SET FILTER

Mensagem por alxsts »

Olá!

Somente um filtro pode estar ativo em uma área de trabalho. No entanto, você pode usar operadores .AND. e .OR.:

Código: Selecionar todos

set filter to (MVT->nCont == vContaInicial .AND. (DTOS(MVT->mData) >= dDatai .AND. DTOS(MVT->mData) <= dDataf) )
É sabido que SET FILTER degrada a performance da aplicação. O SET FILTER com avaliação de code blocks fica mais rápido. Veja exemplo:

Código: Selecionar todos

PROCEDURE Main()

   LOCAL cExpr := MakeBlock("MVT->nCont == vContaInicial .AND. (DTOS(MVT->mData) >= dDatai .AND. DTOS(MVT->mData) <= dDataf) )"
   LOCAL bExpr

   DbSetFilter( Eval(bExpr), cExpr )

RETURN
//------------------------------------------------------------------------------
Function MakeBlock( cExpr )

  // Alexandre Santos - 04/06/2007 - 16:11
  // Retornar um code block a partir de uma string fornecida

  Return  &( "{ || " + cExpr + "}" )
//------------------------------------------------------------------------------
[]´s
Alexandre Santos (AlxSts)
Responder