Página 1 de 1

set filter em função de usuário

Enviado: 13 Fev 2014 16:32
por cjp
Colegas, estou tentando usar um set filter em uma função de usuário, deixando ao usuário a escolha do filtro e do campo a filtrar.

Tentei assim:

Código: Selecionar todos

@ maxrow(),0 clear to maxrow(),maxcol()

@ maxrow(),1 say "Procurar: "get exp 

@ maxrow(),20 say "No campo: "get cp

read

if lastkey()#27

   exp=alltrim(exp)

   @ maxrow(),0 clear to maxrow(),maxcol()

   @ maxrow(),1 prompt "Filtrar todas as correspondências"

   @ maxrow(),41 prompt "Selecionar a primeira correspondência"

   menu to opfs

   cls

   do case

        case opfs=1

                set filter to exp(field(cp))

        case opfs=2

                go top

                locate for exp$(field(cp))

   endcase

endif


Não está funcionando, não localiza nem filtra as expressões que realmente constam na base.


Estou desconfiado que o problema seria na escolha do campo da base.


Alguém saberia me dizer o que está errado?

set filter em função de usuário

Enviado: 14 Fev 2014 10:14
por Kapiaba
Olá, não seria melhor voce usar ORDSCOPE() ou INDICE TEMPORARIO EM MEMÓRIA?

Muito mais rápido e mais eficiente.

abs,

set filter em função de usuário

Enviado: 14 Fev 2014 15:41
por cjp
E como eu faço isso? Não sei trabalhar com isso, nem achei ajuda no NG pra isso.

Dá uma luz, por favor.

set filter em função de usuário

Enviado: 17 Fev 2014 12:56
por Kapiaba
Olá, de uma olhadinha aqui porfa.

http://fivewin.com.br/index.php?/topic/ ... ntry257998

uso a bastante tempo e garanto que é muito melhor que SER FILTER.

abs.

set filter em função de usuário

Enviado: 17 Fev 2014 17:21
por cjp
Fiz assim e funcionou perfeitamente:

Código: Selecionar todos

			     @ maxrow(),0 clear to maxrow(),maxcol()
				 @ maxrow(),1 say "Procurar: "get exp pict "@!"
				 @ maxrow(),20 say "No campo: "get cp //pict "@!"
				 read
				 if lastkey()#27
				    exp=alltrim(exp)
					cp=alltrim(cp)
			        @ maxrow(),0 clear to maxrow(),maxcol()
					@ maxrow(),1 prompt "Filtrar todas as correspondências"
					@ maxrow(),41 prompt "Selecionar a primeira correspondência"
					menu to opfs
                    keyb " "
					cFiltro:="exp$upper("+cp+")"
					do case
					   case opfs=1
                            INDEX ON data TAG TEMPBOL TO TEMPBOL FOR &cFiltro.							
					   case opfs=2
                            go top
							locate for &cFiltro. //exp$(cp)
					endcase
				 endif
Muito obrigado.

set filter em função de usuário

Enviado: 03 Mar 2014 00:24
por cjp
Amigos,

Estou tentando modificar um pouco esta função, para só pedir o campo para indexação se for realmente necessário (já que o que eu preciso mesmo não é a indexação, e sim o filtro; poderia até suprimi-la, se fosse possível), mas estou tendo dificuldade.

Fiz assim:

Código: Selecionar todos

			     @ maxrow()-10,0 clear to maxrow(),maxcol()
				 @ maxrow()-8,1 say "Procurar no campo:"
				 linha=maxrow()-8
				 do while .t.
				    @ linha,colb prompt field(col)
					linha++
					col++
					if fieldsize(col)=0
					   exit
					endif
					if linha>maxrow()
					   linha=maxrow()-8
					   colb=45
					endif
				 enddo
				 menu to opfs
				 cp=field(opfs)
			     @ maxrow()-10,0 clear to maxrow(),maxcol()
				 @ maxrow()-8,0 say "Procurar por:"get exp pict "@!"
				 read
				 col=1
			     do while .t.
				    if field(col)="DATA" .or. "DT"$field(col)
					   cpf=field(col)
					   exit
					else
					   col++
					   if fieldsize(col)=0
				          @ maxrow(),43 say "Indexando por:"get cpf
				          read
					      exit
					   endif
					endif
				 enddo
				 
				 if lastkey()#27
				    exp=alltrim(exp)
                    opfs=0
			        @ maxrow(),0 clear to maxrow(),maxcol()
					@ maxrow(),1 prompt "Filtrar todas as correspondências"
					@ maxrow(),41 prompt "Selecionar a primeira correspondência"
					menu to opfs
                    keyb " "
					cFiltro:="exp$upper("+cp+")"
					do case
					   case opfs=1
                            INDEX ON &cpf TAG TEMPBOL TO TEMPBOL FOR &cFiltro.							
					   case opfs=2
                            go top
							locate for &cFiltro. //exp$(cp)
					endcase
				 endif
			     @ maxrow()-5,0 clear to maxrow(),maxcol()
Estranhamente, está dando o erro:

Código: Selecionar todos

Error BASE/1003  Variável não existe: DATA"
Na seguinte linha:

Código: Selecionar todos

                            INDEX ON &cpf TAG TEMPBOL TO TEMPBOL FOR &cFiltro.							
Não sei de onde ele está tirando essa variável DATA, que eu não estou usando. Já conferi que a variável cpf, no exemplo que estou usando, é DTCAMYLLA, correspondente a um campo da base em edição. Também conferi que cFiltro corresponde ao objeto de pesquisa digitado pelo usuário.

Só não sei o conteúdo de TEMPBOL, pois copiei esse exemplo de um post deste fórum, sem entender muito bem. Mas também já conferi que TEMPBOL não está anteriormente definido.

Alguém saberia me dizer a razão desse erro?