Página 1 de 1
Filtro
Enviado: 20 Jan 2010 15:19
por oliveira
Boa tarde Amigos(as)
Estou com problemas na rotina com set filter
Clipper5.2e
Indices NTX (competicao, rodada, data)
Pra vcs entenderem
Usuario preenche um dos 3 campos e a rotina faz o filtro
campos na base de dados
Competicao C 3
Rodada C 2
Data D
variveis
Var_competicao
Var_rodada
Var_data
vejam como esta o filtro na rotina
Código: Selecionar todos
IF (EMPTY(Var_competicao))
condicao1:='competicao <> SPACE(3)'
ELSE
condicao1:= 'competicao = Var_competicao'
ENDIF
*
IF (EMPTY(Var_rodada))
condicao2:='rodada <> SPACE(2)'
ELSE
condicao2:= 'rodada = Var_rodada'
ENDIF
*
IF (EMPTY(Var_data))
condicao3:= 'data <> CTOD(" / / ")'
ELSE
condicao3:= 'data = Var_data'
ENDIF
*
SET FILTER TO &condicao1 .AND. &condicao2 .AND. &condicao3
*
Podem ve ajudar
Fico no aguardo
Clodoaldo
Re: Filtro
Enviado: 20 Jan 2010 16:36
por gvc
Vc esta colocando que se a não entrar com a informação da rodada, só aparecerão os registro que tiverem rodada registrada.
O mesmo para competição.
Tb tem que ou ele apresenta os lançamentos na data solicitada ou os registro que tem data registrada.
É isso?
Vc esta usando isso para um relatório?
Re: Filtro
Enviado: 21 Jan 2010 17:19
por oliveira
Boa Tarde
preciso fazer este filtro pq carrego todos os registros numa tabela
e se o usuario kerer ele podera fazer um filtro
entenderam?
Re: Filtro
Enviado: 21 Jan 2010 18:47
por gvc
Pelo que vc postou inicialmente o usuário preenche um dos campos.
Vc pode usar o dbsetfilter tb.
Código: Selecionar todos
// The example demonstrates the effect of a filter condition
PROCEDURE Main
USE Customer
INDEX ON Upper(LastName) TO Cust01
GO TOP
? Recno(), Lastname // result: 28 Abbey
DbSetFilter( {|| Upper(LastName) > "L" }, 'Upper(LastName) > "L"' )
GO TOP
? Recno(), Lastname // result: 182 MacDonald
? DbFilter() // result: Upper(LastName) > "L"
CLOSE Customer
RETURN
Re: Filtro
Enviado: 25 Jan 2010 11:11
por acelconsultoria
Oliveira...
Eu utilizo em um dos relatórios do meu sistema, uma rotina de filtro semelhante a que vc necessita. Eu peguei seu código e fiz uma pequena alteração.
Código: Selecionar todos
filtro := space(100)
IF !(EMPTY(Var_competicao))
condicao1:= 'competicao = Var_competicao'
ENDIF
*
IF !(EMPTY(Var_rodada))
condicao2:= '.AND. rodada = Var_rodada'
ENDIF
*
IF !(EMPTY(Var_data))
condicao3:= '.AND. data = Var_data'
ENDIF
filtro := condicao1 + condicao2 + condicao3
*
SET FILTER TO &filtro
*
Re: Filtro
Enviado: 25 Jan 2010 14:29
por gvc
Bom, só para elencar uma solução:
Se vc usar Clipper 5.3x ou xHarbour dá para usar o SET SCOPE para gerar o filtro, mas teria que usar a chave de indexação.
Com o CDX tb desse 2 acima, dá para gerar indices temporários com filtro. Daí o tempo é da montagem do indice, depois é um "tapa" para trabalhar.
Criar arquivo temporário não ajuda vc pelo que entendi, pois uma mudança no dbf original não vai aparecer no dbf temporário.
Se o filtro é para relatório, eu faço a filtragem dos dados dentro do sistema e não por set filter.
Código: Selecionar todos
while !cadastro->eof()
if !empty(condic1) .and. cadastro->nome # condic1
cadastro->(dbskip())
loop
end
if !empty(condic2) .and. cadastro->cidade # condic1
cadastro->(dbskip())
loop
end
...
cadastro->(dbskip())
end