Página 1 de 1
Usar mais de um SET FILTER
Enviado: 03 Mai 2013 10:01
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
Usar mais de um SET FILTER
Enviado: 03 Mai 2013 13:02
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
Usar mais de um SET FILTER
Enviado: 03 Mai 2013 13:17
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 + "}" )
//------------------------------------------------------------------------------